最近,在调研热修复技术,也称作热更新技术。由于苹果审核周期有时候比较长,这是公司无法忍受的,所以热修复技术应运而生。经过查阅多方面的资料,进行如下总结,希望对大家有所帮助。
现在比较流行的热修复技术:
一、使用JSPatch进行热修复。
JSPatch能做到通过JS调用和改写OC方法。最根本的原因是 Objective-C 是动态语言,OC上所有方法的调用/类的生成都通过 Objective-C Runtime 在运行时进行,我们可以通过类名和方法名反射得到相应的类和方法,也可以替换某个类的方法为新的实现,还可以新注册一个类,为类添加方法。JSPatch 的原理就是:JS传递字符串给OC,OC通过 Runtime 接口调用和替换OC方法。
看了一下JSPatch的源码,主要就是通过OC的runtime原理,使用JS语句实现动态更改OC源码的目的,类似C++中的多态性。
JSPathch是一个开源项目,在github上,下载地址:JSPatch下载地址。里边有相关文档,简单易懂。另外。这里有一篇JSPatch作者写的实现原理,解释的还是蛮不错的,博客地址:JSPatch实现原理。
同时在这里给大家一个比较好的网站 ,OC转JS工具,这是一个OC转JS的一个工具网站。
具体实现参考博客:http://www.jianshu.com/p/8cec322531ae
二、使用ReactNative实现热修复。
ReactNative是facebook提供的一种开源框架,使用JS语法进行跨平台开发,深受开发者青睐。直接使用ReactNative实现热修复的好像不是很多,比较流行的是使用微软的CodePush。
这个是CodePush 的官方网站地址,这个是CodePushGitHut地址。
具体实现参考博客:http://blog.csdn.net/u011151353/article/details/50688681
三、使用Lua+Wax打补丁的方案实现热修复。
使用Lua+Wax打补丁的方案,App需要集成Lua解释器和Wax框架(接近1M)。不过waxPatch对Block不太完善,多线程补丁也可能有问题,Wax也已经两年没人维护了,而且Lua调试起来也不方便。
原文链接:http://blog.csdn.net/u013602835/article/details/52777852