RNCodePush熱更新組件詳細(xì)接入教程

CodePush簡介

CodePush 是微軟提供的一套提供給 React Native 和 Cordova 開發(fā)者,直接部署移動(dòng)應(yīng)用更新給用戶設(shè)備的云服務(wù)口猜。CodePush 作為一個(gè)中央倉庫冻押,開發(fā)者可以推送更新 (JS, HTML, CSS and images)梁沧,應(yīng)用可以從客戶端 SDK 里面查詢更新碧库。CodePush 可以讓應(yīng)用有更多的可確定性涡贱,也可以讓你直接接觸用戶群堪夭。在修復(fù)一些小問題和添加新特性的時(shí)候愕把,不需要經(jīng)過二進(jìn)制打包,可以直接推送代碼進(jìn)行實(shí)時(shí)更新森爽。
關(guān)于熱更新

React Native 官方并沒有提供熱更新的技術(shù)方案恨豁,但是它是支持熱更新的。

React Native 中的熱更新有點(diǎn)像 App 的版本更新爬迟,也就是根據(jù)查詢 server 端的版本和手機(jī)端目前 App 的版本進(jìn)行對比橘蜜,然后來執(zhí)行是否更新的操作。

根本原因在于 React Native 的加載啟動(dòng)機(jī)制:React Native 會(huì)將一系列資源打包成js bundle文件付呕,系統(tǒng)加載js bundle文件计福,解析并渲染。所以徽职,React Native熱更新的根本原理就是更換js bundle文件象颖,并重新加載,新的內(nèi)容就完美的展示出來了姆钉。

一说订。CodePush熱更新組件詳細(xì)接入教程《安裝和RN集成》
1、安裝 CodePush CLI
npm install -g code-push-cli 2潮瓶、注冊 CodePush賬號(hào) code-push register
這將會(huì)啟動(dòng)瀏覽器陶冷,要求驗(yàn)證Github或微軟帳號(hào)。一旦驗(yàn)證成功筋讨,它將創(chuàng)建一個(gè)CodePush帳號(hào)跟你的Github或MSA相連埃叭,并生成一個(gè)訪問密鑰(Access Key),然后你可以拷貝/粘貼到CLI(它會(huì)提示你這樣做)
如果沒有自動(dòng)打開瀏覽器悉罕,檢查設(shè)置默認(rèn)的瀏覽器

3赤屋、//熱更新平臺(tái)的賬號(hào)信息
register info code-push for android
github username: wq
password: xxxx
4、驗(yàn)證我的登錄是否成功
$ code-push login

5壁袄、在CodePush服務(wù)器注冊App(不同平臺(tái)使用不同的名字)
添加Android平臺(tái)應(yīng)用;smallred是你app_name
code-push app add <appName> <os> <platform>

如:
$ code-push app add smallred Android react-native

│ Name │ Deployment Key │
│ Production │ Fhxxx57 │
│ Staging │ atxxx57 │

1-如果你的App既有iOS又有Android类早,請為不同平臺(tái)創(chuàng)建單獨(dú)的App;

2-成功嗜逻,會(huì)返回Deployment Key涩僻。

3-所有新的Apps自動(dòng)會(huì)出現(xiàn)2個(gè)部署環(huán)境:staging代表開發(fā)版的熱更新部署,用于測試更新;production代表生產(chǎn)版的逆日。

4-在ios中嵌巷,將staging的key復(fù)制在info.plist的CodePushDeploymentKey值中
在android中,復(fù)制在Application的getPackages的CodePush構(gòu)造中室抽。
ps:你可以通過code-push deployment ls <app_name> -k命令來查看deployment key搪哪。

我們可以輸入如下命令來查看我們剛剛添加的App
$ code-push app list

二、RN代碼中集成CodePush的SDK
1.在根目錄(項(xiàng)目目錄)執(zhí)行安裝集成的組件react-native-code-push
npm install react-native-code-push --save 安裝完后坪圾,link連接,將Staging中的Deployment Key輸入:atxxx57 react-native link react-native-code-push
至此Code Push for Android的SDK已經(jīng)集成完成晓折。

2.在android中配置參數(shù)
在 android/app/build.gradle文件里面添如下代碼:
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
然后在/android/settings.gradle中添加如下代碼:
include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

