第七章 一份来自苹果的警告/(ㄒoㄒ)/~~ &&
相信,你在看到这篇文章的时候应该也已经注意到了苹果公司发给各位开发者的邮件了。。。
苹果公司禁止了热更新和JSpatch,导致很多人的项目上线和更新被拒,目前还没有解决方案,也要等着业界大佬们尽快出方案;
Jspatch是什么呢。。这种技术只需在项目中引入极小的引擎,就可以使用JavaScript调用任何原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug。应用场景多是线上出现严重的bug或者crash率过高时,引入JSPatch,下发一个JS脚本的补丁,来替换掉原生的方法。
Jspatch的原理是因为Objective-C是动态语言,OC上所有方法的调用/类的生成都通过 Objective-C Runtime 在运行时进行,我们可以通过类名/方法名反射得到相应的类和方法(包括私有方法)。通过Objective-C Runtime的接口,从JS传递要调用的类名函数名到Objective-C,再使用NSInvocation动态调用对应的OC方法。
JSPatch让脚本语言获得调用所有原生OC方法的能力,所以实际上它也可以用来做热更新的工作,为App动态的添加功能模块。同样可以起到React Native的热更新作用。只不过二者有所区别,RN的框架大,有自己的开发平台,所以学习的成本会相对高些,但开发起来的效率要高很多,前提是JS组件要全。。。。。而JSpatch接入成本非常的小,对于熟悉OC的客户端开发者来说,只需要学习简单的JS语法即可熟练使用,但并没有开发平台,所以开发效率会相对较低,而且,JSpatch不是跨平台的。只从更新能力上来看的话,明显JSpatch要牛逼很多。
(二者更详细的区别可以参看:http://geek.csdn.net/news/detail/95458 )
高能力但同样也存在着风险:
(一).若在网络传输过程中下发明文JS,可能会被中间人篡改JS脚本,执行任意OC方法,盗取APP里的相关信息。可以对传输过程进行加密,或用直接使用https解决。
(二) 若下载完后的JS保存在本地没有加密,在未越狱的机器上用户也可以手动替换或篡改脚本。这点危害没有第一点大,因为操作者是手机拥有者,不存在APP内相关信息被盗用的风险。
总之苹果公司考虑到安全问题,禁止了这种实现热更新的方案……
禁止中强调的是通过远程脚本更新应用程序的行为不符合苹果开发者许可协议。。所以JSpatch和之前PhoneGap中提到的Cordova、也包括RN的热更新应该都涵盖在其中,只是应用了JSpatch的app率先收到了警告的邮件罢了~
也许有一天,在热更新大神提供了一套完整的安全性解决策略之后,苹果会做出适当的妥协吧~
附上两张看到的比较有意思的图!!
结束语:
好了,大体入门的内容已经介绍清楚了,相信我们已经对React Native的开发有了初步的了解,接下来需要做的,我感觉有两个方向:
①去学习前端的React框架和ES6语法等前端知识,补充基础,
②抓一个React Native实际项目,强行上手,用到的不会的再查,时间长了自然就通了。
第二条走着~~