iOS应用发布到App Store 是需要审核的,而且审核通过时间不确定,有可能因为某一改变而受苹果规则限制而拒绝,有可能因为某一节日到来前App Store 需要审核的比较多而影响审核进度。但是移动应用产品更新的速度却非常的快,通常 1~2周或者几天时间就可以完成一次版本的迭代。
热部署 就是为了解决这一问题而产生的,不用提交新的审核,通过服务器动态更新React Native的 JavaScript 代码来实现应用的更新。
一、什么是热部署
热部署就是指不需要重新审核和安装新版本的应用,通过服务器的动态更新来更新应用的功能,热部署原理如下图:
Appdelegate 中的代码为:
此时 jsCodeLocation 加载的地址是 @"http://localhost:8081/index.ios.bundle?platform=ios&dev=true" 那么这个地址是从何而来的?
原来:当执行 react-native run-ios 或者 react-native run-android 命令时
首先,将javaScript 相关资源打包,例如iOS应用的JavaScript 资源打包为 index.ios.bundle
然后,启动一个基于Node.js的 React Native服务,这个服务运行在本地,监听的默认端口号是8081,最后当应用请求该地址的 index.ios.bundle资源时,就会从 React Native 服务实时获取最新的 JavaScript 资源。
最后,当应用请求该地址的 index.ios.bundle 资源时,就会从React Native 服务实时获取最新的 JavaScript 资源。
另外,当修改index.ios.js文件时,React Native 会重新打包 JavaScript 资源,这样就实现了应用的热更新。
二、实现热更新服务端的两种方式
1. 搭建自己的node.js服务器
优点:简单有效
缺点:首次使用时有一定的延迟时,需要下载JavaScript包。
网络劫持等问题。
因此,实际开发中使用的热更新通常基于本地文件,即将更新包下载到本地后使用。
基于上述原理,可以使用第三方的实现方案:即微软推出的CodePush
2. 微软推出的CodePush
由于第一种选择的缺点,实际开发中使用的热更新通常基于本地文件,即将更新包下载到本地后使用。
基于上述原理,可以使用第三方的实现方案:即微软推出的CodePush
CodePush(https://microsoft.github.io/code-push/)是微软提供的一套用于热更新React Native 和Apache Cordova 应用的服务,提供 React Native 和Apache Cordova 开发者直接部署移动应用更新给用户的云服务。CodePush 最为一个中央仓库,开发者可以推送更新,然后应用从客户端查询更新。这样不需要重新审核和安装应用,就可以解决缺陷和添加新的特性。
CodePush 主要功能有以下优势:
开源免费 代码托管在 https://microsoft.github.io/code-push/
管理Alpha、Beta以及生产环境应用
支持 React Native 和 Apache Cordova应用