iOS 热修复技术调研

  Hot-Fix 热修复技术,就是指不需要重新上架 ipa 包就修复线上 bug 的相关机制。由于 App Store 的审核机制,以及苹果不允许 App 加载动态库等原因,iOS 的热修复技术一直比较欠缺。
  但是 bug 是难以避免的,除了通过严格测试来修复上线前的 bug,用热修复技术来解决线上 bug,对于一款 App 来说,是相当必须的。

1.JSPatch

Star 数:10,909
最近一次更新时间:去年
谷歌搜索词条结果:49,200
百度搜索词条结果:2,930,000
是否也支持 Swift:是
是否有中文文档:是

简介:
bugly 所包含的热更新核心也是采用 JSPatch 技术。
JSPatch 是一个开源项目(Github链接),只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。目前主要用于下发 JS 脚本替换原生 Objective-C 代码,实时修复线上 bug。
理论上可以修改和新建所有的模块,但是不建议这样做。
建议用来做紧急的小需求和修复严重的线上 bug。

使用时需要接入 JSPatch 平台,官方给出以下解释:
若从苹果的审核规则来看,JSPatch 和 React Native 是一样的,但苹果接受 React Native,拒绝 JSPatch,主要是因为JSPatch 可以调用任意原生 API,出于安全和滥用方面的顾虑而拒绝,之前大量 APP 自行接入 JSPatch,导致有几个风险点:

  1. 无法保证每个 APP 接入方式都是安全的,容易传输过程被替换,被黑客中间人攻击,成为 iOS 上的一个漏洞。
  2. 一些像地图/推送类 SDK 接入 JSPatch 后覆盖大量 APP,若这些 SDK 后台被攻破,可以对这些 APP 下发恶意脚本,造成大面积危害。
  3. 开发者可以方便地不经过苹果审查使用 JSPatch 调用私有 API。
  4. 若大家还是通过一些混淆手段骗过苹果继续各自接入 JSPatch,出于上述三点考虑,苹果不可能再允许,但若接入 JSPatch 平台,上述三个问题可以帮苹果解决,不再有这类隐患,详见这里,苹果才会考虑允许继续使用。

截止文档生成日期,关于 jspatch 是否可以通过审核,可以参考官方平台的公告:平台最新 SDK 1.8.2 处于试验阶段,未能确保审核通过,有意配合试验者可邮件获取 SDK。SDK 1.8.0 版本有较大概率审核被拒,但企业版APP可用,若确认使用可点此下载 SDK 1.8.0。

2.rollout

Star 数:2,494
最近一次更新时间:16 天前
谷歌搜索词条结果:311,000
百度搜索词条结果:45,100
是否也支持 Swift:是
是否有中文文档:否

  国外的一个热补丁服务叫 rollout。 它是一个服务平台,底层也是用 JS 调用和替换 OC 方法去实时修复 bug,不过它不是开源的,只能在这个平台上用,另外它的 JS 写法是比较复杂的,导致它不得不在平台上做一些便捷的功能,把一些常用的操作封装起来,减少使用者写代码。
  缺点是需要翻墙。

3.xLua

Star 数:4,620
最近一次更新时间:4 天前
谷歌搜索词条结果:111,000
百度搜索词条结果:4,970,000
是否也支持 Swift:是
是否有中文文档:是

  腾讯的开源热修复库,支持 android、ios 64/32/bitcode 等平台。在运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;编辑器下无需生成代码,开发更轻量。
  游戏用居多。

4.CodePush

Star 数:3,700
最近一次更新时间:27 天前
谷歌搜索词条结果:15,200,000
百度搜索词条结果:2,570,000
是否也支持 Swift:是
是否有中文文档:否

  微软提供的热更新服务,可以使用他提供的热修复平台,国内也有针对这个搭建的服务:pushy。   

5.Aspects

  Star 数:7,418
最近一次更新时间:4 个月前
谷歌搜索词条结果:46,200,000
百度搜索词条结果:2,630,000
是否也支持 Swift:是
是否有中文文档:否

  Aspects 类似于 oc 中的 runtime 机制实现,提供了方便简单的方法进行面向切片编程(AOP),相对于 JSPatch 比较轻量级。实际使用的话,AOP 比较适用于开发阶段。
  
  
  总结:通过以上对比分析,推荐使用 JSpatch,老牌,且官方支持文档消息。备选框架推荐 xLua。

------本文结束 感谢阅读------

本文地址:http://kaaaaai.cn/articles/iOS-hot-fix.html
本文基于 知识共享署名-相同方式共享 4.0 国际许可协议发布
转载请注明出处,谢谢!

众筹项目:拯救世界!
0%