3.運(yùn)行 code-push deployment -k ls <appName>獲取 部署秘鑰。默認(rèn)的部署名是 staging兽泄,所以 部署秘鑰(deployment key ) 就是 staging漓概。
code-push deployment -k ls smallred
如果之前的都配置正確,那這里可以看到Production與Staging的Deployment Key,
將這兩個(gè)key粘貼下來.如果環(huán)境來決定需要用到哪個(gè)key.
在剛開始,肯定需要測試,
那就將Staging對應(yīng)的Deployment Key,替換到下面deployment-key-here的代碼中.
地址:http://www.reibang.com/p/87ccfb795635

4.添加配置。當(dāng)APP啟動(dòng)時(shí)我們需要讓app向CodePush咨詢JS bundle的所在位置病梢,這樣CodePush就可以控制版本胃珍。更新 MainApplication.java文件:

public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
protected List<ReactPackage> getPackages() {
// 3. Instantiate an instance of the CodePush runtime and add it to the list of
// existing packages, specifying the right deployment key. If you don't already
// have it, you can run "code-push deployment ls <appName> -k" to retrieve your key.
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new CodePush("atxxx57", MainApplication.this, BuildConfig.DEBUG),
//new CodePush("deployment-key-here", MainApplication.this, BuildConfig.DEBUG)
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}

關(guān)于deployment-key的設(shè)置

在上述代碼中我們在創(chuàng)建CodePush實(shí)例的時(shí)候需要設(shè)置一個(gè)deployment-key,因?yàn)閐eployment-key分生產(chǎn)環(huán)境與測試環(huán)境兩種,所以建議大家在build.gradle中進(jìn)行設(shè)置。在build.gradle中的設(shè)置方法如下:

打開android/app/build.gradle文件,找到android { buildTypes {} }然后添加如下代碼即可:
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}

    releaseStaging {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'
        ...
    }

    release {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'
        ...
    }
}
...

}
心得:另外,我們也可以將deployment-key存放在local.properties中:

code_push_key_production=Fhxxx57
code_push_key_staging=atxxx57
然后在就可以在android/app/build.gradle可以通過下面方式來引用它了:
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}

    releaseStaging {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_production")+'"'
        ...
    }

    release {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_staging")+'"'
        ...
    }
}
...

}
在android/app/build.gradle設(shè)置好deployment-key之后呢,我們就可以這樣使用了:
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
...
new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG), // Add/change this line.
...
);
}
5.修改versionName蜓陌。
在 android/app/build.gradle中有個(gè) android.defaultConfig.versionName屬性堂鲜,我們需要把 應(yīng)用版本改成 1.0.0(默認(rèn)是1.0,但是codepush需要三位數(shù))护奈。

android{
defaultConfig{
versionName "1.0.0"
}
}

詳細(xì)的操作在官網(wǎng)demo示例中:
https://github.com/Microsoft/react-native-code-push/blob/master/Examples/CodePushDemoApp/App.js

三。配置Android平臺(tái)《發(fā)布更新》

7哥纫、發(fā)布更新RN的bundle到微軟服務(wù)器
CodePush支持兩種發(fā)布更新的方式:
一是通過code-push release-react簡化方式霉旗,
二是通過code-push release的復(fù)雜方式。

一簡化方式蛀骇、命令格式:
code-push release-react <appName> <platform>
如eg:
code-push release-react smallred ios
code-push release-react smallred android
code-push release-react smallred ios --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true
code-push release-react smallred android --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true

[--bundleName <bundleName>] 指明生成JS Bundle的文件名
[--deploymentName <deploymentName>] 部署環(huán)境名:Staging(臨時(shí)環(huán)境)厌秒、Production(生產(chǎn)環(huán)境)
[--description <description>] 更新內(nèi)容描述
[--development <development>] 指明是否要生成一個(gè)非最小化,開發(fā)的JS bundle文件擅憔。默認(rèn)是false鸵闪,禁用警告提示并且bundle文件是最小化的。
[--disabled <disabled>] 指明一個(gè)版本更新是否可以被用戶下載暑诸。如果沒有指定蚌讼,版本更新是有效的(如:用戶將要下載的那一刻你的應(yīng)用稱為同步)。如果你想發(fā)布一個(gè)更新但不是立即生效个榕,那么這個(gè)參數(shù)是有價(jià)值的篡石,直到你明確用[補(bǔ)丁]發(fā)布,當(dāng)你要讓用戶能夠下載(如:公告博客上線)西采。
[--entryFile <entryFile>] 指明相對應(yīng)用根目錄的路徑入口JavaScript 文件凰萨。
[--mandatory] 更新是否強(qiáng)制性(true、false)
[--sourcemapOutput <sourcemapOutput>] 指明生成的JS bundle 的sourcemap寫入的相對路徑。如果沒有指定胖眷,sourcemaps文件不會(huì)生成武通。
[--targetBinaryVersion <targetBinaryVersion>] app的版本號(hào),如果沒有指定珊搀,默認(rèn)使用Info.plist中的version值
[--rollout <rolloutPercentage>]
指定可以接收這次更新的用戶百分比(在1-100的數(shù)字)如果沒有設(shè)置這個(gè)參數(shù)冶忱,它會(huì)設(shè)置為100。

二復(fù)雜方式食棕、生成bundle
發(fā)布更新之前朗和,需要先把 js打包成 bundle,如:

第一步: 在 工程目錄里面新增 bundles文件:mkdir bundles
第二步: 運(yùn)行命令打包 react-native bundle --platform 平臺(tái) --entry-file 啟動(dòng)文件 --bundle-output 打包js輸出文件 --assets-dest 資源輸出目錄 --dev 是否調(diào)試簿晓。
eg:
react-native bundle --platform android --entry-file index.js --bundle-output ./bundles/index.android.bundle --dev false
成功將返回:
Loading dependency graph, done.
bundle: Writing bundle output to: ./bundles/index.android.bundle
bundle: Done writing bundle output
Assets destination folder is not set, skipping...

需要注意的是:
忽略了資源輸出是因?yàn)?輸出資源文件后眶拉,會(huì)把bundle文件覆蓋了。
輸出的bundle文件名不叫其他憔儿,而是 index.android.bundle忆植,是因?yàn)?在debug模式下,工程讀取的bundle就是叫做 index.android.bundle谒臼。
平臺(tái)可以選擇 android 或者 ios朝刊。

發(fā)布更新
打包bundle結(jié)束后,就可以通過CodePush發(fā)布更新了蜈缤。在終端輸入
code-push release <應(yīng)用名稱> <Bundles所在目錄> <對應(yīng)的應(yīng)用版本> --deploymentName: 更新環(huán)境 --description: 更新描述 --mandatory: 是否強(qiáng)制更新
eg:
code-push release smallred ./bundles/index.android.bundle 1.1.3 --deploymentName Production --description "1.1.3支持文章緩存拾氓。" --mandatory true
code-push release smallred ./bundles/index.android.bundle 1.0.1 --deploymentName Staging --description "1.0.1支持文章緩存。" --mandatory true
成功將返回:
Successfully released an update containing the "./bundles/index.android.bundle" file to the "Production" deployment of the "smallred" app.

9底哥、查看發(fā)布的歷史記錄
在終端輸入 code-push deployment history <appName> Staging 可以看到Staging版本更新的時(shí)間咙鞍、描述等等屬性。
如eg:
code-push deployment history smallred Production
code-push deployment history smallred Staging

部署測試

在應(yīng)用創(chuàng)建時(shí),會(huì)自動(dòng)生成Staging與Production這兩個(gè)環(huán)境.

應(yīng)用在開發(fā)階段,通常都是在Staging下進(jìn)行開發(fā)的,而Production作為生產(chǎn)環(huán)境.
當(dāng)應(yīng)用在開發(fā)階段開發(fā)完畢,可使用code-push promote命令從Staging 遷移到Production中

CodePush簡介

CodePush 是微軟提供的一套提供給 React Native 和 Cordova 開發(fā)者趾徽,直接部署移動(dòng)應(yīng)用更新給用戶設(shè)備的云服務(wù)续滋。CodePush 作為一個(gè)中央倉庫,開發(fā)者可以推送更新 (JS, HTML, CSS and images)孵奶,應(yīng)用可以從客戶端 SDK 里面查詢更新疲酌。CodePush 可以讓應(yīng)用有更多的可確定性,也可以讓你直接接觸用戶群了袁。在修復(fù)一些小問題和添加新特性的時(shí)候朗恳,不需要經(jīng)過二進(jìn)制打包,可以直接推送代碼進(jìn)行實(shí)時(shí)更新早像。
關(guān)于熱更新

React Native 官方并沒有提供熱更新的技術(shù)方案僻肖,但是它是支持熱更新的。

