JSPatch实现热修复

对于苹果的app来说,虽然在提交审核上线前会经过严格的测试,但是还是要保证有重大bug的情况下能够及时进行热修复,把损失降到最低。
JSPatch gitHub链接地址,里面有详细使用说明。
在主控制器中添加一个按钮,实现点击方法:

- (IBAction)crashAction:(id)sender {
    NSArray *array = @[@1,@2];
    NSNumber *number = [array objectAtIndex:4];
    NSLog(@"%@",number);
}

很明显,点击就一定会闪退,这个就是模拟app中可能 出现的各种严重问题。我们要做的就是通过JSPatch框架,及时修复线上严重bug。
导入头文件
#import <JSPatch/JPEngine.h>
在app启动时调用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //测试热修复
    [self testJSPatchHotFix];
    return YES;
}

- (void)testJSPatchHotFix
{
    //启动引擎
    [JPEngine startEngine];
    //弹框测试
    [JPEngine evaluateScript:@"\
     var alertView = require('UIAlertView').alloc().init();\
     alertView.setTitle('Alert');\
     alertView.setMessage('AlertView from js'); \
     alertView.addButtonWithTitle('OK');\
     alertView.show(); \
     "];

    //重写闪退的方法
    [JPEngine evaluateScript:@"defineClass('ViewController',{\
     crashAction: function(crashButton){\
     var redColor = require('UIColor').redColor();\
     crashButton.setBackgroundColor(redColor);\
     }\
     },{})"];
}

重新运行app,会发现可以弹出新增的alert框,并且点击button闪退现象消失,完美解决了问题。当然对于线上bug一般需要后端给.js文件下载地址,这里只是为了测试写了本地的js文件。
实际应用中可以这样从后台拿.js文件

[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://cnbang.net/test.js"]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
      NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
      [JPEngine evaluateScript:script];
}];

Demo在这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,061评论 25 709
  • 前言 一说到热修复,可能很多人会觉得应该很复杂,很难用(我以前是这么觉得的。。。),然后最近入职的公司的项目,刚上...
    翻炒吧蛋滚饭阅读 2,743评论 24 42
  • 2017-07-29李运锋Cocoa开发者社区 作者介绍:李运锋,美团点评iOS工程师,5年iOS开发经验,现在是...
    C9090阅读 987评论 0 4
  • JSPatch 是腾讯微信团队牛人bang开源的一种通过JavaScript调用iOS原生代码来实现热修复或者动态...
    杭研融合通信iOS阅读 941评论 2 23
  • 一听就被打动的歌:《醒来》(感谢老师的好歌分享) 总有心情起伏的时候,听到这天籁之音,顿时放下执着。 How fa...
    晓亮LL阅读 200评论 0 0

友情链接更多精彩内容