JSPatch

作者: CoderZNB | 来源:发表于2016-11-03 00:11 被阅读0次

    JSPatch 是 iOS 平台上的一个开源项目(Github链接),只需接入极小的三个引擎文件,JPEngine.h,JPEngine.m,JSPatch.js即可以用 JavaScript 调用和替换任意 Objective-C 方法,也就是说可以在 App 上线后通过下发 JavaScript 脚本,实时修改任意 Objective-C 方法的实现,达到修复 Bug 或动态运营的目的。目前 JSPatch 被大规模应用于热修复(Hotfix),已有超过 2500 个 App 接入。

    虽然 JSPatch 目前大部分只用于热修复,但因为其可以调用任意 Objective-C 方法,实际上它也可以做热更新的工作,也就是动态为 App 添加功能模块,并对这些功能模块进行实时更新,可以起到跟 React Native 一样的作用

    例如过节期间想给APP添加节日图片,更改界面,如果上架的话显然太晚了,这时候我们就可以用JSPatch,我们可以写上这一串代码
    // OC中代码
    // 在index.js中修改按钮背景颜色
    - (void)setbtnBackgroudColor {
        self.btn.backgroundColor = [UIColor orangeColor];
    }
    
    // JS中这么书写
    setbtnBackgroudColor:function() {
                var btn = self.btn()
                var blueColor = require('UIColor').blueColor()
                btn.setBackgroundColor(blueColor) // 修改背景颜色
            btn.setImage_forState(require('UIImage').imageNamed("znb 2"),1) // 修改高亮时按钮背景图片
     },
    

    例如线上 APP 有一段代码出现 bug 导致 crash:

    @implementation JPTableViewController
    ...
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
      NSString *content = self.dataSource[[indexPath row]];  //可能会超出数组范围导致crash
      JPViewController *ctrl = [[JPViewController alloc] initWithContent:content];
      [self.navigationController pushViewController:ctrl];
    }
    ...
    @end
    
    可以通过下发这样一段 JS 代码,覆盖掉原方法,修复这个 bug:
    //JS
    defineClass("JPTableViewController", {
      //instance method definitions
      tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
        var row = indexPath.row()
        if (self.dataSource().length > row) {  //加上判断越界的逻辑
          var content = self.dataArr()[row];
          var ctrl = JPViewController.alloc().initWithContent(content);
          self.navigationController().pushViewController(ctrl);
        }
      }
    }, {})
    

    除了修复 bug,JSPatch 也可以用于动态运营,实时修改线上 APP 行为,或动态添加功能。JSPatch 详细使用文档见 Github Wiki

    什么是 JSPatch 平台?


    JSPatch 需要使用者有一个后台可以下发和管理脚本,并且需要处理传输安全等部署工作,JSPatch 平台帮你做了这些事,提供了脚本后台托管,版本管理,保证传输安全等功能,让你无需搭建一个后台,无需关心部署操作,只需引入一个 SDK 即可立即使用 JSPatch。

    JSPatch SDK 与 github 上开源代码的关系?


    Github 开源的是 JSPatch 核心代码,使用完全免费自由,若打算自己搭建后台下发 JSPatch 脚本,可以直接使用 github 上的核心代码,与 JSPatch 平台上的 SDK 无关。JSPatch 平台的 SDK 在核心代码的基础上增加了向平台请求脚本/传输解密/版本管理等功能,只用于这个平台。

    JSPatch 平台速度和稳定性如何?


    通过 JSPatch 平台上传的脚本文件都会保存在七牛云存储上,客户端 APP 只跟七牛服务器通讯,支持高并发,CDN分布全国,速度和稳定性有保证。

    JSPatch平台SDK接入

    JSPatch平台SDK接入:这里面有官方详细的接入过程,很简单的,就不一一赘述了

    SDK接入链接

    最后附上github上源码

    JSPatch-Demo
    JSPatch-基础用法

    提示:结合JSPatch-基础用法和demo可以更快上手JSPatch.祝你好运

    学习资料

    1.https://github.com/bang590/JSPatch
    2.https://github.com/mmin18/WaxPatch
    3.https://github.com/probablycorey/wax
    4.https://github.com/alibaba/AndFix
    5.http://blog.cnbang.net/tech/2879/
    6.http://blog.cnbang.net/works/2767/
    7.http://blog.cnbang.net/tech/2808/
    8.http://blog.zhaiyifan.cn/2015/11/20/HotPatchCompare/

    相关文章

      网友评论

          本文标题:JSPatch

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