React Native 中的熱更新有點(diǎn)像 App 的版本更新卢鹦,也就是根據(jù)查詢 server 端的版本和手機(jī)端目前 App 的版本進(jìn)行對比臀脏,然后來執(zhí)行是否更新的操作劝堪。

根本原因在于 React Native 的加載啟動(dòng)機(jī)制:React Native 會(huì)將一系列資源打包成js bundle文件,系統(tǒng)加載js bundle文件揉稚,解析并渲染秒啦。所以,React Native熱更新的根本原理就是更換js bundle文件搀玖,并重新加載余境,新的內(nèi)容就完美的展示出來了。

一灌诅。CodePush熱更新組件詳細(xì)接入教程《安裝和RN集成》
1芳来、安裝 CodePush CLI
npm install -g code-push-cli 2、注冊 CodePush賬號(hào) code-push register
這將會(huì)啟動(dòng)瀏覽器猜拾,要求驗(yàn)證Github或微軟帳號(hào)即舌。一旦驗(yàn)證成功,它將創(chuàng)建一個(gè)CodePush帳號(hào)跟你的Github或MSA相連挎袜,并生成一個(gè)訪問密鑰(Access Key)顽聂,然后你可以拷貝/粘貼到CLI(它會(huì)提示你這樣做)
如果沒有自動(dòng)打開瀏覽器,檢查設(shè)置默認(rèn)的瀏覽器

3盯仪、//熱更新平臺(tái)的賬號(hào)信息
register info code-push for android
github username: xmfengwankeji
password: fengwan777
4紊搪、驗(yàn)證我的登錄是否成功
$ code-push login

5、在CodePush服務(wù)器注冊App(不同平臺(tái)使用不同的名字)
添加Android平臺(tái)應(yīng)用;smallred是你app_name
code-push app add <appName> <os> <platform>

如:
$ code-push app add smallred Android react-native

│ Name │ Deployment Key │
│ Production │ FhW9iTw89LOuCywielf8Z9AV_8o-e4b0d9e2-373f-4966-a7e5-a158ec8b9b57 │
│ Staging │ ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57 │

1-如果你的App既有iOS又有Android全景,請為不同平臺(tái)創(chuàng)建單獨(dú)的App耀石;

2-成功,會(huì)返回Deployment Key爸黄。

3-所有新的Apps自動(dòng)會(huì)出現(xiàn)2個(gè)部署環(huán)境:staging代表開發(fā)版的熱更新部署娶牌,用于測試更新;production代表生產(chǎn)版的馆纳。

4-在ios中,將staging的key復(fù)制在info.plist的CodePushDeploymentKey值中
在android中汹桦,復(fù)制在Application的getPackages的CodePush構(gòu)造中鲁驶。
ps:你可以通過code-push deployment ls <app_name> -k命令來查看deployment key。

我們可以輸入如下命令來查看我們剛剛添加的App
$ code-push app list

二舞骆、RN代碼中集成CodePush的SDK
1.在根目錄(項(xiàng)目目錄)執(zhí)行安裝集成的組件react-native-code-push
npm install react-native-code-push --save 安裝完后钥弯,link連接,將Staging中的Deployment Key輸入:ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57 react-native link react-native-code-push
至此Code Push for Android的SDK已經(jīng)集成完成。

2.在android中配置參數(shù)
在 android/app/build.gradle文件里面添如下代碼:
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
然后在/android/settings.gradle中添加如下代碼:
include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

3.運(yùn)行 code-push deployment -k ls <appName>獲取 部署秘鑰督禽。默認(rèn)的部署名是 staging脆霎,所以 部署秘鑰(deployment key ) 就是 staging。
code-push deployment -k ls smallred
如果之前的都配置正確,那這里可以看到Production與Staging的Deployment Key,
將這兩個(gè)key粘貼下來.如果環(huán)境來決定需要用到哪個(gè)key.
在剛開始,肯定需要測試,
那就將Staging對應(yīng)的Deployment Key,替換到下面deployment-key-here的代碼中.
地址:http://www.reibang.com/p/87ccfb795635

4.添加配置狈惫。當(dāng)APP啟動(dòng)時(shí)我們需要讓app向CodePush咨詢JS bundle的所在位置睛蛛,這樣CodePush就可以控制版本。更新 MainApplication.java文件:

