- 判断是否在审核中
- 从服务端拉取需要下载JS.zip文件的版本
- 下载JS.zip文件
- 从服务端下来的字段判断是下载后立即执行还是下次启动再执行
- 立即执行(适用于替换还未发生的函数,已经生成的界面只有重新生成才会改变)
- 下次启动执行下载下来并解压解密的JS文件(保证所有方法都是替换后才执行)
- JPCleaner 即时撤回脚本
- safari 断点调试
- 因JavaScriptCore导致死锁问题(执行JavaScriptCore会加JS锁)
-
- webView
-
- JS锁和其他锁导致死锁
- block引起 (不支持JS 封装的 block 传到 OC 再传回 JS)
[JPEngine startEngine];
NSString *path = [[NSBundle mainBundle] pathForResource:@"main" ofType:@"js"];
[JPEngine evaluateScriptWithPath:path];
在 Mac 终端上执行 openssl,再执行以下三句命令,生成 PKCS8 格式的 RSA 公私钥,执行过程中提示输入密码,密码为空(直接回车)就行。
$ openssl
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
这样在执行的目录下就有了 rsa_private_key.pem 和 rsa_public_key.pem 这两个文件。这里生成了长度为 1024 的私钥,长度可选 1024 / 2048 / 3072 / 4096 ...。
$ php pack.php main.js other.js
服务器的存放路径是 ${rootUrl}/${appVersion}/${patchFile}
举个例子,客户端当前 App 版本号为 1.0,上述配置 rootUrl 变量配为 http://localhost/JSPatch/,服务端告诉客户端最新脚本版本号为2,于是调用 [JPLoader updateToVersion:2 callback:nil],这时会去请求 http://localhost/JSPatch/1.0/v2.zip 这个文件并解压验证,保存到本地目录等待执行。
关于JSPatch Loader 的RSA加密只处理脚本校验,防止传输过程被第三方篡改,但不会对脚本内容进行加密传输和存储,对脚本内容有加密需求的可以自行加上加密逻辑。