美文网首页
JSPatch实现热修复

JSPatch实现热修复

作者: C_HPY | 来源:发表于2016-11-30 17:11 被阅读16次

    对于苹果的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在这里

    相关文章

      网友评论

          本文标题:JSPatch实现热修复

          本文链接:https://www.haomeiwen.com/subject/uhytmttx.html