一說到熱修復,可能不少人會以爲應該很複雜,很難用(我之前是這麼以爲的。。。),實際使用起來蠻簡單的,這裏以一個小demo演示熱修復是如何修復崩潰的,具體更深刻的用法,能夠看這個
https://github.com/bang590/JSPatch/wiki/JSPatch-%E5%9F%BA%E7%A1%80%E7%94%A8%E6%B3%95git
實現原理:https://github.com/bang590/JSPatch/wiki/JSPatch-實現原理詳解github
打開JSPatch網站,下載SDK:http://jspatch.com/Index/sdk併發
新建一個項目,名爲JSPatchDemo,將下載後的JavaScriptCore.framework文件拖到項目中,並導入libz.dylib(或libz.tbd) 和 JavaScriptCore.frameworkapp
在AppDelegate裏配置,startWithAppKey須要配上本身的Key,在第三步會詳細介紹。jsp
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [JSPatch startWithAppKey:@"你的APPKey"]; //用來檢測回調的狀態,是更新或者是執行腳本之類的,相關信息,會打印在你的控制檯 [JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error) { }]; [JSPatch setupDevelopment]; [JSPatch sync]; return YES; }
在ViewController裏寫上一個方法爲jsPatchTest,用於改變文本的文字。ide
#import "ViewController.h" @interface ViewController () @property (nonatomic, strong) UILabel *label; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _label = [[UILabel alloc] init]; _label.font = [UIFont systemFontOfSize:14]; _label.frame = CGRectMake(50, 100, 150, 50); _label.backgroundColor = [UIColor yellowColor]; [self.view addSubview:_label]; [self jsPatchTest]; } - (void)jsPatchTest { self.label.text = @"哈哈哈哈哈哈"; } @end
打開JSPatch官網點擊左上角註冊 -> http://www.jspatch.com/工具
點新增APP,隨便填寫APP名,如:網站
將AppKey填寫到AppDelegate--StartWithAppKey中atom
點擊添加版本,填寫和工程目錄的一致,如1.0加密
建立一個main.js文件並在裏面寫上如下代碼
defineClass('ViewController', { jsPatchTest : function() { self.label().setText("label的text被改掉了"); }, })
發佈補丁
再次從新打開app,你會發現,會報http的錯。。。在info.plist里加上以下代碼,容許http訪問
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
整體使用仍是比較簡單的,更多功能能夠去文檔中發掘
一、可能不少人都不會寫js補丁,好在JSPatch做者還爲咱們準備了另外一個工具。
http://bang590.github.io/JSPatchConvertor/
這個工具能夠幫助咱們轉換OC代碼爲JS
二、JS必定要加密,下面是方法截圖和文檔: