最近研究了下 React Native 的 Code Push 热更新,先来 iOS 版本~
安装 code-push-cli 工具
npm install code-push-cli@latest -g
初始化 react native 工程
react-native init CodePushExample
在工程内安装 react-native-code-push
cd CodePushExample && yarn add react-native-code-push
Add Link
1 | # react-native 0.27+ |
? What is your CodePush deployment key for Android
? What is your CodePush deployment key for iOS
均先按回车忽略
修改代码,把 index.ios.js
和 index.android.js
里面的代码改为 require('./demo');
,同时在同级增加 demo.js
,内容如当前 repo 所示。
用 xcode 打开 CodePushExample/ios/CodePushExample.xcodeproj
,同时把 CodePushExample/node_modules/react-native-code-push/ios/CodePush.xcodeproj
这个文件拖入到 xcode 工程 Project navigator 的 Libraries 中。
在 xcode 项目面板中选择根节点 CodePushExample
,然后选择 Build Phases
tab,把 Libraries/CodePush.xcodeproj/Products/libCodePush.a 拖入到 Link Binary With Libraries 中(注意,如果在 Libraries/CodePush.xcodeproj/Products/libCodePush.a 时候红色字体显示,说明 CodePush.xcodeproj 尚未 build,需要先 build)
点击 Link Binary With Libraries 里面的加号,在弹出框中选择 libz.tbd,然后加入 iOS 10.2/libz.tbd
在 Build Settings tab 里,搜索 Header Search Paths
,然后编辑,添加 $(SRCROOT)/../node_modules/react-native-code-push/ios
,下拉框中选择 recursive
执行 code-push register
执行 code-push login
执行 code-push app add <appname>-ios
这里的 不需要和项目的名称相同,后面加上 -ios
只是为了名字上与 android 版本作区分。如我在这里使用的是如下名称
1 | code-push app add wlexample-ios |
执行结果如下:
我们可以通过这个命令查询发布的信息 code-push deployment ls wlexample-ios -k
xcode 修改 Info.plist,如下:
CodePushDeploymentKey
的值为第 12 步生成的 Production 的 Deployment KeyStaging
项,值为第 12 步生成的 Staging 的 Deployment KeyBundle versions string, short
的值为 x.x.x
三位形式关闭 Dead Code Stripping
运行程序,注意使用 Release
Build
初次运行是这样的结果:
查询发布信息 code-push deployment ls wlexample-ios -k
,结果如下
现在让我们修改源代码,如下修改
发布更新,注意名字和我们之前 code-push app add
时的名字一致
1 | code-push release-react wlexample-ios ios -d Production |
再次查询发布信息 code-push deployment ls wlexample-ios -k
在模拟器中重启程序。不需要在 xcode 中重新 build 了