JSPatch使用

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

 

集成 SDK
1、通过 cocoapods 导入
在 podfile 中添加命令:
pod 'JSPatchPlatform', :git => 'https://github.com/bang590/JSPatchPlatform.git'
再执行 pod install 即可。
2、手动导入

下载 SDK 后解压,将** JSPatchPlatform.framework** 拖入项目中,勾选 "Copy items if needed",并确保 "Add to targets" 勾选了相应的 target。

pods 导入或手动导入SDK后添加依赖框架:TARGETS -> Build Phases -> Link Binary With Libraries -> + 添加libz.dylib(Xcode7之后是libz.tbd)和 JavaScriptCore.framework。

测试使用

1、测试本地脚本

本地测试 AppDelegate.m 按如下写法即可,SDK 提供了+testScriptInBundle 方法用于开发状态下测试。

然后在我们的 demo 中新建一个 empty 文件,叫 main.js,注意这是 JSPatch 平台规范,js 脚本文件名必须是 main.js。

 

 

现在我们就可以通过在 main.js 写 js 修复 demo 中的 bug,代码如下:

defineClass('ViewController', {
    createJsPatchDemo: function() {

       
        console.log("全市污水处理厂在线监控系统9项指标运营维护项目");
    },
});

 

2、线上版本测试

热修复针对的是线上版本,所以本地测试只是验证可行性,重要的还是线上 bug 的修复。下面我们进行线上测试。
到 JSPatch官网 注册,登录,我的 App,添加 App,获取 app key,添加 App 版本,发布补丁.

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    /** */
    [JSPatch startWithAppKey:@"1b823abb1c059409"];
    [JSPatch setupRSAPublicKey:@"-----BEGIN PUBLIC KEY-----\nMIG0GKBgQDo9OLb7RYBCsST0Nq7EPRmfcAt\nZ4W6dhPE3Lrew+0JfiUCiTt2ruhPXQLSJN2OcGKVV4eXXR1KxI6BC3yBZvoXF\n/tQ/rIsMgknHMYGnh817tYAq/SSLu6BhfygK40\n6Ixyha1mbfQJwIDAQAB\n-----END PUBLIC KEY-----"];
    
//    [JSPatch setupDevelopment];
    [JSPatch sync];//检查补丁更新
    /*
     用于发布前测试脚本。先把脚本放入项目中,调用后,会在当前项目的 bundle 里寻找 main.js 文件执行
     测试完成后请删除,改为调用 +startWithAppKey: 和 +sync
     
    [JSPatch testScriptInBundle];*/
    
    self.window =[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor=[UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    ViewController *vCont=[[ViewController alloc]init];
    UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:vCont];
    self.window.rootViewController = nav;
    return YES;
}

注意+testScriptInBundle不能与+startWithAppKey:一起调用,+testScriptInBundle只用于本地测试,测试完毕后需要去除,项目中的 main.js 文件也要删除(可拷贝一份至桌面留作上传的补丁使用)。另外,通过 JSPatch 平台上传的脚本文件都会保存在七牛云存储上,而七牛云存储的下载使用的是 http 协议,因此需要在项目的 info.plist 文件中添加如下字段.

通过测试如果项目中其他没有网络请求,最新的“补丁”不会被及时下载更新。

 

有OC转换工具:转换JS: 转换JS

平台原理详解:如何使用补丁语言:补丁语言

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值