苹果为什么要全面禁止热更新(2)
苹果是不是完全禁止了热更新技术
并不是,目前为止收到警告邮件的开发者绝大部分使用了 JS-Patch 或 Rollout 类库,剩下未直接使用这些类库的开发者,目前初步估计很可能是在集成的第三方 SDK 中使用了上述框架。而未采用上述框架的热更新技术,目前为止并未收到影响。而绝大部分游戏引擎由于并没有调用这些类库,也自然没有受到影响。
当然,后续事态会不会进一步扩大,还需要看苹果接下来的策略。但是笔者认为,游戏中的热更新技术并不会受到苹果的禁止,作为一名技术人员,我们不讨论产品、商业等问题,只从技术角度来看,为什么 JSPatch 苹果认为是不允许的,而游戏引擎的热更新技术,苹果目前认为是可以的。
苹果为什么要禁止 JSPatch 等热更新技术
JSPatch 的原理是,开发者编写 JavaScript 代码,利用苹果内置的 JavaScriptCore.Framework 执行,以实现热更新功能。这一点看似也符合标准,但是在技术上,存在着重大安全隐患,参考 JSPatch 的业务逻辑:
简单理解,JSPatch 可以理解为所有的 Objective-C 的 API 进行了映射,允许开发者在 JS 端调用任意原生代码,这显然是极其危险的。假设这段代码是通过热更新技术下载执行的,如果在中间存在黑客,把这段代码动态替换掉,比如修改为获取用户通讯录并上传到黑客的服务器,就会造成重大的安全问题。
为什么游戏热更新技术可以被理解为是安全的
与 JSPatch 不同的是,游戏热更新技术主要的实现方式是把动态脚本下载之后,让动态脚本调用游戏引擎提供的接口实现缺陷修复。与 JSPatch 不同的是,动态脚本并不能任意调用全部原生代码,而是只能根据游戏引擎提供的接口调用相关功能。在这个过程中,游戏引擎的原生端作为一个安全沙箱,提供了一个安全的保护层,只要游戏引擎不要对外提供获取通讯录的接口,黑客就无法通过替换动态脚本的方式获取用户的隐私资料。进而可以被认为是安全的,自然不在苹果的禁止范围内。
小结
苹果认为热更新技术容易被黑客利用,造成重大安全问题。在官方警告邮件中,也是在进行如此描述。
JSPatch 这种基于反射,允许获取全部系统接口的方式,确实存在着一定的安全风险。虽然可以通过安全策略去防范,但是苹果决定一刀切,严格禁止。
游戏引擎由于不是利用反射机制实现的热更新,不能获取全部系统接口,所以目前苹果认为是安全的,无需警告。
未来,苹果还要在中国市场掀起多大的风浪,我们无从得知。不过可以预料的是,在6月12日前后,App Store 的 App 下架数量很可能会出现一次高峰。App Store的很多APP将消失在我们眼前。这里还是要提醒大家,关注自家 iTC 后台有没有收到相关通知(很多同学的账号可不止一两个),如果收到就要尽快对产品进行调整了,删除相关代码并提交更新。
看过苹果为什么要全面禁止热更新的人还看了: