官網(wǎng):阿里百川HotFix
SDK集成
有兩個framework百新,其中
AliHotFix.framework
是必須導入項目的瞬矩,是熱修復SDK徒欣。
AliHotFixDebug.framework
是調(diào)試工具攒磨,僅在補丁未全量發(fā)布的時候泳桦,使用它提供的方法來主動拉取某個補丁。拉取的方法是通過掃描百川熱修復控制臺上生成的二維碼娩缰,每一個上傳的補丁都會生成一個二維碼灸撰。在調(diào)試完成后請刪除此framework。
調(diào)用方法
在didFinishLaunchingWithOptions
方法中啟用熱修復:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 初始化AliHotFix
[AliHotFix startWithAppID:@"15986-2"
secret:secret
privateKey:privateKey
publicKey:rsaPublicDerData
encryptAESKey:aesEncryptKeyData];
}
在程序每一次重新進入前臺激活時拼坎,同步補丁浮毯。這是由于App用戶習慣的原因。
假如用戶從來不關(guān)閉App泰鸡,只是切到后臺掛起债蓝。那么在掛起的這段期間,我們發(fā)布了補丁鸟顺,當App從掛起狀態(tài)重新激活時惦蚊,就需要同步一次補丁。
- (void)applicationDidBecomeActive:(UIApplication *)application {
[AliHotFix sync];
}
其中的secret
和privateKey
在百川熱修復網(wǎng)站控制臺獲取讯嫂,其余三個參數(shù)需要用百川提供的工具來生成蹦锋,下文講解。
AliHotFixDebug.framework
可在Debug
模式下使用欧芽,僅支持真機掃碼:
#import <AliHotFixDebug/AliHotFixDebug.h>
// currentViewController 是需要喚起掃碼功能的VC
[AliHotFixDebug showDebug:currentViewController];
編寫補丁
AliHotFix支持lua
和javascript
兩種語言編寫補丁莉掂,這里只說javascript。
可以借助在線轉(zhuǎn)換工具Patch Convertor把objective-c代碼大致轉(zhuǎn)換成javascript千扔。
但是工具無法做到100%完美轉(zhuǎn)換憎妙,所以在轉(zhuǎn)換完成后還需要人工一行一行檢查库正。
Patch Convertor不支持以下幾種OC/C的語法,需要手動轉(zhuǎn)換:
- 宏/枚舉/常量
- C函數(shù)調(diào)用
- GCD函數(shù)
- 指針/結(jié)構(gòu)體
- 私有變量的Getting/Setting
具體的編寫方法參考JSPatch
:
https://github.com/bang590/JSPatch/wiki/JSPatch-基礎(chǔ)用法
打包補丁
文件目錄
javascript補丁文件必須以main.js
命名厘唾,并且必須放在一個src
目錄下褥符。
例如:patch/src/main.js
在打包時,將會對整個patch
目錄進行打包
打包工具
打開終端抚垃,把AliHotFixCommand
拖到終端喷楣,回車直接運行,它將會列出3個功能鹤树,分別是:
1.打包铣焊,2.生成RSA公私鑰,3.輸出密鑰代碼罕伯。
功能1打包需要在2和3完成后才能使用曲伊。
功能2生成本地公私鑰,用于SDK請求下發(fā)補丁時的加解密追他,以保證所請求的補丁正確坟募。
功能3借助了2的結(jié)果來生成代碼,用于貼到項目中作為SDK啟動參數(shù)邑狸。分別是:privateKey
婿屹、publicKey
、encryptAESKey
推溃。
功能1的使用需要傳入4個參數(shù)昂利,分別是:
PATCH-DIRECTORY
:patch包所在路徑
APP-VERSION
:patch綁定的app版本
ENCRYPT-KEY
:加密patch文件的密鑰(備注:長度不超過32位字符串)
PRIVATE-P12-FILE-PASSWORD
:生成RSA密鑰時輸入的密碼
- 把
AliHotFixCommand
拖到終端,敲-pack - 把存放有
src/main.js
的patch
目錄拖到終端铁坎,敲空格 - 輸入這個patch需要修復的app版本蜂奸,然后空格
- 輸入自己定的字符串密鑰,這個密鑰在之前已經(jīng)定下了硬萍,并用于生成了RSA公私鑰扩所。然后空格
- 輸入RSA密鑰密碼,回車朴乖,等待處理完成
打包工具將會生成一個patch.zip
的文件祖屏,這就是我們需要上傳的補丁包。
上傳補丁
- 每一個App版本可以包含多個補丁买羞,并且可以隨時啟用/停用某個補丁袁勺。
- 先新增版本,再于版本內(nèi)上傳補丁畜普。上傳xxx.zip文件期丰。
- 上傳完成的補丁并不會自動發(fā)布。此時它會生成一個二維碼,使用
AliHotFixDebug
可以掃碼下載此補丁并加載钝荡,進行補丁測試街立、調(diào)試。 - 在確認補丁正確后埠通,可進行灰度發(fā)布赎离,指定最大可以下發(fā)給隨機多少臺設(shè)備;或進行全量發(fā)布端辱,不限制下發(fā)數(shù)量蟹瘾。
- 注意:無法指定下發(fā)給某臺設(shè)備,即使灰度發(fā)布也不行掠手。灰度發(fā)布模式下狸捕,哪臺設(shè)備最先請求補丁喷鸽,就下發(fā)給哪臺設(shè)備,下發(fā)數(shù)量達到指定值則停止灸拍。
附加說明
- 所修改的目標方法做祝,必須在方法調(diào)用之前已把補丁加載完畢,然后在方法調(diào)用時才會生效鸡岗。
- 補丁的下載是異步的混槐,不會阻塞當前線程。補丁的下載受網(wǎng)絡(luò)環(huán)境影響轩性。
- 加載過的補丁將會存在于App沙盒声登,App每一次啟動都會加載它,即使斷網(wǎng)揣苏。App在同步補丁時發(fā)現(xiàn)沒有更高版本的補丁時悯嗓,會繼續(xù)使用本地存放的補丁。所以在百川控制臺停用了所有補丁后卸察,App再去同步補丁脯厨,依然等同于沒有更高版本補丁,并不會刪除本地補丁坑质。