對于蘋果的app來說话侧,雖然在提交審核上線前會經(jīng)過嚴格的測試馆蠕,但是還是要保證有重大bug的情況下能夠及時進行熱修復(fù)涝桅,把損失降到最低闷游。
JSPatch gitHub鏈接地址峻汉,里面有詳細使用說明。
在主控制器中添加一個按鈕脐往,實現(xiàn)點擊方法:
- (IBAction)crashAction:(id)sender {
NSArray *array = @[@1,@2];
NSNumber *number = [array objectAtIndex:4];
NSLog(@"%@",number);
}
很明顯休吠,點擊就一定會閃退,這個就是模擬app中可能 出現(xiàn)的各種嚴重問題业簿。我們要做的就是通過JSPatch框架瘤礁,及時修復(fù)線上嚴重bug。
導(dǎo)入頭文件
#import <JSPatch/JPEngine.h>
在app啟動時調(diào)用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//測試熱修復(fù)
[self testJSPatchHotFix];
return YES;
}
- (void)testJSPatchHotFix
{
//啟動引擎
[JPEngine startEngine];
//彈框測試
[JPEngine evaluateScript:@"\
var alertView = require('UIAlertView').alloc().init();\
alertView.setTitle('Alert');\
alertView.setMessage('AlertView from js'); \
alertView.addButtonWithTitle('OK');\
alertView.show(); \
"];
//重寫閃退的方法
[JPEngine evaluateScript:@"defineClass('ViewController',{\
crashAction: function(crashButton){\
var redColor = require('UIColor').redColor();\
crashButton.setBackgroundColor(redColor);\
}\
},{})"];
}
重新運行app梅尤,會發(fā)現(xiàn)可以彈出新增的alert框柜思,并且點擊button閃退現(xiàn)象消失,完美解決了問題巷燥。當(dāng)然對于線上bug一般需要后端給.js文件下載地址赡盘,這里只是為了測試寫了本地的js文件。
實際應(yīng)用中可以這樣從后臺拿.js文件
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://cnbang.net/test.js"]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[JPEngine evaluateScript:script];
}];