-
什么是冷更新
开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。测试成功后,用户即可在AppStore看到应用的更新信息,用户点击应用更新后,需要先关闭应用,再进行更新。
-
什么是热更新
广义:无需关闭应用,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码。狭义定义( iOS热更新):无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载app而自动更新程序。可以在不重新下载客户端的前提下,更新游戏内容
现状:苹果禁止了C#的部分反射操作,禁止JIT(即时编译,程序运行时创建并运行新代码),不允许逻辑热更新,只允许使用AssetBundle进行资源热更新。
可以通过AssetBundle,Lua进行热更新,其中AssetBundle是Unity提供的一种资源更新技术,就是通过AssetBundle更新资源,也可以通过把脚本或者其他代码当成资源打成AssetBundle然后更新到客户端。
注意:2017年,苹果更新了热更新政策说明,上线后的项目,一旦发现使用热更新,一样会以下架处理
-
为何要热更新
缩短用户获取新版应用的客户端的流程,改善用户体验具体到iOS平台的应用上,有以下几个原因
- AppStore的审核周期难控制
- 手机应用更新频繁 3.对于大型应用,更新成本太大 终极目标:不重新下载、不停机状态下完全变换一个应用的内容
-
每个平台如何做热更新
Android,PC(C#):
- 将执行代码预编译为AssemblyDLL
- 将代码作为TextAsset打包进AssetBundle
- 运行时调用AssemblyDLL代码
- 更新相应的AssetBundle即可实现热更新
iOS(Lua): 苹果官方禁止iOS下的程序热更新;JIT在iOS下无效
热更新方案:Unity + Lua插件
常见的Unity热更新插件
- sLua:最快的Lua插件
- toLua:由uLua发展而来的,第三代Lua热更新方案
- xLua:特性最先进的Lua插件
- ILRuntime:纯C#实现的热更新插件