1. code-push常用命令

deploymentNmae:Debug,Production

  • 安装: npm install -g code-push-cli
  • 注册账号: code-push register
  • 登陆: code-push login
  • 注销: code-push logout
  • 添加项目: code-push app add [app名称]
  • 删除项目: code-push app remove [app名称]
  • 列出账号下的所有项目: code-push app list
  • 显示登陆的token: code-push access-key ls
  • 删除某个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 DEBUGjsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
#elsejsCodeLocation = [CodePush bundleURL];
#endif

4、修改info.plist 添加CodePushDeploymentKey键值对中的Staging的值,Deployment Key可以通过命令code-push deployment ls appName --displayKeys进行获取.也可以使用$(CODEPUSH_KEY)来自动适配Production或Staging环境, 如果填的是Production的key, 则打的包就是Production的包, 如果填的是Staging的key, 则打的包就是Staging的包.

5、修改info.plist 中 Bundle versions string, short的值改成三位数字,如1.0.0, 不然会报错

3. 发布更新

  • 自动打包发布

自动打包你的js和资源文件成bundle并且上传发布到CodePush的服务器(注意: 默认是Staging环境):

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 false2. 发布更新
发布命令:
// code-push release <应用名称> <Bundles所在目录> <对应的应用版本> --deploymentName 更新环境 --description 更新描述 --mandatory 是否强制更新
例如:
code-push release HybridDemo ./bundles/main.bundle 1.0.0 --deploymentName Production --description "第四次更新" --mandatory true测试版的发布不能搞到正式版,promote命令 目前理解就是把测试环境copy到正式环境

第二种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这个标签版本当部署的版本不同时,不能跨版本回滚。
例如:CodePush历史版本中为2.10.1,此时发布2.10.2版本。
当从2.10.2发起回滚操作回到2.10.1时,是不可行的。

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

注意:
在关联项目登录的时候,有时候已经登录其他账号,需要查看登录账号或者退出的话
进入reactnative 项目根目录执行命令查看当前是否登录,先保证没有别的账号正在登录

code-push whoami

如果报错如下,表示没有登录

[Error]  You are not currently logged in. Run the 'code-push login' command to authenticate with the CodePush server.

如果没有报错 且显示邮箱账号,则表示已经登录账户,我们要先注销当前账号

code-push logout

成功注销后执行登录指令,登录服务器

code-push login http://localhost:8080
参考文章:
https://segmentfault.com/a/1190000008591456
https://blog.csdn.net/zhuchuanwu2013/article/details/51262718
https://www.jianshu.com/p/51b36ed583ef

code-push常用命令相关推荐

  1. code push 常用命令

    // 账户相关 code-push login 登陆 code-push loout 注销 code-push access-key ls 列出登陆的token code-push access-ke ...

  2. git push 的符号笔有什么用_Git 标签(tag)作用、分支区别及常用命令

    Git 跟其它版本控制系统一样,可以对某一时间点上的版本打上标签.在做版本发布的时候经常会用到.尽管 Git 只实现了一种标签对象,但是有两种基本的标签类型,通常称为轻量级的(lightweight) ...

  3. git常用命令之Push

    9. Push 1.将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反): git push origin <本地分支名>:<远程分支名> ...

  4. Docker初学3:Docker的常用命令

    Docker的常用命令 帮助命令 帮助命令可以在我们遇到不懂的命令时帮助我们去了解它们怎么使用. docker version # 显示 Docker 版本信息. docker info # 显示 D ...

  5. docker删除es数据_Docker的常用命令

    Docker的常用命令 docker version#显示docker的版本信息 docker info#显示docker的系统信息,包括镜像和容器的数量 docker --help#docker帮助 ...

  6. linux删除软件包git的命令,linux系统安装git及git常用命令

    1 安装GIT 代码如下: $  sudo aptitude install git $  sudo aptitude install git-doc git-svn git-email git-gu ...

  7. ADB原理,Wi-Fi连接,常用命令及拓展

    Android 开发笔记 onGithub 文章多处链接需要科学上网 本文按顺序主要讲解了ADB的原理,使用Wi-Fi连接设备,ADB常用命令,在Java代码中执行shell命令,使用ddmlib进行 ...

  8. Git 基础 —— 常用命令

    Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 git init 创建 Git ...

  9. git 常用命令(含删除文件)

    git 常用命令(含删除文件) Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库: ...

  10. git ssh拉取代码_Git 常用命令及应用这一篇就够了(新手向)

    1. git 常用命令 1.1 常用命令 # 初始化git git init # 克隆项目 git clone [url] # 显示文件状态 git status -s # 添加文件到暂存区 git ...

最新文章

  1. 我们需要现在就进入LTE时代
  2. 过期页面SEO该如何进行处理?
  3. Win server 2012 R2 文件服务器--(三)配额限制
  4. VS2012 生成项目报 Lc.exe已退出,代码为-1 错误
  5. Python学习之==第三方模块的安装、模块导入
  6. ReportViewer教程(2)-添加空报表Report1.rdlc
  7. [导入] 用java把页面日期控件写出来
  8. 算法小结——qsort函数
  9. 使用shell脚本 控制 python挂掉后自动重启
  10. 联手寒武纪发布AI推理服务器,推出AI管理平台,中科曙光也All in AI
  11. do{} while(0)
  12. 使用boost线程池很好的例子
  13. 转:L298N的原理图以及程序实现
  14. 苹果6s强制删除id锁_苹果ID锁安全神话破灭!2分钟就能解锁
  15. [软件工程] 数据字典
  16. 计算机等级考试四级信息安全工程师
  17. 用java计算三角形周长_三角形求周长和面积完整的解决方案
  18. 自然语言处理领域介绍
  19. jpg怎么转换成pdf文档
  20. UCSD异常检测数据集

热门文章

  1. 增速放缓、对手打劫,顺丰雄风不再?
  2. Baxter实战 baxter与moveit!
  3. 工业互联网平台激发经济高质量发展新动能
  4. 关于window10授时失败问题
  5. flickr 照片自动保存_Flickr照片栏画廊
  6. vue中获取获取当前城市地址_Vue中获取当前定位城市名
  7. 斐波拉契(Fibonacci)数列
  8. 成都短期学计算机,成都短期学电脑办公软件哪个好
  9. 如何打开pkl文件,pkl是什么类型的文件?
  10. 4.操作卡片和OBU的指令以及流程