codepush使用記錄

CodePush中文翻譯node

CodePush中文翻譯react

1. code-push經常使用命令

  • 安裝: npm install -g code-push-cliios

  • 註冊帳號: code-push registergit

  • 登錄: code-push logingithub

  • 註銷: code-push logoutnpm

  • 添加項目: code-push app add [app名稱]react-native

  • 刪除項目: code-push app remove [app名稱]xcode

  • 列出帳號下的全部項目: code-push app list服務器

  • 顯示登錄的token: code-push access-key lsapp

  • 刪除某個access-key: code-push access-key rm <accessKey>

  • 添加協做人員:code-push collaborator add <appName> next@126.com

  • 部署一個環境: code-push deployment add <appName> <deploymentName>

  • 刪除部署: code-push deployment rm <appName>

  • 列出應用的部署: code-push deployment ls <appName>

  • 查詢部署環境的key: code-push deployment ls <appName> -k

  • 查看部署的歷史版本信息: code-push deployment history <appName> <deploymentNmae>

  • 重命名一個部署: code-push deployment rename <appName> <currentDeploymentName> <newDeploymentName>

2. 集成到項目

  1. 在項目目錄下, 安裝CodePush插件

    • npm install --save react-native-code-push

  2. 引入到Xcode工程, 有兩種方法, 第一種手動加入, 第二種使用rnpm自動引入, 第三種使用cocoaPods接入:

    • 第二種:

      • 安裝rnpm: npm -g install rnpm xcode

      • 使用rnpm: rnpm link

    • 第三種:

      • 修改Podfile文件:(注意路徑正確): pod 'CodePush', :path => './node_modules/react-native-code-push'

      • 執行命令行更新pod:pod install 或者 pod install --verbose --no-repo-update

  3. 在Xcode裏AppDelegate.m裏 修改

    //  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
    #ifdef DEBUG
      jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
    #else
      jsCodeLocation = [CodePush bundleURL];
    #endif
  4. 修改info.plist 添加CodePushDeploymentKey鍵值對中的Staging的值,Deployment Key能夠經過命令code-push deployment ls appName --displayKeys進行獲取.也可使用$(CODEPUSH_KEY)來自動適配ProductionStaging環境, 若是填的是Production的key, 則打的包就是Production的包, 若是填的是Staging的key, 則打的包就是Staging的包.

  5. 修改info.plist 中 Bundle versions string, short的值改爲三位數字,如1.0.0, 否則會報錯

3. 發佈更新

自動打包發佈

自動打包你的js和資源文件成bundle而且上傳發布到CodePush的服務器(注意: 默認是Staging環境, 還不懂怎樣切換Production環境):

code-push release-react MyApp ios --plistFile ../MyApp/Info.plist -t "1.0.0" --des "測試完畢還原原狀" -m true -d development

手動打包發佈

本身打包有兩種: 第一種只是更新js文件(可整個項目的js文件/當個js文件), 第二種js文件+images文件(release 整個文件夾)

第一種單單js文件:

1. 建立一個bundles文件夾
打包命令: 
// react-native bundle --platform 平臺 --entry-file 啓動文件 --bundle-output 打包js輸出文件 --assets-dest 資源輸出目錄 --dev 是否調試 
打包整個項目的js文件: 
react-native bundle --platform ios --entry-file index.ios.js --bundle-output ./bundles/main.bundle --dev false

2. 發佈更新
發佈命令: 
// code-push release <應用名稱> <Bundles所在目錄> <對應的應用版本> --deploymentName 更新環境 --description 更新描述 --mandatory 是否強制更新
例如:
code-push release HybridDemo ./bundles/main.bundle 1.0.0 --deploymentName Production --description "第四次更新" --mandatory true

第二種js文件+圖片資源:

// 1. –assets-dest 後就是放圖片的文件夾路徑
react-native bundle --platform ios --entry-file index.ios.js --bundle-output ./bundles/qqm.jsbundle --assets-dest ./bundles --dev false

