今天早上一上班,就收到了苹果发来的一封警告邮件,一看内容,就知道这是个大事啊,还赶紧发了个微博,然后,今天一整天,iOS 界都被这个消息炸裂了!
这封警告邮件大概意思就是说,苹果将不再允许使用动态下发代码的机制,如果 App 内部使用了动态下发代码的框架,将有被拒的风险。
所谓的动态下发代码,就是我们常说的热修复、热更新,就是在我们无需发布的版本的情况下,就可以修复 bug ,发布功能,因为 iOS 审核的机制,这项能力在 iOS 界非常重要。
在 iOS 界拥有动态下发能力的有以下几个框架:JSPatch、Rollout、React Native、Weex。
其中 JSPatch 跟 Rollout 是专门的热更新框架,JSPatch 国内应用使用很广泛,包括我们家的也是,Rollout 则是国外使用的较多,是这次针对的主要对象,之前苹果针对这种热更新是睁只眼闭只眼,而这次则是下定了决心要整改,毕竟绕过了苹果爸爸的审核机制,如果以后不加管理,岂不逃出了爸爸的法眼。
这个倒还好,大不了不用热更新罢了,但是一些 App 中使用 React Native 和 Weex 的开发者,同样有人收到了苹果的警告邮件,这可就炸开了锅,要知道 RN、Weex 这种是大厂推出的跨平台框架,这要是被封杀了,一些大厂的 App 要重写就夸张了,这可是致命的打击。
但是在还没确定结论的情况下,之前学很长时间 RN 的同学简直要懵逼了,还有一些没学的同学甚至幸灾乐祸,暗自庆幸,幸亏没学啊,甚至有谣言传有公司把整个 RN 部门都砍了,真是有点看不下去了,所以我觉得应该弄清楚原因,写篇文章。
了解到,这次事情的主要起因在 App Store Review Guide Line 的 2.5.2 这条:
2.5.2 Apps should be self-contained in their bundles, and may not read or write data outside the designated container area, nor may they download, install, or execute code, including other iOS, watchOS, macOS, or tvOS apps.
这是在 16 年 WWDC 之后新更新的一条规则。什么意思呢?意思是说,所有被执行的代码都应该包含在 App 里,不能下载代码到本地执行。下发的无论是 OC 还是 JS 或者其他形式的代码,都可以被认为违反了这条规则,都有被拒的风险。
看到这里,我大概就明白了,苹果本次主要是针对下发代码,而 React Native、Weex 这类框架刚好也具备了下发代码的能力,但是他们的主要职责不是为了解决热更新而存在的,而是一种跨平台的解决方案,所以,虽然苹果官方没说明,但是我认为,只是刚好在这个风口浪尖,躺枪了而已。
所以,有些人听风就是雨,不要这么着急下结论,RN、Weex 这种跨平台解决方案虽然现在还不成熟,使用范围也没那么广,我个人也不推荐现在在商业项目使用,但是暂时不用担心会被苹果封杀,如果真的被苹果封杀了,那么微信小程序就不会同意审核过了,因为本质上微信小程序也是类似 RN 的一套方案,请大家具备点基本的思考能力。
而且 React Native 官方也做了回应,说不会受影响,地址在这里:
https://github.com/facebook/react-native/issues/12778
看似苹果的事跟 Android 开发者无关,但是如果苹果封杀了 React Native,那么 Android 界也会受影响,毕竟采用 RN 主要是为了跨平台,苹果都不支持了,谁还会用 RN 来开发 Android 啊,故此,写篇文章给大家说明下。
顺便说下,针对这次苹果事件的解决方案,你们家的 iOS App 很可能会用到:
- 国内 App 如果有在使用 JSPatch 的,那么请移除,目前没有其他更好的方案;
- 更新或者移除一些第三方使用 JSPatch 的 SDK,目前已知的有高德地图、BugTags、个推、Bugly。
另外,说个题外话,这次事件一出,JSPatch GitHub 官方库的 Issues 有人寻求证实与解决方案,谁知道引来一群吃瓜群众围观、盖楼,那场景相当壮观,只能说中国人把 GitHub 玩坏了,GitHub 本是一个讨论技术的开源社区,把这种不良的风气带到 GitHub 上真的看不下去,在这里呼吁大家,以后不要在 GitHub 干这种事!
地址在这里:
https://github.com/bang590/JSPatch/issues/751
最后,这事一出,很多 iOS 开发者开骂苹果爸爸太霸道,其实我想说,知足吧,身在福中不知福,如果我谷爹能偶尔霸道一回,Android 开发者们估计要高兴疯了!
公众号 AndroidDeveloper