一、CodePush 回滾
1、如果在CodePush發布後發現某個版本存在問題,我們可以使用CodePush回滾功能。
2、在回滾前,需要先生成新版本發布,將有問題的版本下線。
//生成新版本發布 code-push release-react MyApp ios -d production //將有問題的版本下線 code-push promote MyApp-OldProduction ios -r Production //回滾到上一個版本 code-push rollback MyApp ios Production
3、回滾成功後,用戶會強制離線,並且,當他們再次打開應用時,將看到指定版本的更新提示。如果你想在回滾時保留部分用戶的更新,請使用–targetBinaryVersion參數,例如: –targetBinaryVersion 1.0.0
二、CodePush 更新沒效果
1、如果在發布應用更新後用戶並未收到更新,這個問題通常是由以下原因導致的:
– 應用安裝方式有誤,例如在應用安裝時未給予正確的訪問許可權;
– 對於已簽名和已發布的應用,應用的版本號及簽名存在問題;
– 應用使用了未發布的更新版本;
– CodePush服務無法連接。
2、如果是隨機的更新沒有生效,可以試試重啟設備或者清空緩存。
三、CodePush 如何打包
1、在使用React Native CodePush時,我們需要對應用進行打包,示例如下:
//進行生產環境的打包 react-native bundle --platform ios --entry-file index.ios.js --bundle-output ./ios/main.jsbundle --dev false
2、打包生成的main.jsbundle文件需要在本地引用。為了方便操作,我們可以在Xcode中的Build Phases選項卡下添加一個Run Script,示例如下:
# 在運行前先清空之前的構建生成目錄 rm -rf "${SRCROOT}/../CodePush" # 執行 react-native 命令生成JsBundle文件到指定目錄 react-native bundle --platform ios --entry-file index.ios.js --bundle-output "${SRCROOT}/../CodePush/main.jsbundle" --dev false --assets-dest "${SRCROOT}/../" # 刪除文件中字元串中的空格 sed -i "" 's/ *$//g' "${SRCROOT}/../CodePush/main.jsbundle" # 驗證是否存在文件 if [ ! -f "${SRCROOT}/../CodePush/main.jsbundle" ] then echo "main.jsbundle not found!" exit 1 else echo "main.jsbundle is found." fi
3、最後,在Xcode中將鏈接的JavaScript庫指向main.jsbundle即可。
四、CodePush 服務遷移
1、如果你想從一個CodePush服務遷移到另一個CodePush服務,可以參考以下步驟:
– 在第二個CodePush服務中新建應用,並將新應用的名稱在原先應用的配置文件中替換;
– 停止第一個CodePush服務的嚮應用推送更新,等所有設備輪詢到新應用名稱後,開始在第二個CodePush服務中發布更新。
2、在此過程中,用戶需要重新下載應用,或者檢查更新從第二個服務中獲取更新。
五、CodePush 蘋果上架審核
1、如果使用了CodePush,請在蘋果上架審核中填寫以下說明:
– 該應用使用了Microsoft App Center CodePush移動應用更新;
– App Store Review Guidelines規定,所有應用程序都必須由蘋果公司直接審批,並且不能在應用內部進行部分更新(指軟體的核心功能)。
2、當你成功提交應用後,更新內容將會彈出。如果你需要更新的是應用的核心功能,蘋果會要求你進行重新提交審核。不過,CodePush更新不會涉及核心功能,所以能夠通過審核。
六、CodePush 更新ram-bundle
1、在發布時,需要將生產環境下JS代碼包壓縮成一個單一的文件。您可以通過將ram-bundle忽略選項添加到發布腳本中,來禁用此功能。
//忽略打包 code-push release-react MyApp ios --disable-delta --dev false --pre-json {\"buildNumber\": \"$(theme_version)\"} --description "Updating MyApp to version $$(theme_version)" -t [email list]
2、這將禁用使用IncDelta更新生產應用程序時額外的ODR網路請求。
七、CodePush 蘋果熱更新審核
1、蘋果熱更新審核需要使用CodePush的「與源文件比較」功能,並將所有JS代碼打包到一個文件中。
2、使用以下命令對應用程序進行打包並在發布時禁用增量更新。
//忽略增量更新,更新全部JS文件 code-push release-react MyApp ios --disable-delta --dev false --pre-json {\"buildNumber\": \"$(theme_version)\"} --description "Updating MyApp to version $$(theme_version)" -t [email list]
3、如果您沒有像上面這樣,用–disable-delta標記禁用增量更新,則熱更新審核將不會因為增量更新失敗而被阻止。
八、CodePush 升級之後路徑不見了
1、如果你在應用升級後出現路徑不見(path not found)的錯誤,請確保協調好Incremental更新和JSBundleURI之間的關係,確保都在應用的設置中反映。
2、可以使用下面的代碼獲取BundleURL:
import { NativeModules } from 'react-native'; const { CodePush } = NativeModules; CodePush.getConfiguration((error, config) => { console.log(config); });
3、如果以上方法無法解決問題,請考慮完全升級你的應用程序。如果你確信你的應用程序已經完全更新了,但仍有路徑不見的錯誤,請檢查網路問題,確保可以下載並載入應用程序資源。
九、CodePush 命令
1、以下是CodePush常用命令列表:
– code-push app add MyApp ios react-native:添加名為MyApp的React Native應用程序以支持CodePush,平台為iOS。
– code-push deployment add MyApp Production:在名為MyApp的應用程序中添加名為Production的自定義部署(默認只有Staging和Production)。
– code-push release-react MyApp ios:將應用程序版本發布到CodePush服務中,以便可以向設備上的用戶進行推送。
– code-push promote MyApp-OldProduction ios -r Production:將名為MyApp-OldProduction的部署「升級」為名為Production的生產部署。儘管它是歷史上生產的一個版本,但您無需重新提交應用發行版即可獲得它。需要注意的是,只有活動(尤其是正在使用生產編譯和簽名的應用程序)的Production部署才會受此操作的影響。
– code-push rollback MyApp ios Production:回滾到上一個部署的版本。
– code-push access-key ls:列出所有可用的部署密鑰。
– code-push access-key add [KeyName]:添加名為[KeyName]的部署密鑰。
2、CodePush還有許多其他標誌,詳情請參閱CodePush官方文檔。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238944.html