CodePush中文翻译node
CodePush中文翻译react
安装: npm install -g code-push-cli
ios
注册帐号: code-push register
git
登录: code-push login
github
注销: code-push logout
npm
添加项目: code-push app add [app名称]
react-native
删除项目: code-push app remove [app名称]
xcode
列出帐号下的全部项目: code-push app list
服务器
显示登录的token: code-push access-key ls
app
删除某个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>
在项目目录下, 安装CodePush插件
npm install --save react-native-code-push
引入到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
在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
修改info.plist 添加CodePushDeploymentKey
键值对中的Staging的值,Deployment Key能够经过命令code-push deployment ls appName --displayKeys
进行获取.也可使用$(CODEPUSH_KEY)
来自动适配Production
或Staging
环境, 若是填的是Production的key, 则打的包就是Production
的包, 若是填的是Staging的key, 则打的包就是Staging
的包.
修改info.plist 中 Bundle versions string, short
的值改为三位数字,如1.0.0, 否则会报错
自动打包你的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这个标签版本
若是有发布热更新时 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
当应用从后台返回时
登陆: code-push login
列出帐号下的全部项目: code-push app list
列出应用的部署: code-push deployment ls MyApp
查看部署的历史版本信息: code-push deployment history MyApp Debug
发布版本更新: code-push release-react MyApp ios -d Staging -p ../MyApp/Info.plist --des 'UI调整' -t '1.0.2'
把更新推到另外一个环境: code-push promote QQMProjec Staging Production
关闭某个版本: code-push patch MyApp Staging -l v13 --des '关闭v13' -x true