在开讲前先介绍另外一种方法也可以进行代码的热更新,利用codepush大家可以参考这篇文章:
常用命令汇总:
//安装模块
npm install -g react-native-update-cli rnpm(一台机子执行一次)
npm install --save react-native-update
rnpm link react-native-update
//登录绑定
pushy login
pushy createApp --platform ios
pushy createApp --platform android
pushy selectApp --platform ios
//上传包
pushy uploadIpa
<your-package.ipa
>
pushy uploadApk android/app/build/outputs/apk/app-release.apk
//发布执更新
pushy bundle --platform <ios|android>
首先到pushy的网站(
http://update.reactnative.cn/home)上面注册账号,并注册应用.
打开你的控制台,定位到你的项目根目录(有package.json文件就是根目录),输入以下命令
npm install -g react-native-update-cli rnpm
此项只要机子安装一次即可
npm install --save react-native-update
此项就是更新你的模块,注意确保你的package.json文件中react-native:版本大于0.18.0,如果小于此版本,需手动更改这个版本号,不知道react-native版本号有哪些可以执行nmp info react-native进行查询所有发布的版本号
rnpm link react-native-update
在你应用中各个平台裢接update的动态库
登录并绑定应用
$ pushy login email: <输入你的注册邮箱> password: <输入你的密码>
这会在项目文件夹下创建一个
.update
文件,注意不要把这个文件上传到Git等CVS系统上。你可以在
.gitignore
末尾增加一行
.update
来忽略这个文件。
登录之后可以创建应用。注意iOS平台和安卓平台需要分别创建:
$ pushy createApp --platform ios
App Name: <输入应用名字 >
$ pushy createApp --platform android
App Name: <输入应用名字 >
App Name: <输入应用名字 >
$ pushy createApp --platform android
App Name: <输入应用名字 >
如果你已经在网页端或者其它地方创建过应用,也可以直接选择应用:
$ pushy selectApp --platform ios
1) 鱼多多(ios)
3) 招财旺(ios)
Total 2 ios apps
Enter appId: <输入应用前面的编号 >
1) 鱼多多(ios)
3) 招财旺(ios)
Total 2 ios apps
Enter appId: <输入应用前面的编号 >
接下来更改开发环境配置
在工程target的Build Phases->Link Binary with Libraries中加入libz.tbd、libbz2.1.0.tbd
在你的AppDelegate.m文件中增加如下代码:
IOS:
// ... 其它代码
# import "RCTHotUpdate.h"
- ( BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions
{
# if DEBUG
// 原来的jsCodeLocation
jsCodeLocation = [ NSURL URLWithString: @"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
# else
jsCodeLocation=[RCTHotUpdate
# import "RCTHotUpdate.h"
- ( BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions
{
# if DEBUG
// 原来的jsCodeLocation
jsCodeLocation = [ NSURL URLWithString: @"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
# else
jsCodeLocation=[RCTHotUpdate