JSPatch是基于JavaScript的框架搂抒,而且看到很多項(xiàng)目在運(yùn)用艇搀,eg:滴滴、貓眼等一些體量比較大的app在用求晶,因此我想在我們APP里面運(yùn)用焰雕。JSPatch用RSA算法來進(jìn)行文件加密的驗(yàn)證
1.首先我們要生成RSA算法用的密鑰和公鑰
? ?使用openssl命令行生成密鑰對(duì)
按照提示,填入私鑰密碼芳杏、簽名證書的組織名矩屁、郵件等信息以后就會(huì)生成包含有公鑰的證書文件public_key.der合私鑰文件private_key.pem,利用終端輸入 cat private_key.pem 可以查看私鑰的數(shù)據(jù)
私鑰主要給服務(wù)器生成文件加密用的
我們利用私鑰是可以生成相對(duì)應(yīng)的公鑰的吝秕,把公鑰放到客服端,來做驗(yàn)證
2.接下來我們對(duì)JSPatch嵌入空幻,我們沒有用JSPatch提供的服務(wù)器烁峭,而是 我們自己的服務(wù)器,用自己的服務(wù)器秕铛,就牽涉到幾個(gè)問題约郁?1)什么時(shí)候去請(qǐng)求腳本,2)有腳本了怎么辦但两, 3)同一個(gè)版本存在多個(gè)修復(fù)怎么辦 4)不同的版本請(qǐng)求腳本的問題
1)什么時(shí)候請(qǐng)求版本鬓梅、每次啟動(dòng)APP的時(shí)候請(qǐng)求?
2)有腳本了怎么辦 ,我們會(huì)查看本地存在不镜遣,存在后己肮,做進(jìn)一步操作,不存在悲关,直接下載腳本
3)同一個(gè)版本存在多個(gè)修復(fù)怎么辦? 我們會(huì)在同一個(gè)版本下谎僻,有fix_num 來標(biāo)志本版本修復(fù)數(shù),一直在遞增
4)不同的版本請(qǐng)求腳本的問題 ,在啟動(dòng)的時(shí)候寓辱,我們會(huì)帶上項(xiàng)目的版本號(hào)艘绍,來請(qǐng)求這個(gè)版本下的腳本
所有我們?cè)O(shè)計(jì)接口是xxx/xxx?v=xxxx ,v表示版本號(hào) 返回的數(shù)據(jù)結(jié)構(gòu)是
{
"url": "xxx",
"v": "4.5.0",
"file_name": "20160604142439.zip",
"fix_num": 2
}
3 當(dāng)我們傳到服務(wù)器之前,首先自己要先測試下秫筏,也就是說诱鞠,在我們代碼中挎挖,對(duì)測試和線上來切換,因此我們來定義一個(gè)
來進(jìn)行切換航夺,在本地測試好蕉朵,在打包傳到服務(wù)器
接下來看下我們的處理邏輯
首先來判斷本地存儲(chǔ)的有腳本的信息沒有,如果沒有阳掐,直接去請(qǐng)求腳本始衅,如果有,比較版本號(hào)和fix_num缭保,來進(jìn)行腳本的下載
4汛闸、接下來記錄下轉(zhuǎn)換網(wǎng)站遇到的坑,
?1)如果你項(xiàng)目中有強(qiáng)制轉(zhuǎn)換的類型艺骂,在調(diào)用的方法轉(zhuǎn)換js的時(shí)候诸老,不要帶,否則會(huì)報(bào)錯(cuò)
eg
直接調(diào)用self.navigationController().setCanDragBack(YES);就可以了
2)OC 中UIStatusBarAnimationNone等枚舉钳恕,不會(huì)給你轉(zhuǎn)換别伏,所有需要你直接寫上對(duì)應(yīng)的數(shù)字
3) for in 會(huì)遇到不識(shí)別的坑,用for(int i = 0 i < 10;i++)
4)self.frame 獲取寬高的問題苞尝,直接self.frame().width 和self.frame().height
5)NSNotfound 轉(zhuǎn)換成兼容64和32位的數(shù)字?
6)self.setValue_forKey”方法實(shí)現(xiàn)“_week = week"畸肆,用來這樣修改self.setValue_forKey(week,"_week")”