public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
protected List<ReactPackage> getPackages() {
// 3. Instantiate an instance of the CodePush runtime and add it to the list of
// existing packages, specifying the right deployment key. If you don't already
// have it, you can run "code-push deployment ls <appName> -k" to retrieve your key.
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new CodePush("ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57", MainApplication.this, BuildConfig.DEBUG),
//new CodePush("deployment-key-here", MainApplication.this, BuildConfig.DEBUG)
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}

關(guān)于deployment-key的設(shè)置

在上述代碼中我們在創(chuàng)建CodePush實(shí)例的時(shí)候需要設(shè)置一個(gè)deployment-key,因?yàn)閐eployment-key分生產(chǎn)環(huán)境與測試環(huán)境兩種,所以建議大家在build.gradle中進(jìn)行設(shè)置。在build.gradle中的設(shè)置方法如下:

打開android/app/build.gradle文件,找到android { buildTypes {} }然后添加如下代碼即可:
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}

    releaseStaging {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'
        ...
    }

    release {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'
        ...
    }
}
...

}
心得:另外,我們也可以將deployment-key存放在local.properties中:

code_push_key_production=FhW9iTw89LOuCywielf8Z9AV_8o-e4b0d9e2-373f-4966-a7e5-a158ec8b9b57
code_push_key_staging=ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57
然后在就可以在android/app/build.gradle可以通過下面方式來引用它了:
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}

    releaseStaging {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_production")+'"'
        ...
    }

    release {
        ...
        buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_staging")+'"'
        ...
    }
}
...

}
在android/app/build.gradle設(shè)置好deployment-key之后呢,我們就可以這樣使用了:
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
...
new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG), // Add/change this line.
...
);
}
5.修改versionName忆肾。
在 android/app/build.gradle中有個(gè) android.defaultConfig.versionName屬性荸频,我們需要把 應(yīng)用版本改成 1.0.0(默認(rèn)是1.0,但是codepush需要三位數(shù))客冈。

android{
defaultConfig{
versionName "1.0.0"
}
}

詳細(xì)的操作在官網(wǎng)demo示例中:
https://github.com/Microsoft/react-native-code-push/blob/master/Examples/CodePushDemoApp/App.js

三旭从。配置Android平臺(tái)《發(fā)布更新》

7、發(fā)布更新RN的bundle到微軟服務(wù)器
CodePush支持兩種發(fā)布更新的方式:
一是通過code-push release-react簡化方式场仲,
二是通過code-push release的復(fù)雜方式和悦。

一簡化方式、命令格式:
code-push release-react <appName> <platform>
如eg:
code-push release-react smallred ios
code-push release-react smallred android
code-push release-react smallred ios --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true
code-push release-react smallred android --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true

[--bundleName <bundleName>] 指明生成JS Bundle的文件名
[--deploymentName <deploymentName>] 部署環(huán)境名:Staging(臨時(shí)環(huán)境)渠缕、Production(生產(chǎn)環(huán)境)
[--description <description>] 更新內(nèi)容描述
[--development <development>] 指明是否要生成一個(gè)非最小化鸽素,開發(fā)的JS bundle文件。默認(rèn)是false褐健,禁用警告提示并且bundle文件是最小化的付鹿。
[--disabled <disabled>] 指明一個(gè)版本更新是否可以被用戶下載。如果沒有指定蚜迅,版本更新是有效的(如:用戶將要下載的那一刻你的應(yīng)用稱為同步)舵匾。如果你想發(fā)布一個(gè)更新但不是立即生效,那么這個(gè)參數(shù)是有價(jià)值的谁不,直到你明確用[補(bǔ)丁]發(fā)布坐梯,當(dāng)你要讓用戶能夠下載(如:公告博客上線)。
[--entryFile <entryFile>] 指明相對應(yīng)用根目錄的路徑入口JavaScript 文件刹帕。
[--mandatory] 更新是否強(qiáng)制性(true吵血、false)
[--sourcemapOutput <sourcemapOutput>] 指明生成的JS bundle 的sourcemap寫入的相對路徑。如果沒有指定偷溺,sourcemaps文件不會(huì)生成蹋辅。
[--targetBinaryVersion <targetBinaryVersion>] app的版本號(hào),如果沒有指定挫掏,默認(rèn)使用Info.plist中的version值
[--rollout <rolloutPercentage>]
指定可以接收這次更新的用戶百分比(在1-100的數(shù)字)如果沒有設(shè)置這個(gè)參數(shù)侦另,它會(huì)設(shè)置為100。

二復(fù)雜方式尉共、生成bundle
發(fā)布更新之前褒傅,需要先把 js打包成 bundle,如:

