JSPatch是基于JavaScript的框架,而且看到很多项目在运用,eg:滴滴、猫眼等一些体量比较大的app在用,因此我想在我们APP里面运用。JSPatch用RSA算法来进行文件加密的验证
1.首先我们要生成RSA算法用的密钥和公钥
使用openssl命令行生成密钥对
按照提示,填入私钥密码、签名证书的组织名、邮件等信息以后就会生成包含有公钥的证书文件public_key.der合私钥文件private_key.pem,利用终端输入 cat private_key.pem 可以查看私钥的数据
私钥主要给服务器生成文件加密用的
我们利用私钥是可以生成相对应的公钥的,把公钥放到客服端,来做验证
2.接下来我们对JSPatch嵌入,我们没有用JSPatch提供的服务器,而是 我们自己的服务器,用自己的服务器,就牵涉到几个问题?1)什么时候去请求脚本,2)有脚本了怎么办, 3)同一个版本存在多个修复怎么办 4)不同的版本请求脚本的问题
1)什么时候请求版本、每次启动APP的时候请求
2)有脚本了怎么办 ,我们会查看本地存在不,存在后,做进一步操作,不存在,直接下载脚本
3)同一个版本存在多个修复怎么办 我们会在同一个版本下,有fix_num 来标志本版本修复数,一直在递增
4)不同的版本请求脚本的问题 ,在启动的时候,我们会带上项目的版本号,来请求这个版本下的脚本
所有我们设计接口是xxx/xxx?v=xxxx ,v表示版本号 返回的数据结构是
{
"url": "xxx",
"v": "4.5.0",
"file_name": "20160604142439.zip",
"fix_num": 2
}
3 当我们传到服务器之前,首先自己要先测试下,也就是说,在我们代码中,对测试和线上来切换,因此我们来定义一个
来进行切换,在本地测试好,在打包传到服务器
接下来看下我们的处理逻辑
首先来判断本地存储的有脚本的信息没有,如果没有,直接去请求脚本,如果有,比较版本号和fix_num,来进行脚本的下载
4、接下来记录下转换网站遇到的坑,
1)如果你项目中有强制转换的类型,在调用的方法转换js的时候,不要带,否则会报错
eg
直接调用self.navigationController().setCanDragBack(YES);就可以了
2)OC 中UIStatusBarAnimationNone等枚举,不会给你转换,所有需要你直接写上对应的数字
3) for in 会遇到不识别的坑,用for(int i = 0 i < 10;i++)
4)self.frame 获取宽高的问题,直接self.frame().width 和self.frame().height
5)NSNotfound 转换成兼容64和32位的数字
6)self.setValue_forKey”方法实现“_week = week",用来这样修改self.setValue_forKey(week,"_week")”