簡介
CodePush是提供給React Native 和 Cordova 開發(fā)者直接部署移動應用更新給用戶設備的云服務钓辆。CodePush 作為一個中央倉庫碉咆,開發(fā)者可以推送更新到 (JS, HTML, CSS and images)茂浮,應用可以從客戶端 SDKs 里面查詢更新顽馋。CodePush 可以讓應用有更多的可確定性,也可以讓你直接接觸用戶群熊痴。在修復一些小問題和添加新特性的時候,不需要經(jīng)過二進制打包,可以直接推送代碼進行實時更新鄙煤。
配置CodePush CLI(終端工具)
安裝:
npm install -g code-push-cli
注冊賬號:
運行該命令行會打開一個新的頁面,支持Microsofe和github賬號登陸句喜,授權完畢會返回一個key值,終端輸入該key值,即登陸成功
code-push register
終端輸入key值
相關命令
code-push login 登陸
code-push loout 注銷
code-push access-key ls 列出登陸的token
code-push access-key rm <accessKye> 刪除某個 key值
在CodePush上注冊app
code-push app add <appName>
結果
相關命令:code-push app
add 在賬號里面添加一個新的app
remove 或者 rm 在賬號里移除一個app
rename 重命名一個存在app
list 或則 ls 列出賬號下面的所有app
transfer 把app的所有權轉移到另外一個賬號
安裝CodePush插件(iOS)
1.在項目根目錄下執(zhí)行
npm install --save react-native-code-push@latest
2.打開node_modules找到react-native-code-push,在該文件夾下找到CodePush.xcodeproj拖入Xcode的Libraries文件夾下
3.將CodePush.xcodeproj文件夾下的Products文件夾里的庫文件拖進 Link Binary With Libraries中
4.并在Link Binary With Libraries中添加libz.tbd
5.在Build Settings的Header Search Paths那一項中加入 $(SRCROOT)/../node_modules/react-native-code-push
iOS端設置
- AppDelegate.m中倒入頭文件
import "CodePush.h"
2.將
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
替換成
NSURL *jsCodeLocation;
ifdef DEBUG
jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
else
jsCodeLocation = [CodePush bundleURL];
endif
js文件中調(diào)用
1.在入口文件(上手派項目是在Main.js文件中)引入
import codePush from "react-native-code-push";
- 在componentDidMount中調(diào)用sync方法睡毒,當APP啟動時會在后臺靜默更新
componentDidMount(){
codePush.sync();
}
3.到此位置来惧,所有的基本配置都已經(jīng)完成
部署
App創(chuàng)建成功后會默認顯示兩個部署:Production 和Staging 。部署演顾,簡單的說就是環(huán)境供搀,比如ReactNative的jsbundle,iOS和Android是不可以共用一個的钠至,所以我們需要生成兩個jsbundle葛虐,而我們可以通過部署這個功能,創(chuàng)建兩個部署:AppDemo-iOS 和AppDemo-Android 棉钧,并且App中分別使用這兩個部署的Key屿脐,之后我們上傳jsbundle只要分別上傳到這兩個部署中就可以了。每個部署都有一個對應的Deployment Key 宪卿,需要在項目中使用對應的Key的诵。
1.創(chuàng)建部署(添加一個部署"MyDeployment"到App"HandsOn-Mobile"中)
code-push deployment add <appName> <deploymentName>
2.列出所有部署
code-push deployment ls <appName>
3.其他相關命令
code-push deployment rename <appName> 重命名
code-push deployment rm <appName> 刪除部署
code-push deployment ls <appName> 列出應用的部署情況
code-push deployment ls <appName> -k 查看部署的key
code-push deployment history <appName> <deploymentNmae> 查看歷史版本(Production 或者 Staging)
發(fā)布
1.打包js文件
react-native bundle --platform 平臺 --entry-file 啟動文件 --bundle-output 打包js輸出文件 --assets-dest 資源輸出目錄 --dev 是否調(diào)試
如:react-native bundle --platform ios --entry-file index.ios.js --bundle-output iOS1.js --dev false
2.發(fā)布
code-push release <appName> <bundle目錄> <targetBinaryVersion>
[--deploymentName <deploymentName>]默認staging
[--description <description>]更新描述(string)默認為null
[--mandatory]是否強制更新,默認false
[--disabled] 該版本客戶端是否可以獲得更新愧捕,默認為false
[--rollout]此更新推送的用戶的百分比(string)奢驯,默認值為null
如:code-push release HandsOn-Mobile iOS1.js 1.0.0
其他說明
1.關于版本問題
2.回滾更新(Rolling Back Updates)
code-push rollback <appName> <deploymentName>
--targetRelease, -r 指定回歸到哪個標簽,默認是回滾到上一個更新 [string] [默認值: null]
示例:
code-push rollback MyApp Production "MyApp"中"Production"部署執(zhí)行回滾
code-push rollback MyApp Production --targetRelease v4 "MyApp"中"Production"部署執(zhí)行回滾次绘,回滾到v4這個標簽版本
例子如下圖:
3.促進更新(Promoting Updates)??????
code-push promote <appName> <sourceDeploymentName> <destDeploymentName>
–description, –des 描述 [string] [默認值: null]
–disabled, -x 該促進更新瘪阁,客戶端是否可以獲得更新 [boolean] [默認值: null]
–mandatory, -m 是否強制更新 [boolean] [默認值: null]
–rollout, -r 此促進更新推送用戶的百分比 [string] [默認值: null]
示例:
code-push promote MyApp Staging Production
"MyApp" 中"Staging" 部署的最新更新發(fā)布到"Production" 部署中
code-push promote MyApp Staging Production –des "Production rollout" -r 25
"MyApp" 中"Staging" 部署的最新更新發(fā)布到"Production" 部署中, 并且只推送25%的用戶
4.修改更新
code-push patch <appName> <deploymentName>
--label, -l 指定標簽版本更新撒遣,默認最新版本 [string] [默認值: null]
--description, --des 描述 [string] [默認值: null]
--disabled, -x 該修改更新,客戶端是否可以獲得更新 [boolean] [默認值: null]
--mandatory, -m 是否強制更新 [boolean] [默認值: null]
--rollout, -r 此更新推送用戶的百分比管跺,此值僅可以從先前的值增加义黎。 [string] [默認值: null]
示例:
code-push patch MyApp Production --des "Updated description" -r 50 修改"MyApp"的"Production"部署中最新更新的描述 ,并且更新推送范圍為50%
code-push patch MyApp Production -l v3 --des "Updated description for v3" 修改"MyApp"的"Production"部署中標簽為v3的更新的描述