掘金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必定要加密,下面是方法截图和文档:
加密方法: