iOS混合开发库(GICXMLLayout)8、热更新

GIC在UI上支持直接以XML来写,而业务逻辑支持使用JavaScript来写,所以具有了应用热更新的能力。服务器

本篇将会重点介绍如何使用GIC来实现应用的热更新。app

若是你不想看下面内容,也能够直接使用脚手架来建立一个具备HotUpdate功能的工程模板。你能够按照脚手架的提示直接运行这个模板来查看hotUpdate的功能,以下图 post

如何建立请移步到 这个地址

HotUpdate流程

这里介绍的是一种全量更新的方法,也就是说每次更新都会将整个project总体打包更新。也许你可能会担忧总体更新的话包体积太大,这里其实你大能够放心,咱们公司如今三个APP都采用这样的方式,打包之后其实也就几十KB~几百KB,包括图片在内。若是包实在太大,那我相信这时候整个APP已经很复杂庞大了,这时候你可能须要使用另一种方式来实现了,好比把不一样的模块独立打包。设计

HotUpdate的实现是须要服务端客户端一块儿配合实现的,服务端提供更新接口以及包下载服务器,客户端则根据服务端返回的更新数据,从服务器下载新包。下面分别介绍两端的实现流程。code

服务端

更新接口须要两个参数。cdn

  1. appVersion:用来表示客户端版本号
  2. pakageVersion:客户端当前使用的包的版本号

根据这个两个参数,服务端须要一张数据表来保存各个版本的信息。表设计以下blog

packageVersion needAppVersion packageUrl md5 updateDate
包版本号 可以运行该包须要的最低app版本号 包的下载地址 包的md5校检码 更新日期

更新逻辑以下:排序

  1. 使用appVersion 跟 needAppVersion 比较,获取needAppVersion <= appVersion 的全部记录,而且按照packageVersion 从高到底排序。
  2. 使用pakageVersion 跟第一步筛选出的第一条数据的packageVersion比较,若是是小于的,那么返回第一步的第一条数据,若是是>=的,那么就说明没有能够更新的包。

客户端

app启动的时候,从服务端请求更新接口,若是服务端返回了更新数据,那么说明有新的包能够更新。接口

这时候客户端根据拿到的packageUrl地址下载新的包,而且校验md5值,而后将新包解压到本地文件夹中,最后使用GICRouterloadAPPFromPath:方法从新加载包使得更新生效。图片

固然,你也能够将下载好的新包等下一次app启动后再解压从新加载。

相关文章
相关标签/搜索