第一步: 在 工程目錄里面新增 bundles文件:mkdir bundles
第二步: 運(yùn)行命令打包 react-native bundle --platform 平臺(tái) --entry-file 啟動(dòng)文件 --bundle-output 打包js輸出文件 --assets-dest 資源輸出目錄 --dev 是否調(diào)試袄友。
eg:
react-native bundle --platform android --entry-file index.js --bundle-output ./bundles/index.android.bundle --dev false
成功將返回:
Loading dependency graph, done.
bundle: Writing bundle output to: ./bundles/index.android.bundle
bundle: Done writing bundle output
Assets destination folder is not set, skipping...

需要注意的是:
忽略了資源輸出是因?yàn)?輸出資源文件后殿托,會(huì)把bundle文件覆蓋了。
輸出的bundle文件名不叫其他剧蚣,而是 index.android.bundle支竹,是因?yàn)?在debug模式下旋廷,工程讀取的bundle就是叫做 index.android.bundle。
平臺(tái)可以選擇 android 或者 ios唾戚。

發(fā)布更新
打包bundle結(jié)束后柳洋,就可以通過CodePush發(fā)布更新了。在終端輸入
code-push release <應(yīng)用名稱> <Bundles所在目錄> <對應(yīng)的應(yīng)用版本> --deploymentName: 更新環(huán)境 --description: 更新描述 --mandatory: 是否強(qiáng)制更新
eg:
code-push release smallred ./bundles/index.android.bundle 1.1.3 --deploymentName Production --description "1.1.3支持文章緩存叹坦。" --mandatory true
code-push release smallred ./bundles/index.android.bundle 1.0.1 --deploymentName Staging --description "1.0.1支持文章緩存熊镣。" --mandatory true
成功將返回:
Successfully released an update containing the "./bundles/index.android.bundle" file to the "Production" deployment of the "smallred" app.

9、查看發(fā)布的歷史記錄
在終端輸入 code-push deployment history <appName> Staging 可以看到Staging版本更新的時(shí)間募书、描述等等屬性绪囱。
如eg:
code-push deployment history smallred Production
code-push deployment history smallred Staging

部署測試

在應(yīng)用創(chuàng)建時(shí),會(huì)自動(dòng)生成Staging與Production這兩個(gè)環(huán)境.

應(yīng)用在開發(fā)階段,通常都是在Staging下進(jìn)行開發(fā)的,而Production作為生產(chǎn)環(huán)境.
當(dāng)應(yīng)用在開發(fā)階段開發(fā)完畢,可使用code-push promote命令從Staging 遷移到Production中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市莹捡,隨后出現(xiàn)的幾起案子鬼吵,更是在濱河造成了極大的恐慌,老刑警劉巖篮赢,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齿椅,死亡現(xiàn)場離奇詭異,居然都是意外死亡启泣,警方通過查閱死者的電腦和手機(jī)涣脚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寥茫,“玉大人遣蚀,你說我怎么就攤上這事∩闯埽” “怎么了芭梯?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弄喘。 經(jīng)常有香客問我玖喘,道長,這世上最難降的妖魔是什么蘑志? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任芒涡,我火速辦了婚禮,結(jié)果婚禮上卖漫,老公的妹妹穿的比我還像新娘。我一直安慰自己赠群,他們只是感情好羊始,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著查描,像睡著了一般突委。 火紅的嫁衣襯著肌膚如雪柏卤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天匀油,我揣著相機(jī)與錄音缘缚,去河邊找鬼。 笑死敌蚜,一個(gè)胖子當(dāng)著我的面吹牛桥滨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弛车,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼齐媒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纷跛?” 一聲冷哼從身側(cè)響起喻括,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贫奠,沒想到半個(gè)月后唬血,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唤崭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年拷恨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浩姥。...
    茶點(diǎn)故事閱讀 38,711評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挑随,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勒叠,到底是詐尸還是另有隱情兜挨,我是刑警寧澤,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布眯分,位于F島的核電站拌汇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弊决。R本人自食惡果不足惜噪舀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望飘诗。 院中可真熱鬧与倡,春花似錦、人聲如沸昆稿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溉潭。三九已至净响,卻和暖如春少欺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馋贤。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工赞别, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人配乓。 一個(gè)月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓仿滔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扰付。 傳聞我的和親對象是個(gè)殘疾皇子堤撵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內(nèi)容