// 2. push bundles文件
code-push <release/debug> <projectName(與註冊的app同名)><bundle文件名> <版本號>
例如: 
code-push release appName ./bundles 1.0.0

更新規則

你APP內plist文件寫的版本號多是1.0.0,因此你的reactjs打包上傳的版本也要是1.0.0(而不是1.0.1這樣遞增),你須要和APP保持一致,而後服務器會根據你最新上傳的且和APP同樣的版本做爲最新版。

範圍表達式

  • 1.2.3 僅僅只有1.2.3的版本

  • * 全部版本

  • 1.2.x 主要版本1,次要版本2的任何修補程序版本

  • 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的版本

修改更新

Usage: code-push patch <appName> <deploymentName> [--label <label>] [--description <description>] [--disabled] [--mandatory] [--rollout <rolloutPercentage>]

選項:
  --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的更新的描述

升級環境

Usage: code-push promote <appName> <sourceDeploymentName> <destDeploymentName> [--description <description>] [--mandatory] [--rollout <rolloutPercentage>]

選項:
  --description, --des  描述  [string] [默認值: null]
  --disabled, -x        是否禁用該更新  [boolean] [默認值: null]
  --mandatory, -m       是否強制更新  [boolean] [默認值: null]
  --rollout, -r         此促進更新推送用戶的百分比  [string] [默認值: null]

示例:
  code-push promote MyApp Staging Production                                   "MyApp"中"Staging"部署的最新更新發布到"Production"部署中
  code-push promote MyApp Staging Production --des "Production rollout" -r 25  "MyApp"中"Staging"部署的最新更新發布到"Production"部署中, 而且只推送25%的用戶

回滾更新

Usage: code-push rollback <appName> <deploymentName> [--targetRelease <releaseLabel>]

選項:
  --targetRelease, -r  指定迴歸到哪一個標籤,默認是回滾到上一個更新  [string] [默認值: null]

示例:
  code-push rollback MyApp Production                     "MyApp"中"Production"部署執行回滾
  code-push rollback MyApp Production --targetRelease v4  "MyApp"中"Production"部署執行回滾,回滾到v4這個標籤版本

js內寫法

若是有發佈熱更新時 mandatory 則 Code Push 會根據 mandatory 是 true 或false 來控制應用是否強制更新。默認狀況下 mandatory 爲 false 即不強制更新。mandatory 爲 false時如下三種設置方法纔有效

// 第一種:
codePush.sync();

// 第二種:
codePush.sync({
    updateDialog: false,
    installMode: codePush.InstallMode.IMMEDIATE
});

// 第三種:
CodePush.sync({
    deploymentKey: 'deployment-key-here',
    updateDialog: {
        optionalIgnoreButtonLabel: '稍後',
        optionalInstallButtonLabel: '後臺更新',
        optionalUpdateMessage: '有新版本了,是否更新?',
        title: '更新提示'
    },
    installMode: CodePush.InstallMode.IMMEDIATE
});
  • 三種更新的策略: 配置到installMode: 以後便可生效

    • IMMEDIATE 當即更新APP

    • ON_NEXT_RESTART 到下一次啓動應用時

    • ON_NEXT_RESUME 當應用從後臺返回時

項目實際發佈時使用命令

  1. 登陸: code-push login

  2. 列出帳號下的全部項目: code-push app list

  3. 列出應用的部署: code-push deployment ls MyApp

  4. 查看部署的歷史版本信息: code-push deployment history MyApp Debug

  5. 發佈版本更新: code-push release-react MyApp ios -d Staging -p ../MyApp/Info.plist --des 'UI調整' -t '1.0.2'

  6. 把更新推到另外一個環境: code-push promote QQMProjec Staging Production

  7. 關閉某個版本: code-push patch MyApp Staging -l v13 --des '關閉v13' -x true

相關文章
相關標籤/搜索