-
Notifications
You must be signed in to change notification settings - Fork 2.2k
JSPatch Loader 使用文档
JSPatch 使用时需要后台配合下发,中间有打包加密,解密解压校验,版本号管理等逻辑要处理,JSPatch Loader 封装了这些逻辑,让使用者方便地搭建自己的后台下发流程。
JSPatch Loader 做的事情包括:
- 在本地打包和加密脚本文件
- 根据版本号向服务端拉取上述打包后的文件
- 对文件进行 RSA 校验/解压/执行
- 执行本地已下载的脚本
整个校验原理在 JSPatch 部署安全策略 这篇文章里详细说明。
拷贝 Loader/
目录下的文件到你的项目。
- 设
JPLoader.h
的rootUrl
为你的服务器地址。脚本打包后的文件在服务器的存放路径是${rootUrl}/${appVersion}/${patchFile}
- 自行生成 RSA 公钥私钥,替换
JPLoader.h
里的publicKey
和tools/pack.php
里的privateKey
。
使用流程是:
- 通过
tools/pack.php
这个脚本打包需要下发的文件。 - 手动上传打包后的文件到自己的服务器指定位置(
${rootUrl}/${appVersion}/${patchFile}
) - 客户端调用相关接口下载/执行上述脚本文件。
-
JSPatch 脚本文件规则:可以有多个 js 文件,脚本内可以调用
include()
接口包含,没有目录层级,必须包含一个main.js
文件作为入口。 -
在命令行使用
Loader/tools/pack.php
脚本打包 JS 文件,由用户放到自己的服务器上给客户端下载。
$ php pack.php main.js other.js
会在当前目录生成 v1.zip 文件,打包了所有 js 文件并包含了校验文件。也可以在最后通过 -o
指定输出文件名:
$ php pack.php main.js -o v2
脚本文件名代表当前 patch 版本,与后续的 +updateToVersion:callback:
接口相关。
客户端在得知服务端脚本有更新时,调用 +updateToVersion:callback:
接口下载对应版本的脚本。至于如何得知服务端脚本更新可以自行定义,可以另外加个请求每次唤醒时询问服务器,也可以在 APP 原有的请求里加上这个信息。
举个例子,客户端当前 App 版本号为 1.0,上述配置 rootUrl
变量配为 http://localhost/JSPatch/
,服务端告诉客户端最新脚本版本号为2,于是调用 [JPLoader updateToVersion:2 callback:nil]
,这时会去请求 http://localhost/JSPatch/1.0/v2.zip
这个文件并解压验证,保存到本地目录等待执行。
通过 +run
接口执行已下载到本地的 JSPatch 脚本文件,建议在程序启动的 -application:didFinishLaunchingWithOptions:
里第一句调用这个接口,防止调用后执行 JSPatch 脚本过程中其他线程同时在执行相关代码,导致意想不到的问题。
在脚本文件还没打包上传到服务器前,可以先把文件加入项目工程 bundle 进行测试,加入后调用 +runTestScriptInBundle
就会执行项目工程里的 main.js
文件,并且 JS 脚本里 include()
接口也可以正常使用。
注意 JSPatch Loader 只处理脚本校验,防止传输过程被第三方篡改,但不会对脚本内容进行加密传输和存储,对脚本内容有加密需求的可以自行加上加密逻辑。