首页 > iOS 开发, iOS测试 > JS Patch的热加载

JS Patch的热加载

目前有的一些动态补丁方案,例如 WaxPatch等。相对于WaxPatch, JSPatch的优势是更符合Apple的规则,通过JavaScriptCore.framework执行。

JSPatch 使用系统内置的JavaScriptCore.framework,无需内嵌脚本引擎,体积小巧。
SPatch可以动态打补丁,自由修改APP里的代码,理论上还可以完全用JSPatch实现一个业务模块,甚至整个APP,跟wax一样,但考虑以下两点不推荐这么做。
1. JSPatch和wax存在性能问题。
JSPatch和wax一样都是通过Objective-C Runtime的接口通过字符串反射找到对应的类和方法进行调用,这中间的字符串处理会损耗一定的性能,另外两种语言间的类型转换也有性能损耗,若用来做一个完整的业务模块,大量的频繁来回互调,可能有性能问题。
2. JSPatch和wax都没有IDE支持,开发效率低。
若想动态为APP添加模块,建议经常变化的模块使用React Native module化。
这里就JSPatch的使用做相关的分享, 代码已经push到iOS_Customer 分支jspatch-demo。demo的效果,打开app之后banner位的修改。每次kill app之后将会改变布局。
在JSPatch使用中主要分为 以下几点:
1. patch.js的coding
jspatch 的使用主要是将oc代码转换成js代码做热补丁。 转换工具有 (在线), (客户端)
在demo的patch.js中,主要override了原先的BannerCell。
在patch.js的转换过程中可能遇到的问题可以查看 [JSPatch-基础用法] 和 [defineClass使用文档]. 也可以参考[这个]
2. patch.js的引入
[JPEngine startEngine];
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@”patch” ofType:@”js”];
NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];
[JPEngine evaluateScript:script];
3. patch.js的更新
可以通过[JSPatch-Loader]进行,也可以自己通过api接口判断md5进行更新.

———EOF———

作者: 吴颖敏 | www.futurehandw.com
Email: wuyingminhui@gmail.com
转载请注明来源:吴颖敏 - www.futurehandw.com



  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.