1,安裝code-push命令行工具
npm install -g code-push-cli
2,注冊code-push賬號。
code-push register
3,添加app
code-push app add? FreshToHome_Customer_iOS? ?ios? react-native
code-push app add? FreshToHome_Customer_Android? ?android? react-native
此處記下app測試和正式發(fā)布的key。
4,項(xiàng)目根目錄下安裝code-push的依賴
yarn add react-native-code-push
5,將依賴link到原生項(xiàng)目里面,此時(shí)需要填寫iOS和Android應(yīng)用的deploymentKey,這兩個(gè)deploymentKey分別寫入到ios目錄下的info.plist文件(CodePushDeploymentKey)和android目錄下的strings.xml,這里填寫staging下的key。
6,在JS項(xiàng)目里面添加更新檢測的代碼,推薦使用sync接口。
7,發(fā)布更新
這個(gè)命令自動(dòng)打包和上傳包到codePush的server,上傳到Staging
code-push release-react FreshToHome_Customer_iOS ios
code-push release-react <AppName> <platform>
[--bundleName]
[--deploymentName]
[--description]
[--development]
[--disabled]
[--entryFile]
[--mandatory]
[--sourcemapOutput]
[--targetBinaryVersion]
[--rollout]
里面有個(gè)--deployName這里可以設(shè)置deploy的環(huán)境,Staging? or? ?Production.
8,版本轉(zhuǎn)移
此外,我們還可以選擇Staging里面的穩(wěn)定的版本,直接轉(zhuǎn)移到Production下,進(jìn)行發(fā)布。將Staging下的最后一個(gè)更新版本復(fù)制轉(zhuǎn)移到Production下,成為一個(gè)版本。
code-push promote FreshToHome_Customer_iOS Staging Production
9,查看部署狀態(tài):
查看app在Staging和Production下的部署狀態(tài):
code-push deployment ls FreshToHome_Customer_iOS
查看app在Staging狀態(tài)下的部署歷史
code-push deployment history FreshToHome_Customer_iOS Staging
10,版本回退。
code-push rollback? <AppName>? <deploymentName>
版本回退的本質(zhì)是產(chǎn)生一個(gè)新版本。
11,修改更新。
code-push patch <AppName>? <deploymentName>
[--label]
[--description ]
[--disabled]
[--mandatory]
[--rollout ]
需要注意:
正常更新需要做到兩點(diǎn):
1,banary的版本,也就是app原生的版本沒有變。
2,js的內(nèi)容要發(fā)生變化,如果沒有變化,將會發(fā)布更新失敗,將--noDuplicateReleaseError設(shè)置為true,js代碼沒有發(fā)生變化,不會報(bào)錯(cuò),依然發(fā)布更新會失敗。
參考文章:
http://www.itdecent.cn/p/f8689ccf0007
https://github.com/Microsoft/code-push/blob/master/cli/README-cn.md#%E5%8F%91%E5%B8%83%E6%9B%B4%E6%96%B0-react-native
https://segmentfault.com/a/1190000008591456#articleHeader9
code-Push功能列表:
安裝:npm install -g code-push-cli
注冊賬號:code-push register
登陸:code-push login
注銷:code-push logout
添加項(xiàng)目:? code-push app add [app名稱]? ios
刪除項(xiàng)目:? code-push app remove [app名稱]
列出賬號下的所有項(xiàng)目:? code-push app list
顯示登陸的token:? code-push access-key ls
刪除某個(gè)access-key: code-push access-key rm?[accessKey]
添加協(xié)作人員:code-push collaborator add next@126.com
添加一個(gè)部署:code-push deployment add [AppName]? [DeployName]
刪除部署:code-push deployment remove?[AppName]? [DeployName]
列出應(yīng)用的部署:code-push deployment ls?[AppName]
查詢部署環(huán)境的key:code-push deployment ls? [AppName]? -k
查看部署的歷史版本信息:code-push deployment history? [AppName]? [DeployName]
重命名一個(gè)部署:code-push deployment rename [AppName] [CurrentDeployName]? [NewDeployName]
項(xiàng)目中使用需要注意的事項(xiàng):
1,每一個(gè)js發(fā)布,都有對應(yīng)的發(fā)布號,如v20,以及對應(yīng)的binary版本號,如1.3.0,1.3(需要注意,1.3和.1.3.0會被認(rèn)為是同一個(gè)binary版本)
2,使用relese-react命令時(shí),如果不指定binary的版本號,對Android的js包來說,會從gradle的配置中去讀binary的版本號,iOS會從對應(yīng)的info.plist中,查到version的版本號。
3,指定js包的disabled為true時(shí),已經(jīng)安裝該js包的用戶,會提示更新,這時(shí)會更新到該binary版本下的上一個(gè)js包。沒有安裝該js包的用戶,不會安裝到這個(gè)js包。
4,命令行發(fā)布js包的時(shí)候,更新描述,--description里面需要換行,使用 '\\n'。