JSPatch
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接入:这里面有官方详细的接入过程,很简单的,就不一一赘述了
最后附上github上源码
提示:结合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/