JSPatch Platform是JSPatch的一个平台,使用此平台是为了使用JSPatch,如果大家不了解JSPatch可以网上搜一下,有很多专业的解释,我这里只做一些简单的介绍。
先说说JSPatch有啥作用。
作用:是iOSApp获取脚本语言能力:动态更新App,替换项目原生代码修复bug。 当时听到JSPatch有这个动态修复bug的功能,感觉有点不可思议,同时觉得这个JSPatch简直太厉害了。用了它就可以及时修改App出现的bug,节约了上线先版本修复bug的时间。
根本原理:利用OC的动态语言特性去动态修改类的方法实现
实现巧妙之处:利用了OC的消息转发机制
要使用JSPatch是需要一个JSPatch平台的,那么什么是JSPatch平台?
JSPatch平台:帮助客户端开发者下发和管理脚本,处理传输安全等部署工作。 有了JSPatch平台就不用我们自己的后台去操作了,当然如果我们自己的后台愿意做能做也可以交给我们自己的后台去做。
JSPatch Platform就是一个第三方的JSPatch平台,这里就简单滴说说如何使用此平台。(这不是打广告!这不是打广告!这不是打广告!)
首先需要登录官网注册 (http://jspatch.com),成为它的一个用户。然后就可以添加自己要使用JSPatch的App了。添加App完成后会相应地有一个AppKey作为App的唯一标识(大多数的第三方平台都会有着App对应的AppKey),这个AppKey在我们工程中会用到。 App添加完成后我们还需要为App添加App版本,这样这个平台才能知道我们的哪个版本的App需要使用JSPatch进行代码动态修复。
至于JSPatch Platform这个平台的SDK下载以及SDK的使用在这个平台的官网都有详细的介绍,这里就不多说了。在导入该平台的SDK之后我们还需要在我们的Xcode中需要导入两个库JavaScriptCore.framework和libz.tbd.
当我们发现自己的代码中有需要修复的代码的时候需要写一个js脚本(很多人会懵了,js完全不会写),这里做一个简单的介绍(这也是网上的)。我们在ViewController中写一个touch方法:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSArray *arr =@[@"haha"];
NSLog(@"%@", arr[2]);
}
数组arr的长度为1,arr[2]明显会发生数组越界的错误,点击屏幕就会生崩溃。
这时我们需要在Xcode中创建一个main.js文件,创建一个空文件即可,
命名为main.js.
此文件中的代码为:(当然也是网上给的js代码)
// 要用到的OC类需要require引用下
require('UIAlertView')
// 重写ViewController类中的touchesBegan_withEvent方法,具体写法看文档吧
defineClass("ViewController", {
touchesBegan_withEvent: function(touches, event) {
// 方法的实现
var av = UIAlertView.alloc().initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles("bug修复了","是不是很神奇", null,"取消","确定", null);
av.show();
}
})
然后将main.js文件导出以便待会上传,同时将此文件从Xcode中删除。
上传main.js脚本文件:
点击选取文件选择我们导出的main.js文件即可。然后运行Xcode,再点击屏幕就不会再发生崩溃的问题了。
至于写JS脚本懵的问题,有一个工具可以将我们的OC代码直接转换成JS代码,此工具为JSPatch Convertor,使用了此工具我们在这块开发就会简单许多。
这门技术也是最近才接触到的,还没有正式应用到上线项目中,只是写了一个小小的demo,不过感觉确实挺神奇(有点孤陋寡闻了我!)。今天看看了JSPatch感觉收获还是挺大,还是应该多多接触新的、好的技术啊。