一、查阅了几种热更新的方案, JSPatch 、 Aspects 、 Stringer 、 TTPatch 、Mango、OCRunner。下面用一个表格对这几种方案分别做个对比:
方案 | 优点 | 缺点 | 链接地址 | 使用说明 |
JSPatch | 1,学习成本低 2,接入成本低 3,热更能力高,还可以用它创建新的模块 | 1,下发的JS代码容易被窜改,存在安全漏洞 2,已经被Apple拒绝,上架很难过审 3,不支持跨平台,仅支持OC | https://github.com/bang590/JSPatchhttp://www.jspatch.com | |
ASPects | 1,利用消息转发机制forwardInvocation进行转发 2,接入成本低 3,热更能力中等,一般的bug可修复 | 1,下发的JS代码容易被窜改,存在安全漏洞 2,直接上架 3,不支持跨平台,仅支持OC | https://github.com/steipete/AspectsLBYFix-依赖Aspects的轻量级低风险的 iOS Hotfix 方案 - 简书 | |
Stringer | 1,速度快又好 | 1,公开文档少,资料少,demo不完备 | https://github.com/eleme/Stinger | |
TTPatch | 1,有完善的公开文档 2,性能可以 | 1,学习成本高 2,执行效率一般 | https://github.com/yangyangFeng/TTPatch | |
MangoFix | 1,无感知修复,不用下载远程补丁文件,只需要配置更新文件的远程地址将更新文件保存在本地即可 2,接近OC的语法 | 1,目前还不支持Swift 2,DSL(领域专用语言) | https://github.com/YPLiang19/Mango/blob/master/README-CN.md | iOS开发 MangoFix结合码云储存补丁文件实现热更新 - 简书 |
OCRunner | 1,二进制补丁,安全性高 2,是MangoFix的进化版 3,速度比MangoFix快 4,方法比MangoFix多 | 1,Swift中的类要声明为@objc才能用 | https://github.com/SilverFruity/OCRunner | 基于OCRunner二进制热更新实践 - 简书 |
2、iOS中OC转Javascript的工具:
https://github.com/bang590/JSPatchConvertor
JSPath在2015年左右是很火的热更新库,但是后后来受苹果的限制,上架很难,如果你对js语言比较熟悉,建议使用ASPects,如果不熟悉js,建议使用OCRunner,它是比较接近OC的语法,也仅仅是热修复。不建议通过这种方式随意修改一般功能逻辑
二、Swift 热修复