东方耀 发表于 2016-8-16 22:17:03

66、手把手教React Native实战之热更新部署-CodePush-适配IOS_视频



66、手把手教React Native实战之热更新部署-CodePush-适配IOS


视频下载地址【回复本帖可见】:**** Hidden Message *****


##CodePush简介

CodePush是微软提供的一套用于热更新 React Native 和 Cordova 应用的服务。CodePush 是提供给 React Native 和 Cordova 开发者直接部署移动应用更新给用户设备的云服务。CodePush 作为一个中央仓库,开发者可以推送更新 (JS, HTML, CSS and images),应用可以从客户端 SDK 里面查询更新。CodePush 可以让应用有更多的可确定性,也可以让你直接接触用户群。在修复一些小问题和添加新特性的时候,不需要经过二进制打包,可以直接推送代码进行实时更新。

##安装CodePush客户端与注册账号

npm install -g code-push-cli

code-push -v查看版本

code-push register 注册账号 授权登陆并得到access key

code-push login 登陆

code-push logout 注销

code-push access-key ls 列出登陆的token

code-push access-key rm <accessKye> 删除某个 access-key

##往CodePush服务器端添加app

code-push app add

code-push app remove

code-push app rename

code-push app list 列出账号下的所有app

注意:一个app名字对应两个部署环境:生产环境Production模拟或演示环境Staging

##IOS集成CodePush、打包、发布更新

参考:https://github.com/Microsoft/react-native-code-push

npm install --save react-native-code-push@latest

查询部署环境的key也是一个app对应两个:(Deployment Key)

code-push deployment ls <appName> -k

RN的v0.27+则:react-native link react-native-code-push 否则:rnpm link react-native-code-push

编译一下,看是否成功? 查看Info.plist里是否有CodePushDeploymentKey

Plugin Usage(使用CodePush更新策略)

import codePush from "react-native-code-push";

MyApp = codePush(MyApp);

MyApp = codePush(codePushOptions)(MyApp);

Redux Saga for CodePush:react-native-code-push-saga

Releasing Updates发布更新:code-push release-react <appName> <platform> 自动打包你的js和资源文件成bundle并且上传发布到CodePush的服务器

也可以自己打包:react-native bundle --platform 平台 --entry-file 启动文件 --bundle-output 打包js输出文件 --assets-dest 资源输出目录 --dev 是否调试

例如:react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --dev false

也可以自己上传:code-push release <应用名称> <Bundles所在目录> <对应的应用版本> --deploymentName: 更新环境 --description: 更新描述--mandatory: 是否强制更新

例如:code-push release CodePushDemo ./bundles/index.android.bundle 1.2.0 --deploymentName Staging--description "1.支持文章缓存。" --mandatory true

##Multi-Deployment Testing 多环境部署测试的步骤

客户端的回滚机制可以导致服务器端的回滚:code-push rollback

1.发布更新到Staging环境:code-push release-react <appName> <platform>

2.运行Staging版app,同步更新,验证其是否正常工作

3.从演示环境推进到生产环境:code-push promote

4.运行Production版app,同步更新,验证其是否正常工作

我们注意到第2步与第4步,需要生成两种app,其实是麻烦的,我们可以整合,但是却是分平台的,这节课以IOS为例

Add User-Defined Setting

Info.plist   CodePushDeploymentKey$(CODEPUSH_KEY)

配置之后,当你调试的时候更新用到的是Staging的key,当签名发正式包的时候用的就是Production的Key


CodePush插件是由两部分组成:1、js模块2、原生api

下面列出CodePush一些常用的用法,你可以选择一个或者组合使用:

1.Silent sync on app start

2.Silent sync everytime the app resumes

3.Interactive

4.Log/display progress

// Make use of the event hooks to keep track of
// the different stages of the sync process.
class MyApp extends Component {
    codePushStatusDidChange(status) {
      switch(syncStatus) {
            case codePush.SyncStatus.CHECKING_FOR_UPDATE:
                console.log("Checking for updates.");
                break;
            case codePush.SyncStatus.DOWNLOADING_PACKAGE:
                console.log("Downloading package.");
                break;
            case codePush.SyncStatus.INSTALLING_UPDATE:
                console.log("Installing update.");
                break;
            case codePush.SyncStatus.UP_TO_DATE:
                console.log("Installing update.");
                break;
            case codePush.SyncStatus.UPDATE_INSTALLED:
                console.log("Update installed.");
                break;
      }
    }

    codePushDownloadDidProgress(progress) {
      console.log(progess.receivedBytes + " of " + progress.totalBytes + " received.");
    }
}
MyApp = codePush(MyApp);

CodePushOptions选项对象可以自定义

报错:The uploaded package is identical to the contents of the specified deployment's current release表示:已经存在与这次上传完全一样的bundle(对应一个版本有两个bundle的md5完全一样),那么CodePush会拒绝此次更新。

NOTE: While Apple's developer agreement fully allows performing over-the-air updates of JavaScript and assets (which is what enables CodePush!), it is against their policy for an app to display an update prompt. Because of this, we recommend that App Store-distributed apps don't enable the updateDialog option when calling sync, whereas Google Play and internally distributed apps (e.g. Enterprise, Fabric, HockeyApp) can choose to enable/customize it.

看调试效果:程序员视角、终端用户视角

陈驰 发表于 2016-8-16 22:26:57

学习~~~~~~~~~~~~~

jiajiecn 发表于 2016-8-16 22:40:20

66集的视频下载

sbb 发表于 2016-8-16 23:01:32

学习下学习下学习下学习下

LL101SS 发表于 2016-8-17 00:00:13

mark mark mark

gzm1211 发表于 2016-8-17 00:33:11

6666666666666

stevev 发表于 2016-8-17 01:01:36

谢谢老师分享

linna 发表于 2016-8-17 01:08:06

加油~~~~~~

邓加鹏 发表于 2016-8-17 01:31:01

访问密码

豆豆向前冲 发表于 2016-8-17 02:31:47

赶快来!!!!!!!!!!!!!!!!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 66、手把手教React Native实战之热更新部署-CodePush-适配IOS_视频