一、准备工作,先安装code-push的行命令工具:
npm install code-push-cli@latest -g
安装mysql
二、安装 code-push-server
$ git clone https://github.com/lisong/code-push-server.git
$cd code-push-server
$ npm install
$ ./bin/db init --dbhost localhost --dbuser root --dbpassword#初始化mysql数据库
需要修改 config/config.js中的配置
//文件存储在本地配置 当storageType为local时需要配置
local: {
storageDir: "/Users/mac/workspaces/storage",
//文件下载地址 CodePush Server 地址 + '/download' download对应app.js里面的地址
downloadUrl: "http://192.168.1.127:3000/download",
// public static download spacename.
public: '/download'
},
jwt: {
// 登录jwt签名密钥,必须更改,否则有安全隐患,可以使用随机生成的字符串
// Recommended: 63 random alpha-numeric characters
// Generate using: https://www.grc.com/passwords.htm
tokenSecret: 'INSERT_RANDOM_TOKEN_KEY'
},
common: {
dataDir: "/Users/mac/workspaces/data",
//选择存储类型,目前支持local,oss,qiniu,s3配置
storageType: "local"
},
storageDir和dataDir修改成你实际的目录。事先要创建这两个目录
downloadUrl需要换成服务器的IP
访问 https://www.grc.com/passwords.htm ,生成一个token
$ ./bin/www#启动服务 浏览器中打开 http://127.0.0.1:3000
三、运行demo
git clone https://github.com/lisong/code-push-demo-app.git
cd code-push-demo-app
npm install
用xcode打开ios下的工程文件。在菜单Product->Scheme->Edit Scheme...->Run->Info->Build Configuration中,选择release
1、登录服务器
code-push login http://127.0.0.1:3000#login in browser account:admin password:123456
在打开的浏览器中,得到一个token,把它填在终端上,就处于登录状态了。
2、添加App
code-push app add CodePushDemoApp-ios ios react-native
Successfully added the "CodePushDemoApp-ios" app, along with the following default deployments:
┌────────────┬───────────────────────────────────────┐
│ Name │ Deployment Key │
├────────────┼───────────────────────────────────────┤
│ Production │ yy4I8rHWHbWYfDkIyzADQwdKoPSS4ksvOXqog │
├────────────┼───────────────────────────────────────┤
│ Staging │ MAZnvAsPe1RxY6TckoXUoci1Vuym4ksvOXqog │
└────────────┴───────────────────────────────────────┘
把这个值,填到ios工程目录下的Info.plist
CodePushDeploymentKey
yy4I8rHWHbWYfDkIyzADQwdKoPSS4ksvOXqog
CodePushServerURL
http://192.168.1.127:3000/
CodePushServerURL,需要填上刚才服务器的地址
3、发布热更新。
react-native run-ios
在模拟器中运行App
code-push release-react CodePushDemoApp-ios ios -d Production
执行后,结果如下。
Using the target binary version value "2.0.5" from "ios/CodePushDemoApp/Info.plist".
。。。。。。
Successfully released an update containing the "/var/folders/jn/vz5y4n9j3xs47k21tj4t_8xm0000gn/T/CodePush" directory to the "Production" deployment of the "CodePushDemoApp-ios" app.
此处要注意:热更新不能修改版本号,修改需要在App Store中重新发布,热更新针对的是不修改版本号的更新。
我之前的理解有错误,是群友帮忙才明白过来,否则在App中点击时,服务器报304错误。
如果App的内容没有改变,运行code-push release-react CodePushDemoApp-ios ios -d Production
将会报错:
[Error]The uploaded package is identical to the contents of the specified deployment's current release.
4、android的区别
版本号是在 manifests/AndroidManifests.xml中的android:versionName="2.0.0"
$ cd android
$ ./gradlew assembleRelease
$ cd app/build/outputs/apk #install app-release.apk into your phone
由于 gradle的原因,如果无法通过AndroidStudio自动执行,可以把app-release.apk拷贝到手机上执行。
添加app
code-push app add CodePushReactNativeDemo-android android react-native
生成的key,放在MainApplication.java中
@Override
protected List getPackages() {
return Arrays.asList(
new MainReactPackage(),
new CodePush(
"Yk3NInRhwVMSVcbSxMcs9T6s1ymQ4ksvOXqog",
MainApplication.this,
BuildConfig.DEBUG,
"http://192.168.1.127:3000/"
)
);
}
发布热更新
code-push release-react CodePushReactNativeDemo-android android -d Production
目前对于Stagin和Production,理解还不清楚,后续搞明白了再补充。