App的热更新JSPatch的使用

原创 2016年08月29日 17:10:40

情景假设

众所周知苹果的审核机制非常的严格,虽然现在审核时间缩短了,但是从提交到App Stroe、审核通过、上线也要数日。若线上的App出现很严重的Bug,或者临时改动些小东西(颜色,字体啊什么的)必须要解决要改的时候。如果下线重新审核,无形中又会浪费很多的时间。如果App的用户群很庞大的话,下线重新审核会给公司带来很大的损失,那可不可以在App不下线的情况下修复些Bug呢?这个时候我们就需要热更新。JSPatch demo如下

JSPatch的配置

1.创建App工程(没什么好说的,*注意在plist中开启网络)
2.下载JSPatch的SDK,解压后拖拽到工程里面。*注意Copy items if needed 要勾选
这里写图片描述

3.添加依赖框架 libz.tdb 和 JavaScriptCore.framework ,红色框里的依赖框架需要手动导入,正常情况下蓝色框系统默认添加(若没有则手动导入)
这里写图片描述

JSPatch的简单例子

1.初始化控制器中的控件

创建一个UILabel控件,设置文字,边框等。稍后会通过JSPatch改变lable中的文字,控制器中代码如下:

//
//  ViewController.m
//  JspathDemo
//
//  Created by guo on 16/8/29.
//  Copyright © 2016年 guo. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,strong)UILabel *label;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];


    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 100)];
    self.label = label;
    label.layer.borderWidth = 1;
    label.layer.borderColor = [UIColor orangeColor].CGColor;
    label.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:label];
    [self test];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)test{

    self.label.text = @"我是lable";

}

@end

2.在AppDelegate中启动JSPatch

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //传入在平台申请的 appKey。会自动执行已下载到本地的 patch 脚本。
    [JSPatch startWithAppKey:@"fe981ccab3964ba6"];



/*
 事件回调
       type: 事件类型,详见 JPCallbackType 定义
       data: 回调数据
       error: 事件错误
       在 `+startWithAppKey:` 之前调用
 */
    [JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error) {

        switch (type) {
            case JPCallbackTypeUnknow:
                NSLog(@"*****");
                break;
            case JPCallbackTypeRunScript:
                NSLog(@"执行脚本");
                break;
            case JPCallbackTypeUpdate:
                NSLog(@"已拉取新脚本");
                break;
            case JPCallbackTypeCondition:
                NSLog(@"条件下发");
                break;
            case JPCallbackTypeGray:
                NSLog(@"灰度下发");
                break;            
            default:
                break;
        }



 /*
 进入开发模式
     平台下发补丁时选择开发预览模式,会只对调用了这个方法的客户端生效。
     在 `+sync:` 之前调用,建议在 #ifdef DEBUG 里调。
 */
    [JSPatch setupDevelopment];



 /*
 与 JSPatch 平台后台同步,
     发请求询问后台是否有 patch 更新,如果有更新会自动下载并执行
     可调用多次(App启动时调用或App唤醒时调)
 */
    [JSPatch sync];


    return YES;
}

传入在平台申请的 appKey。会自动执行已下载到本地的 patch 脚本。

 [JSPatch startWithAppKey:@"fe981ccab3964ba6"];

进入开发模式

[JSPatch setupDevelopment];

与 JSPatch 平台后台同步,发请求询问后台是否有 patch 更新,如果有更新会自动下载并执行
可调用多次(App启动时调用或App唤醒时调)

 [JSPatch sync];

JSPatch服务器脚本

注册JSPacth

注册后点击我的App-》新建App
App名填写虽然没有限制但是尽量与应用名一致把这样规范些
如不是App没有上线的话 AppStore AppID可以不用填写
这里写图片描述
新建App后得到appKey 在此方法中使用
[JSPatch startWithAppKey:@""];
填写版本号与App的版本号一致(新建应用默认版本号为1.0)
这里写图片描述
点击版本(App Version)选择补丁文件。(JSPacth支持多个补丁更新。不需点击加号,加号意为添加多个补丁,我们这里只加一个补丁)
这里写图片描述

这个时候我们还没有补丁,需要自己创建个main.js补丁

defineClass('ViewController',{
    test : function() {
        self.label().setText("label改变了9887");
    },
})

选择好补丁后,勾选开发预览,并提交,发布新补丁。(勾选,以及发布方式没有限制,看具体需求吧。)

ok,这个时候可以看看例子中UILabel的文字是不是已经被JSPatch改变了。

补充

关于iOS的热更新有

  1. 阿里百川HotFix(8月27开始公测)

    阿里百川HotFix能够帮助开发者将修复Bug的补丁,实时发布到APP内,当用户启动APP时,补丁将自动加载安装,用户全程无感知,而Bug已经修复。相比发版到应用市场,等待通过审核,再等到用户下载更新的冗长路径,有的用户甚至对频繁发版的APP会有抵触而不更新,HotFix,将帮助您在第一时间,修复多平台的问题

  2. JSPatch
    JSPatch 是一个开源项目(Github链接),只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。目前主要用于下发 JS 脚本替换原生 Objective-C 代码,实时修复线上 bug。

参考文章

版权声明:本文为博主原创文章,欢迎阅读 评论 转载

相关文章推荐

app版本更新的四种实现方式

版本更新大致分为四大类:app负责单版本检测测与更新(自己实现版本更新),通过苹果商店的自动更新机制进行自动更新和通过第三方平台实现版本检测与更新(如:友盟的版本检测与更新),app和服务器联合实现多...

iOS通过 JSPatch实现 app的热更新

也许也有很多人觉得这是个很高大上的技术,其实不然,我们只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C...

JSPatch来更新已上线的App中出现的BUG

JSPatch的作用是什么呢? 简单来说:(后面有具体的操作步骤以及在操作过程中会出现的错误) 1.iOS应用程序上架到AppStore需要等待苹果公司的审核,一般审核时间需要1到2周.虽然程序在...

JSPatch – 动态更新iOS APP

JSPatch是最近业余做的小项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug。...

JSPatch – 动态更新iOS APP

JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug。 ...

JSPatch: iOS App 动态更新服务平台

iOS App的更新始终是个头疼的问题,Apple一般的审核周期需要两周左右,如果出现严重的bug,可以申请下加急审核,即使这样,审核通过的时间也需要好几个小时,并且加急的次数也是有限的,不能一直使用...

ios 对于JSPatch的基本用法(热更新)

对于苹果官方对于App的审核过于严格,每次App进行修改,都需要进行版本更新与迭代,还得重新提交给苹果审核,,从提交、审核、上线需要的时间也并没有一次次的缩短,如果已上线的App出现了bug或者需要进...

JSPatch热修复的使用的那些深坑

1、为什么要分享JSPatch? Cicada(iOS)1.6.0版本上线后发现有个非常严重的Bug,导致老版本升级之后一打开应用就Crash,如果紧急修复提交审核,最快也得三天左右,那么这...

IOS热更新-JSPatch实现原理+Patch现场恢复

关于HotfixPatch 在IOS开发领域,由于Apple严格的审核标准和低效率,IOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码热更新(HotfixPatch)对于IO...

iOS- JSPatch 热更新

即便现在苹果努力优化他的审核部门,将审核速度提升到尽可能不可思议的一天或两天通过审核,但是对于想随意控制app实时更新的公司而言,这显示是不够的,热更新应运而生..JSPatch -> JSPa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)