苹果向热更新下达最后通牒,是什么导致了这次事件?
苹果用一封邮件对“热更新”下达了最后的通牒,也让 iOS 开发者们度过了坐立不安的一天。
“热更新”也就是动态下发代码,它可以使开发者在不发布版本的情况下,修复 BUG 和发布功能。这让开发者绕开了苹果的审核机制,避免长时间的审核等待以及多次被拒造成的成本开销。
但现在,苹果正在对“热更新”实行更严厉的审查。昨天,不少开发者收到了来自苹果的邮件。苹果在邮件中表示,将不再允许使用动态下发代码的机制。苹果要求被警告的开发者在下个版本中去除能动态改变应用行为和目标的功能,否则会被拒甚至下架。
(苹果向开发者发出的邮件)
看到这里,技术小白们几乎快要绝望了,到底发生了什么?触控副总裁、Cocos 引擎创始人王哲用一句话来描述这件事情:苹果审核对热更新开刀,国内外厂商中招。
是什么导致了警告?
最开始,王哲在 Cocos 引擎官方微信公众号上提到的原因是 “苹果怒怼微软”:
昨天晚上微软发布 Visual Studio 2017,自带基于 React Native 的 iOS 开发功能,鉴于微软这两年来开源的力量,发布这一功能似乎是在抢占开发者市场。结果就是有了 VS2017,在非苹果上开发 iOS 应用更容易了。所以,苹果在这个节骨眼发出这样的警告邮件,其实暗地里就是要和微软互怼。
不过后来王哲也表示,这只不过是一个调侃。大多数开发者也认为一天内的反应动作也太快了,不可能。
而这个事件背后真正的原因,大部分开发者认为是项目中使用了 JSPatch,Weex,Rollout.io 及其 ReactNative 等平台的热更新技术。随着事情的发展,开发者们发现苹果主要的针对的是 JSPatch,Rollout.io 两家,原因是 ReactNative,Weex 主要的功能是为开发者跨平台的解决方案,热更新只是其附带功能。
目前有开发者汇总了受到影响的第三方 SDK,开发框架,其中包括高德地图,BugTags,个推,Bugly,友盟等。
随着事情的发酵,ReactNative,Rollout.io 也对这件事情发出了官方的声音。
Rollout.io 的首席执行官 Erez Rusovsky 表示,正在与苹果联系,以便进一步查清为什么 Roluput 不属于允许开发人员将 JS 推送到实际应用程序的条款。
ReactNative 公司的软件工程师 Bruno Lemos 也在 Github 网站上表示:ReactNative 与这个问题无关。
(ReactNative 公司的软件工程师 Bruno Lemos的回复 )
这件事情在开发人员中引起巨大的关注,是因为这关乎到苹果对于“热更新”这一功能的态度。这次禁止的是代码动态下发,也可以认为是苹果禁止热更新功能,但是部分平台如 React Native 的热更新功能并没有被禁止。因此还有不少开发者困惑,到底什么是“可以”。
但事实上,在苹果开发者条款中早就明确,使用脚本进行热更新,是违反规定的。
(苹果开发者条款)
在王哲看来,苹果过去对这件事的态度是睁一只眼闭一只眼,热更新也早已成为开发者们青睐的一门技术。王哲介绍到国内绝大多数 iOS 手游,不论是 Cocos 还是Unity,都在用热更新功能,腾讯和网易也在使用脚本对游戏进行小版本热更新。
“如果只是为了提高用户体验,这点和苹果的利益出发点是高度一致的。”
王哲认为这是苹果之前没有对热更新痛下杀手的原因。
然而确实也有不少开发者利用这个功能,做一些触犯苹果底线的事情。王哲举例说道:
“热更新可以用来做任何事情,比如一个好好的应用,可以瞬间更新成一个色情小说的 App,这样就绕开了苹果的审核。”
眼下,开发者们还在观察苹果的下一步动态,但不论如何大部分开发者认为“跟着规则走”是他们唯一的选择。ID 为 stormzhang 的业内人士在他的微信公众号AndroidDeveloper 上提了两点建议:
国内 App 如果有在使用 JSPatch 的,那么请移除;
更新或者移除一些第三方使用 JSPatch 的 SDK。
王哲认为事件的核心在于:
“ 别干坏事,如果大家只是为了提高用户体验,提高运营效率,不作恶,就没什么原则上的问题了,剩下的只是技术上的小修复而已。”