HotUpgrade
1. CodePush
staging代表開發(fā)版的熱更新部署,production代表生產(chǎn)版的熱更新部署!
0.網(wǎng)上資料和官網(wǎng)最新的不一樣
1.安裝CodePush: npm install -g code-push-cli
2.創(chuàng)建CodePush賬號(hào): code-push register (會(huì)打開網(wǎng)頁進(jìn)行注冊(cè),有點(diǎn)卡)
3.復(fù)制 token到控制臺(tái)
-
4.在CodePush服務(wù)器上注冊(cè)app:
- code-push app add MyApp-iOS ios react-native
- code-push app add MyApp-Android android react-native
- 復(fù)制部署秘鑰staging或(code-push deployment ls appName)
-
5.項(xiàng)目安裝SDK:
- npm install --save react-native-code-push
- react-native link react-native-code-push
- code-push deployment ls <AppName> -k
- 復(fù)制staging 到 MainApplication.java 里deployment-key-here
- 調(diào)用sync函數(shù)
- code-push release-react MyApp-Android android
-
相關(guān)命令3
- code-push login 登陸
- code-push loout 注銷
- code-push access-key ls 列出登陸的token
- code-push access-key rm <accessKye> 刪除某個(gè) access-key
-
相關(guān)命令4
- code-push app add 在賬號(hào)里面添加一個(gè)新的app
- code-push app remove 或者 rm 在賬號(hào)里移除一個(gè)app
- code-push app rename 重命名一個(gè)存在app
- code-push app list 或則 ls 列出賬號(hào)下面的所有app
- code-push app transfer 把a(bǔ)pp的所有權(quán)轉(zhuǎn)移到另外一個(gè)賬號(hào)
-
- 發(fā)布更新
-
- 第一種方式:通過code-push release-react發(fā)布更新
- code-push release-react MyApp-iOS ios
- code-push release-react MyApp-Android android
- code-push release-react MyApp-iOS ios -t 1.0.0 --dev false --d Production --des "" -r 100
- 優(yōu)化操作流程" --m true
- 其中參數(shù)–t為二進(jìn)制(.ipa與apk)安裝包的的版本;–dev為是否啟用開發(fā)者模式(默認(rèn)為false);–d是要發(fā)布更新的環(huán)境分Production與Staging(默認(rèn)為Staging);–des為更新說明;–m 是強(qiáng)制更新
- 通過code-push release發(fā)布更新(收藏)
- 應(yīng)用創(chuàng)建時(shí)有兩個(gè)環(huán)境,一個(gè)是Staging,一個(gè)是Production,開發(fā)階段用Staging,開發(fā)完成可以用code-push promote 將應(yīng)用遷移到Production中
- code-push patch 應(yīng)用名 Production -r 100%
- code-push promote RNCodePush-iOS Staging Production -r 20 將Staging 推到 Production 推20%的用戶。
-
相關(guān)命定5
- code-push deployment add 部署
- code-push deployment rename 重命名
- code-push deployment rm 刪除部署
- code-push deployment ls 列出應(yīng)用的部署情況
- code-push deployment ls -k 查看部署的key
- code-push deployment history <AppName> 查看歷史版本(Production 或者 Staging)
- code-push deployment clear <appName> Production or Staging // 清除歷史部署記錄
- code-push rollback RNCodePush-ANdroid Staging --targetRelease v4 回滾到自定版本
-
Install Metrics(安裝指標(biāo))
- Active:成功安裝并運(yùn)行當(dāng)前release的用戶的數(shù)量,即表示當(dāng)前下載更新部署的活躍用戶數(shù)量,of 左邊數(shù)會(huì)隨著用戶安裝、卸載而 增加、減少。of右邊數(shù)代表當(dāng)前安裝或收到部署版本的用戶數(shù),當(dāng)有用戶卸載App,該數(shù)值會(huì)降低。 因此它很好的解釋了當(dāng)前更新包有多少活躍用戶,多少用戶接收過這個(gè)安裝包
- Total:成功安裝部署當(dāng)前release的用戶量,只增不減
- Pending:當(dāng)前release版本被下載的數(shù)量,但是還沒有被安裝,該值會(huì)隨著用戶下載安裝后增加, 在卸載時(shí)降低。
更新規(guī)則
來自網(wǎng)絡(luò)
你APP內(nèi)plist文件寫的版本號(hào)可能是1.0.0,所以你的reactjs打包上傳的版本也要是1.0.0(而不是1.0.1這樣遞增),你需要和APP保持一致,然后服務(wù)器會(huì)根據(jù)你最新上傳的且和APP一樣的版本作為最新版。
范圍表達(dá)式
* 1.2.3 僅僅只有1.2.3的版本
* *所有版本
* 1.2.x 主要版本1,次要版本2的任何修補(bǔ)程序版本
* 1.2.3 - 1.2.7 1.2.3版本到1.2.7版本
* >=1.2.3 <1.2.7 大于等于1.2.3版本小于1.2.7的版本
* ~1.2.3 大于等于1.2.3版本小于1.3.0的版本
* ^1.2.3 大于等于1.2.3版本小于2.0.0的版本
相關(guān)代碼5.4
//通知CodePush,一個(gè)更新安裝好了。當(dāng)你檢查并安裝更新,(比如沒有使用sync方法去handle的時(shí)候),這個(gè)方法必須被調(diào)用。否則CodePush會(huì)認(rèn)為update失敗,并rollback當(dāng)前版本,在app重啟時(shí)。
當(dāng)使用sync方法時(shí),不需要調(diào)用本方法,因?yàn)閟ync會(huì)自動(dòng)調(diào)用,我沒有調(diào)用,還是加上了
---------------------
作者:CrazyCodeBoy
來源:CSDN
原文:https://blog.csdn.net/fengyuzhengfan/article/details/52003798
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
public componentDidMount () {
// 必須要刷新
CodePush.notifyAppReady()
}
CodePush.sync(
options: Object,
syncStatusChangeCallback: function(syncStatus: Number),
downloadProgressCallback: function(progress: DownloadProgress)
): Promise<Number>;
傳入三個(gè)參數(shù)
1. options = { installMode: CodePush.InstallMode.IMMEDIATE, updateDialog: true }
installMode (codePush.InstallMode): 安裝模式,用在向CodePush推送更新時(shí)沒有設(shè)置強(qiáng)制更新(mandatory為true)的情況下,默認(rèn)codePush.InstallMode.ON_NEXT_RESTART即下一次啟動(dòng)的時(shí)候安裝。
mandatoryInstallMode (codePush.InstallMode):強(qiáng)制更新,默認(rèn)codePush.InstallMode.IMMEDIATE
updateDialog (UpdateDialogOptions) :可選的,更新的對(duì)話框,默認(rèn)是null,包含以下屬性
appendReleaseDescription (Boolean) - 是否顯示更新description,默認(rèn)false
descriptionPrefix (String) - 更新說明的前綴。 默認(rèn)是” Description: “
mandatoryContinueButtonLabel (String) - 強(qiáng)制更新的按鈕文字. 默認(rèn) to “Continue”.
mandatoryUpdateMessage (String) - 強(qiáng)制更新時(shí),更新通知. Defaults to “An update is available that must be installed.”.
optionalIgnoreButtonLabel (String) - 非強(qiáng)制更新時(shí),取消按鈕文字. Defaults to “Ignore”.
optionalInstallButtonLabel (String) - 非強(qiáng)制更新時(shí),確認(rèn)文字. Defaults to “Install”.
optionalUpdateMessage (String) - 非強(qiáng)制更新時(shí),更新通知. Defaults to “An update is available. Would you like to install it?”.
title (String) - 要顯示的更新通知的標(biāo)題. Defaults to “Update available”.
具體可以查看我上面的代碼:
還有一個(gè)是:codePush.InstallMode,有三種模式,
一個(gè)是立即啟動(dòng),nstallMode.IMMEDIATE
一個(gè)是下次啟動(dòng)安裝:InstallMode.ON_NEXT_RESTART
一個(gè)是程序在前臺(tái),并沒有從后臺(tái)切換到前臺(tái)的情況下用的InstallMode.ON_NEXT_RESUME
2.狀態(tài)
3.進(jìn)度
iOS配置時(shí)問題
1. TARGETS->Build Settings->Header Search Paths-> 添加
$(SRCROOT)/../node_modules/react
$(SRCROOT)/../node_modules/react-native-code-push (可不加)
2. 'React/RCTEventEmitter.h' file not found
1. Disable the parallel builds:
- xCode menu -> Product -> Scheme -> Manage Shemes...
- Double click on your application
- Build tab -> clear the tick on Pallelize Build
- Add react as a project dependecy
2. xCode Project Navigator -> drag React.xcodeproj from Libraries to root tree
- Build Phases Tab -> Target Dependencies -> + -> add React
安裝簽名
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
注意上面的my-release-key這個(gè)名字可以自己取名,同時(shí)my-key-alias也是自己取名,其中第二個(gè)名稱alias參數(shù)后邊的別名,在后面你在為應(yīng)用簽名的時(shí)候需要用到,所以暫時(shí)記錄一下這個(gè)別名
添加簽名
signingConfigs {
release {
storeFile file('../keystores/rn-test.keystore')
storePassword 'name'
keyAlias 'name'
keyPassword 'name'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
./gradlew assembleDebug 編譯并打Debug包
./gradlew assemblexiaomiDebug 編譯并打xiaomi的debug包,其他類似
./gradlew assembleRelease 編譯并打Release的包
./gradlew assemblexiaomiRelease 編譯并打xiaomi的Release包,其他類似
./gradlew installRelease Release模式打包并安裝
./gradlew uninstallRelease 卸載Release模式包