在IT领域,大前端,AI人工智能,大数据大火的情况下,移动端显得有些凄凉,特别是iOS,打包上架异常繁琐不说,审核还时不时出现问题 ,所以就有了一些炙手可热的热更新技术(JSpatch[1] ,RN[2]等) .
刚刚睡醒,一个想法出现在眼前, 自己动手实现一个热更新,可能会受制于后端,如果后端能够配合并加以设计,那就完美了。
我的想法
- app 写一套正常的代码
- 利用Aspects的Aop 运行时hook,在已有代码上做修改或者替换已有代码
- 后端涉及到页面的接口都添加一个`extendCode`,App动态判断,如果有这个东西(加转义的json字符串)就解析这个json里的iOS代码进行替换
涉及到的场景
- 遇到不可预见的bug,不想发版本,要热修复
- 需要隐藏或者修改一些东西,受制于发版时间
- 搞一个活动页,但是需要和原生交互,活动体验受限
没有热更新,意味着写更多的代码或者马甲包
-
强制更新
- 推送一个弹窗消息,提示升级
- 接口判断升级,自动弹出提示窗口
- 支付宝/12306/王者荣耀等大厂支持弹出窗口进行应用内升级,而大部分App还只是跳转应用商店去下载最新版本
-
切换根控制器
- 之前玩过一个看视频的App,需要填写它指定的邀请码,不然进去的时候是一个毫无违和感的电商应用,填写邀请码之后则是另一个乾坤(意味着写了两套代码)
- 看过很多强制登录以及启动引导图的做法也是切换跟控制器来实现的
-
马甲包
- 原有应用的代码进行修改样式,logo,App的名字,证书,包名等
- 重新写一个套壳子,title+web的形式, 套壳包