什么是热更新?
热更新(又名热修复),是指通过事先设定好的接口从网上下载无 bug 的代码来替换有 bug 的代码。
正常开发流程
版本1.0上线 > 用户安装 > 发现bug > 紧急修复 > 重新发布版本1.1 > 用户安装
热更新开发流程
版本1.0上线 > 用户安装 > 发现bug > 紧急修复 > 打出补丁,推送给用户 > 自动拉取,补丁修复
热更新的优势
- 无需重新发布版本
- 用户无感知修复,无需下载最新的应用,代价小,进而能够提高用户体验
- 修复成功率高,把损失降到最低
热更新原理
JSPatch 的基本原理就是:JS 传递字符串给 OC,接收到字符串后使用反射机制把字符串转成对应的类和方法,再通过 Runtime 接口调用和替换 OC 方法。
Class class = NSClassFromString("UIViewController");
id viewController = [[class alloc] init];
SEL selector = NSSelectorFromString("viewDidLoad");
[viewController performSelector:selector];
也可以替换某个类的方法为新的实现:
static void newViewDidLoad(id slf, SEL sel) {}
class_replaceMethod(class, selector, newViewDidLoad, @"");
还可以新注册一个类,为类添加方法:
Class cls = objc_allocateClassPair(superCls, "JPObject", 0);
class_addMethod(cls, selector, implement, typedesc);
objc_registerClassPair(cls);
具体热更新原理实现传送门
热更新的几种方式
JSPatch
平台 SDK 1.7.2 以上版本可以通过苹果审核,但 1.8.0 版本官网提示有大概率审核不过。 文档详细,具体导入步骤 JSPatch 文档
能否上架:不确定
DynamicCocoa
滴滴开源的热更新SDK,具体还未研究...
滴滴 iOS 动态化方案 DynamicCocoa 的诞生与起航