由于ios端APP审核周期较长,所以热修复和商店之外的安装方式营运而生。这里列举比较一下,简单记录,以供参考。
一、热更新
1、JSPatch
JSPatch 是一个开源项目(Github链接),只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。目前主要用于下发 JS 脚本替换原生 Objective-C 代码,实时修复线上 bug。
平台最新 SDK 1.8.2 处于试验阶段,未能确保审核通过,老版本有较大概率审核被拒。
优点:1、学习成本低 2、接入成本低 3、热更能力高,还可以用它创建新的模块
缺点:1、下发的JS代码容易被窜改,存在安全漏洞 2、已经被Apple拒绝,上架很难过审 3、不支持跨平台,仅支持OC
2、MangoFix
和传统的iOS热修复使用JavaScript bridge 的方式完全不同,MangoFix是一个语法和OC语法非常类似的DSL,其语言本身的设计目标就是为了解决iOS热修复问题,所以在使用的便捷程度和性能方面都要远远超过传统的iOS 热修复SDK。
优点:1、无感知修复,不用下载远程补丁文件,只需要配置更新文件的远程地址将更新文件保存在本地即可 2、接近OC的语法
缺点:1、目前还不支持Swift 2、DSL(领域专用语言),难度较高
3、OCRunner
首先 PatchGenerator 使用 oc2mangoLib 将 Objective-C 源码生成语法树,随后使用 ORPatchFile 将语法树序列化为补丁文件,最后 OCRunner 使用 OCPatchFile 将补丁反序列化为语法树后解释执行语法树。
优点:1、二进制补丁,安全性高 2、是MangoFix的进化版 3、速度比较快 4、方法比较多
缺点:1、Swift中的类要声明为@objc才能用
备注:JSPath在2015年左右是很火的热更新库,但是后后来受苹果的限制,上架很难,如果不熟悉js,建议使用OCRunner,它是比较接近OC的语法,也仅仅是热修复。不建议通过这种方式随意修改一般功能逻辑!!!