• 什么是冷更新

    开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。测试成功后,用户即可在AppStore看到应用的更新信息,用户点击应用更新后,需要先关闭应用,再进行更新。

  • 什么是热更新

    广义:无需关闭应用,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码。狭义定义( iOS热更新):无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载app而自动更新程序。可以在不重新下载客户端的前提下,更新游戏内容

    现状:苹果禁止了C#的部分反射操作,禁止JIT(即时编译,程序运行时创建并运行新代码),不允许逻辑热更新,只允许使用AssetBundle进行资源热更新。

    可以通过AssetBundle,Lua进行热更新,其中AssetBundle是Unity提供的一种资源更新技术,就是通过AssetBundle更新资源,也可以通过把脚本或者其他代码当成资源打成AssetBundle然后更新到客户端。

注意:2017年,苹果更新了热更新政策说明,上线后的项目,一旦发现使用热更新,一样会以下架处理

  • 为何要热更新

    缩短用户获取新版应用的客户端的流程,改善用户体验具体到iOS平台的应用上,有以下几个原因

    1. AppStore的审核周期难控制
    2. 手机应用更新频繁 3.对于大型应用,更新成本太大 终极目标:不重新下载、不停机状态下完全变换一个应用的内容
  • 每个平台如何做热更新

    Android,PC(C#):

    1. 将执行代码预编译为AssemblyDLL
    2. 将代码作为TextAsset打包进AssetBundle
    3. 运行时调用AssemblyDLL代码
    4. 更新相应的AssetBundle即可实现热更新

    iOS(Lua): 苹果官方禁止iOS下的程序热更新;JIT在iOS下无效

    热更新方案:Unity + Lua插件

alt

常见的Unity热更新插件

  • sLua:最快的Lua插件
  • toLua:由uLua发展而来的,第三代Lua热更新方案
  • xLua:特性最先进的Lua插件
  • ILRuntime:纯C#实现的热更新插件

alt