GIC
在UI上支持直接以XML来写,而业务逻辑支持使用JavaScript
来写,所以具有了应用热更新
的能力。服务器
本篇将会重点介绍如何使用GIC
来实现应用的热更新。app
若是你不想看下面内容,也能够直接使用脚手架来建立一个具备HotUpdate
功能的工程模板。你能够按照脚手架的提示直接运行这个模板来查看hotUpdate
的功能,以下图 post
HotUpdate
流程这里介绍的是一种全量更新
的方法,也就是说每次更新都会将整个project
总体打包更新。也许你可能会担忧总体更新的话包体积太大,这里其实你大能够放心,咱们公司如今三个APP都采用这样的方式,打包之后其实也就几十KB~几百KB,包括图片在内。若是包实在太大,那我相信这时候整个APP已经很复杂庞大了,这时候你可能须要使用另一种方式来实现了,好比把不一样的模块独立打包。设计
HotUpdate
的实现是须要服务端
和客户端
一块儿配合实现的,服务端
提供更新接口
以及包下载服务器
,客户端则根据服务端返回的更新数据,从服务器下载新包。下面分别介绍两端的实现流程。code
更新接口
须要两个参数。cdn
根据这个两个参数,服务端须要一张数据表来保存各个版本的信息。表设计以下blog
packageVersion | needAppVersion | packageUrl | md5 | updateDate |
---|---|---|---|---|
包版本号 | 可以运行该包须要的最低app版本号 | 包的下载地址 | 包的md5校检码 | 更新日期 |
更新逻辑以下:排序
- 使用appVersion 跟 needAppVersion 比较,获取needAppVersion <= appVersion 的全部记录,而且按照packageVersion 从高到底排序。
- 使用pakageVersion 跟第一步筛选出的第一条数据的
packageVersion
比较,若是是小于的,那么返回第一步的第一条数据,若是是>=的,那么就说明没有能够更新的包。
app启动的时候,从服务端请求更新接口
,若是服务端返回了更新数据,那么说明有新的包能够更新。接口
这时候客户端根据拿到的packageUrl
地址下载新的包,而且校验md5值,而后将新包解压到本地文件夹中,最后使用GICRouter
的loadAPPFromPath:
方法从新加载包使得更新生效。图片
固然,你也能够将下载好的新包等下一次app启动后再解压从新加载。