全面了解React Native CodePush

一、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-hant/n/238944.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:13
下一篇 2024-12-12 12:14

相關推薦

  • @uiw/react-amap介紹

    本文將詳細闡述@uiw/react-amap的使用方法和參數配置,以及如何在React應用中集成高德地圖組件。 一、@uiw/react-amap簡介 @uiw/react-ama…

    編程 2025-04-29
  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演着非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • 瘋狂Python講義的全面掌握與實踐

    本文將從多個方面對瘋狂Python講義進行詳細的闡述,幫助讀者全面了解Python編程,掌握瘋狂Python講義的實現方法。 一、Python基礎語法 Python基礎語法是學習P…

    編程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常見的一個概念,是我們在編程中經常用到的一個變量類型。Python是一門強類型語言,即每個變量都有一個對應的類型,不能無限制地進行類型間轉換。在本篇…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Switchlight的全面解析

    Switchlight是一個高效的輕量級Web框架,為開發者提供了簡單易用的API和豐富的工具,可以快速構建Web應用程序。在本文中,我們將從多個方面闡述Switchlight的特…

    編程 2025-04-28

發表回復

登錄後才能評論