根据威锋网消息,6 月 1 日苹果向开发者发出的通知中,内附的苹果开发者协议 3.3.2 节明确规定了应用程序禁止下载或安装任何可执行代码,这次的警告像是苹果的最后通牒,苹果要求所有有关的开发者于 6 月 12 日前提交一次更新,给 10 天整改,去掉代码中的热更新功能,否则将可能受到下架的处理。
更早的警告是在 3 月份,警告内容是开发者不准在 iOS 软件中进行热更新,只不过当时没有 App 因此而下架,大多数开发们也不以为意。现在大家才发现,苹果是要动真格的了。
\"苹果禁App热更新一事
现在有关苹果禁止热更新的事在国内引发了不小的争论,特别是在开发者圈中,都不能说是一石激起千层浪了,已经是炸锅的效果了。说实话,苹果禁 App 热更新对国内的影响确实大于国外,对在线服务性质突出的 App 大于一般 App(比如一些金融理财、出行、外卖、票务类的应用,以及绝大部分国产网游),所以才引发了大家的关注。
想要读懂苹果这一政策和可能造成影响,我们还是得先弄清楚几个“是什么”和“为什么”。
热更新是怎么回事?
App 的更新有所谓“冷更新”与“热更新”两种手段。
传统情况下,我们玩网游的时候会看到运营公司的公告:亲爱的玩家blablabla,我们的游戏会在 2017 年 x 月 x 日 xx 时到 xx 时进行维护,维护期间暂时无法登陆游戏,开服时间以官方公告为准……感谢您对我们游戏的支持。
像这样更新需要游戏关闭后台,发布最新代码,刷新数据,然后再开启服务器,这就叫做“冷更新”。冷更新每次都要停服,停服多多少少会对游戏的运营造成影响,尤其是对手游 App 来说,关服开服要是做得太频繁,玩家体验就会大打折扣,手游厂商们也会受到经济损失。
再加上 App 迭代快,没办法每次都通过“冷更新”来修正 BUG,或者给游戏追加一些比较小层面的改动,以前苹果的审核效率不高,首先你要排队,排队之后要等待审核,审核好之后还要等待上架,再加上这类产品都有来自上级的压力,更新效率太慢,就有可能让自己的团队变得很被动。
\"苹果禁App热更新一事
于是程序员们想出了一个机智的办法,在 App 中加入第三方 SDK,不修改原生代码,直接通过别的汇编工具修改执行代码。这样子就不用发布一个新版本了,直接修改了 BUG,完成了更新。因为这样的更新不需要停止 App 服务,功能不受任何影响,所以称作“热更新”。
热更新方便省事之余,还为开发者节省了等待苹果审核的时间,以及可能多次审核悲剧产生的成本开销,简直就是开发者的福音。尽管现在苹果审核效率已经大大提升,但是尝过“热更新”甜头的人们,又怎么舍得弃之不用呢?
为什么苹果要禁?
“热更新”是程序员们机智的发现,但并不是非常值得提倡的做法。其实不光苹果要禁,这种不经过平台审查,绕开平台在 App 内对 App 进行数据更新的行为在其他地方也是被禁止的。
Google 去年就颁布了禁止热更新公告,只不过国内没有谷歌应用商店,所以遵守的开发者比较少。Steam 平台也不允许游戏未经 Steam 发布更新包而自行更新。
热更新首先产生的是安全问题,先不说开发者会不会乱改自己的 App,苹果更担心一些黑客可能会利用热更新修改 App,给用户带来安全隐患,这也与苹果的安全和隐私政策不符。App 在后台自己下载数据进行更新,然后跳过苹果的审核,完全有可能在上线审核时提交的是正常功能,然后通过审核后,用户安装下载后通过热更新下载到一堆病毒或者一堆吸引代码怎么办?找谁说理去?
\"苹果禁App热更新一事
其次是 App 开发汇编语言的统一性问题。由于热更新需要引入第三方的 SDK,比如 JSPatch 啊,React Native 啊,weex 啊这些,与原生的 Object-C 和 Swift 语言混编在一起,就很可能引起程序的不稳定性,在苹果自己的平台上,混编肯定在体验优化和速度上都比不上原生。这种一定程度上已经危害到苹果开发环境纯净度的混编,肯定会引起苹果的警惕跟封杀。
\"苹果禁App热更新一事
苹果和开发者冲突的根源?
在苹果,又或者说在国外,App 开发偏重于“原生”,但是在国内,App 讲究的是“迭代”——说得更直白一点,叫做打补丁。
如果大家有心的话,对比一下国内外 App(比如联网手游)的上架测试周期,上架后的更新频率,版本更迭的速度大概就能理解。拿手游比较的话,国内做的大热门《王者荣耀》(怎么又是你)和国外做的大热门《部落冲突》,前者当然是各种打开之后就下强制要求下载数据包,而 Supercell 的《部落冲突》,除了几次大版本更新,平均一年就提交常规更新 5 次左右,跟国内手游恨不得一周一更两天一更的不能比。
国内 App 开发热衷于用补丁来完善 App 功能,试想用户基数庞大的 App 和游戏,国人需求又非常大,如果不用热更新,功能和体验可能都保障不上。像滴滴、饿了么、美团这样的“大众应用”,都采用了在自己的主 App 里加入第三方 SDK 或者自己做的 SDK,转换原生语言,实现热补丁也就是热更新的目的,这已经成了国内开发默认的一项需求。
\"苹果禁App热更新一事
\"苹果禁App热更新一事
相比之下国外 App 开发并没有这么热衷于热更新,这可能也跟国外对 App 需求相对简单有关,他们的理念更偏重于:“严谨而保守地做版本迭代,完成大量的测试后再上线”。硅谷巨头们对此都兴趣淡淡,其他开发者当然也没有在这上面下太大功夫了。
身为硅谷领军者之一的苹果,不管是从平台的角度考虑,还是从开发的理念追溯,同样也是重原生的,现在禁止 iOS 热更新的要求,无形中体现的也是国外公司的观念,是国外对 App 开发和迭代的那套理解。
不管怎么说,你不可能要求平台顺应 App,只能是 App 顺应平台。国内开发者还是得照着苹果的游戏规则来。
和我们有什么关系?
首先对广大的开发者有什么影响?眼下最为紧迫的是自己的 App 会不会遭到下架,根据开发者反馈,目前苹果发出的警告涵盖范围比较广,不管是用热更新修改一下 BUG(并没有改变应用功能)还是使用了别的热更新库,都收到警告。
很多国产手游(经常开启就自动下补丁的)、很多国内服务型应用(前面说的滴滴啊、还有12306啊之类)可能都在警告范围内。
还有一些版本比较旧的老游戏和老应用,因为存在版本问题或者版号问题不能通过平台更新,只能用热更新来跟上用户需求的,这类也面临着下架的危险。
这么说对 iOS 的生态环境后一个好处,那就是往后 iOS 开发者们不得不在项目上线前对 App 做足够的测试和修改,以保证上线后能有一个完善的版本,改变以前补丁打来打去的习惯,把重点放在如何提高自己或者自己团队的研发能力上,减少重大发布版本的 bug 出现,而不是寄希望搞于小动作。
至于等待审核的时间,WWDC 上苹果已经承诺进一步加快审核速度,可以压缩在 2 小时内完成审核,如果保证这个效率的话对 App 更新的影响就不算大了。这也是在倒逼苹果自己必须加强审核效率,不想令开发者们失望。
\"苹果禁App热更新一事
对普通用户,事实上禁止热更新是应该受到支持的,严格审核,保证安全,重视版本稳定性,足够完善再上架等等,苹果的要求也很大地代表着用户的利益。毕竟你要是发现某个 App 打着上架的旗号实际是在内测,一边要你付钱一边像补破墙一样的改 bug,你作为消费者心里也很不爽对不对。更不要说安全和隐私的重要性了。
想要我们使用的 iOS 系统干净、整洁、没有流氓软件,就离不开审核,这是很清楚的。一旦任何问题和安全性起冲突,那么别的都可以暂时放在一边。这件事情看起来好像很严重,但仔细剖析一顿,明白前因后果本质内在之后也没有那么难接受了。