掘金3.5.2上線後發現了一個bug,我司iOS小哥上線前不當心改動了一部分代碼,致使髒數據被緩存,取緩存的時候會致使項目崩潰...(蘋果的審覈愈來愈不認真了....好吧,我不推鍋了,讓我跪着寫完這篇博客)..javascript
在iOS中有不少種熱修復方案,在這裏我就不一一介紹了java
這裏有一篇掘金裏介紹熱修復的文章: iOS中的HotFix方案總結詳解git
我選擇的熱修復方案是JSPatch 我以爲JSPatch的優勢有:github
大神能夠看重點,若是是和我同樣的菜雞就能夠按照博客一步一步作,最後必定會成功讓JSPatch跑起來的swift
OC:緩存
Swift:服務器
爲了方便label就直接在StoryBoard裏拖進來了(不喜歡拖控件的小夥伴能夠用代碼建立)app
Swift中爲每一個變量和方法添加dynamic是保證Swift方法均可以被動態替換,這裏涉及到Swift Runtime的知識就不詳細講述了按例貼一篇文章:jsp
Swift Runtime分析:還像OC Runtime同樣嗎?ide
OC
- (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;
}複製代碼
Swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
JSPatch.startWithAppKey("你的Appkey")
JSPatch.setupCallback { (type, data, error) in
print(type)
print(data)
}
JSPatch.setupDevelopment()
JSPatch.sync()
return true
}複製代碼
OC
defineClass('ViewController', {
test : function() {
self.label().setText("label的text被改掉了");
},
})複製代碼
Swift
defineClass('HotFixDemo.ViewController', {
test : function() {
self.label().setText("label的text被改掉了");
},
})複製代碼
發現bug->在項目裏修復bug->將修改後的有問題的類和方法翻譯成js並上傳網站->發佈補丁
這一次的Bug實在是對不起各位用戶老爺,讓我跪着等到加急審覈完畢,並利用此次學會的熱修復技術來保證之後都不會讓各位老爺遇到今天狀況了...
JS必定要加密,下面是方法截圖和文檔:
加密方法: