一盼砍、目標(biāo)
- 無需改動(dòng)項(xiàng)目工程代碼情況下示辈,應(yīng)急處理線上項(xiàng)目出現(xiàn)bug/崩潰吓歇。
- 官方地址:https://help.aliyun.com/product/65109.html
二魄幕、操作步驟
準(zhǔn)備工作
- 聯(lián)系阿里客服躏救,獲取阿里官方定制的移動(dòng)熱修復(fù)(.framework)文件,通知添加熱修復(fù)白名單肌访。
- 登錄阿里EMAS —> 選擇《移動(dòng)研發(fā)平臺(tái)EMAS產(chǎn)品使用調(diào)研》—> 創(chuàng)建工作空間 —> 創(chuàng)建應(yīng)用 —> 按指引配置plist文件
- 替換項(xiàng)目中出現(xiàn)bug/崩潰方法的文件找默,文件格式[.lua]
項(xiàng)目接入及使用
- 庫添加
# 熱修復(fù)
pod 'AlicloudLua'
pod 'AlicloudBeacon'
pod 'AlicloudUtils'
pod 'ZipArchive', '~> 1.4.0'
pod 'AlicloudHotFixDebug', '~> 1.0.1' # 本地調(diào)試
- 初始化
#import "AppDelegate.h"
// 熱更新
#import <AlicloudHotFix/AlicloudHotFix.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
ViewController *vc = [[ViewController alloc] init];
_navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[_window setRootViewController:_navigationController];
[_window setBackgroundColor:[UIColor whiteColor]];
[_window makeKeyAndVisible];
// 熱修復(fù)
[self hotfixSdkInit];
return YES;
}
// 熱修復(fù)
- (void)hotfixSdkInit {
AlicloudHotFixService *hotfixService = [AlicloudHotFixService sharedInstance];
// 打開Log
[hotfixService setLogEnabled:YES];
// 手動(dòng)設(shè)置App版本號(hào)
[hotfixService setAppVersion:@"1.0"];
[hotfixService initWithAppId:appId appSecret:appSecret rsaPrivateKey:appRsaPrivateKey callback:^(BOOL res, id data, NSError *error) {
if (res) {
NSLog(@"HotFix SDK init success.");
} else {
NSLog(@"HotFix SDK init failed, error: %@", error);
}
}];
}
示例:本地校驗(yàn)測試
- 工程目錄下創(chuàng)建"EMASCrash.lua"文件,示例代碼
interface{"EMASCrashVC"}
function aClick(self)
local arrary = {"1","2"}
local str = arrary[1]
print(str)
self:view():setBackgroundColor(UIColor:redColorr())
end
對應(yīng)項(xiàng)目中崩潰的方法:
//
// EMASCrashVC.m
// crash
- (void)aClick{
NSArray *array = @[];
NSString *str = array[1];
NSLog(@"%@",str);
}
- 調(diào)用修復(fù)文件
NSString *patch = [[NSBundle mainBundle] pathForResource:@"EMASCrash" ofType:@"lua"];
[AlicloudHotFixDebugService loadLocalPachFile:patch];
結(jié)果:項(xiàng)目中崩潰的方法(- (void)aClick)不再崩潰吼驶,打印值:1惩激,背景變成紅色。
示例:線上使用
- 新建文件夾(名:patch)蟹演,
- 將創(chuàng)建的"EMASCrash.lua"文件(文件代碼同上)放入“patch”文件夾中风钻。
- 壓縮“patch”文件夾 —> patch.zip
- 進(jìn)入控制臺(tái):移動(dòng)研發(fā)平臺(tái)EMAS / 移動(dòng)熱修復(fù) / 補(bǔ)丁管理 / 添加版本 / 上傳補(bǔ)丁(即:上傳patch.zip文件)
注意:如果上傳失敗酒请,問下客服白名單是否通過骡技。
- 修復(fù)方法調(diào)用
[[AlicloudHotFixService sharedInstance] loadPatch:^(BOOL res, id data, NSError *error) {
if (res) {
NSLog(@"Load patch success.");
} else {
NSLog(@"Load patch failed, error: %@", error);
}
}];
結(jié)果返回:Load patch success. 即完成修復(fù)
注:使用過程中出現(xiàn)個(gè)問題,“線上場景”使用模擬器運(yùn)行無法熱修復(fù)成功羞反,須使用真機(jī)運(yùn)行布朦;本地?zé)嵝迯?fù)使用真機(jī)/模擬器均可。
以下是效果演示
熱修復(fù).gif
三苟弛、遇坑總結(jié)
- 上傳patch.zip文件失敗喝滞,應(yīng)該是加入白名單還未通過所致。
- 線上場景熱修復(fù)(使用模擬器運(yùn)行)失敗膏秫,使用真機(jī)運(yùn)行熱修復(fù)成功。此問題已反饋給官方技術(shù)支持做盅,證實(shí)確有這個(gè)問題缤削。