使用JSPatch进行iOS(Swift)热修复操作步骤
1.集成SDK
1.1 在JSPatch官网将JSPatchPlatform.framework拖入项目,拖入项目中,勾选 "Copy items if needed",并确保 "Add to target" 勾选了相应的 target。
1.2 添加依赖框架:TARGETS -> Build Phases -> Link Binary With Libraries -> + 添加 libz.tbd 和 JavaScriptCore.framework。
2 .配置RSA密钥
2.1 在 Mac 终端上执行 openssl,再执行以下三句命令,生成 PKCS8 格式的 RSA 公私钥,执行过程中提示输入密码,密码为空(直接回车)就行。
openssl >
genrsa -out rsa_private_key.pem 1024
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
2.2 生成配置代码并接入
接下来要生成公钥配置代码,接入 SDK 时使用。
可以通过 RSA配置自动生成 工具生成配置代码,打开 rsa_public_key.pem,复制内容到框里点击 生成配置代码 就可以了。也可以手动生成,把 rsa_public_key.pem 的内容换行手动改成 \n,并放入 [JSPatch setupRSAPublicKey:@""] 里
[JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error) {
// NSLog(data,error); /// 1.7.5版本 bug 此方法打开后第一次加载补丁会崩溃
}];
[JSPatch startWithAppKey:kJSPatchKey];
[JSPatch setupRSAPublicKey:kJSPatchPublicKey];
3.补丁发布与测试
3.1 配置App
在官网''我的App'新增App,填写App名称(随便写),会获取到一个appKey,该appKey就是在2.2代码中配置的常kJSPatchKey
新增App版本,App版本号一定要与工程的appVersion一致!
至此我们就可以进行补丁的下发。
4.补丁下发
4.1 补丁下发前的准备工作。
4.1.1 新建OC的配置文件,JSPatch对于swift语言的兼容性不是很好,需要通过引入OC文件配置appKey和publicKey等,也可以不用新建此文件通过混淆前的类进行配置。
4.2 原始swift需要添加的修饰词。想通过JSPatch进行热修复,类,属性等前必须添加 @objc dynamic 修饰。
import UIKit
class ViewController: UIViewController {
@objc dynamic var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.label = UILabel(frame: CGRect.init(x: 100, y: 100, width: 100, height: 30))
self.view.addSubview(label)
self.test()
}
@objc dynamic func test() {
self.label.text = "OOO"
}
}
4.3 补丁下发。 针对4.2中label的热修复处理,我们需要通过js文件处理。
具体格式如下:
defineClass('JSPatchDemo.ViewController',{
test :function() {
self.ORIGviewDidLoad()
self.label().setText("KKKKK");
console.log('KKKKK')
},
})
defineClass表示覆盖方法。JSPatchDemo表示工程名,ViewController表示类名。test :function()表示覆盖的方法名,在方法名前加 ORIG 即可调用未覆盖前的 OC 原方法。详细的使用语法:语法
下发补丁后的label的text变化为我们修改的值。