今天,全球不少开发者纷纷收到了发自苹果的警告邮件,提示开发者的APP因违反苹果审核规则将被appstore拒绝审核通过。

在事件发生后,github,苹果开发者社区上大量开发者加入了该问题的讨论。有开发者反馈自己的app已在appstore搜索不到、但未下架。不过也有某开发者反应,自己使用了JSPatch的两个APP今天上架了appstore但未受到警告邮件。

根据开发者讨论的结果,主要问题出在苹果审核规则中禁止下载可执行代码,这变相的意思就是禁止app热更新,而据开发者的猜测,苹果应该是采取了批量扫描runtime并给所有涉嫌违规的app的开发者群发了邮件,虽然不是所有开发者收到了该邮件,但涉及该问题的开发者数量依旧非常庞大。

一直以来,脚本热更新广泛被中国地区iOS开发者采用,主要原因是苹果app提交审核等待时间过长,并不利于游戏、APP快速更新迭代,假若此次热更新被苹果全面禁止,这将极大的影响中国地区iOS开发者。

苹果开发者条款下:

3.3.2 Except as set forth in the next paragraph, and Application may not download or install executable code. Interpreted code may only be used in an Application if all scripts, code and interpreters are packaged in the Application and not downloaded.

按照规定:

  1. 在应用/游戏里面使用Lua或JavaScript脚本是OK的,这个没问题。
  2. 但使用脚本进行热更新,这是违反苹果开发者条款的。

有开发者指出可能还有一个重要原因是苹果要针对微软VS2017:

昨天晚上微软发布了Visual Studio 2017,自带基于React Native的iOS开发功能,鉴于微软这两年来开源的力度,发布这一功能似乎是在抢占开发者市场。结果就是有了VS2017,在非苹果上开发iOS应用更容易了。所以,苹果在这个节骨眼发出这样的警告邮件,其实暗地里就是要和微软互怼。

对此次事件,cocos2d-x引擎创始人王哲表示:“此前,国内大家这么用热更,其实都是为了提高用户体验,没人乱来,这个苹果利益诉求一致,所以苹果也就睁只眼闭只眼了。而今天的主要问题是APP涉及到动态加载脚本运行,因为苹果不希望你审核通过的是应用A,然后动态热更新以下变成功能完全不同的应用B。初步来看,可能是苹果针对rollout,jspatch这些热更新框架。”

在该问题的讨论区中,有开发者总结认为,使用了 rollout,react native,weex,JSPatch,bugtags,个推 ,bugly with hotfix库的APP会被苹果审核盯上。

而解决办法方面,有开发者建议:“如果是类JSPatch这种只用来热更新的,暂时去掉这些热更新的库吧,或者观望阵子再上架新包。如果是类React Native,抓紧转行吧。”