描述
rnpack是一个rn项目的打包构建工具,支持ios和android渠道提交,支持自建服务的增量更新
v1.2.2
新增支持android
v1.2.1
新增支持新版的xocdebuild
设计功能
命令工具安装
npm install rnpack-cli -g
rnpack工具使用
-
打包android
- 编译项目
- rnpack buildApk --buildType {alpha|beta|release} --apkName {项目名称}
- 上传
- rnpack uploadApk --buildType {alpha|beta|release} --file {文件路径}
- 发布到fir.im
- rnpack firApk --token {fir.im的token} --apkName {项目名称} --buildType {alpha|beta|release} --file {文件路径}
- 上传和发布到fir.im
- rnpack publishApkFile --token {fir.im的token} --apkName {项目名称} --buildType {alpha|beta|release} --file {文件路径}
- 总和以上的操作:编译 上传 发布
- rnpack publishApk --token {fir.im的token} --buildType {alpha|beta|release} --apkName {项目名称}
-
打包ios
- 打包项目
- rnpack archiveIpa --configuration {Alpha|Beta|Release} --scheme {项目名称} --provisioningProfile {证书配置}
- 上传和发布到fir.im
- rnpack publishIpaFile --token {fir.im的token} --configuration {Alpha|Beta|Release} --scheme {项目名称} --file {文件路径}
- 总和以上的操作:编译 上传 发布
- rnpack publishIpa --token {fir.im的token} --configuration {Alpha|Beta|Release} --scheme {项目名称} --provisioningProfile {证书配置}
-
用户命令
- 登陆(登陆成功后,会生成.rnpack_token的文件)
- rnpack login
- 登出
- rnpack logout
- 登陆用户信息
- rnpack me
-
项目命令
- 创建
- createApp
- 删除
- deleteApp
- 列出
- apps
- 选择(会生成rnpack_app.json的文件,保存选择的项目key)
- selectApp
- 设置服务地址(会生成rnpack_app.json的文件,保存设置的服务器)
- setHost
-
打包热更新命令
- 发布热更新版本
- bundle
- 比对差异
- diff
- 与apk文件的bundle比对差异
- diffFromApk
- 与ipa文件的bundle比对差异
- diffFromIpa
-
热更新与大版本的关联管理
- 用文件发布热更新
- publish
- 列出所有热更新
- versions
- 更新关联
- update
-
1024图片直接替换ios和andorid项目图标,android图片支持圆角转换
- 尚未完成
客户端使用
npm install react-native-pack --save
工具客户端库:
-
api
- Env {alpha|beta|release} 打包环境变量
- packageVersion 大版本号
- currentBundle 热更新版本号
- currentVersion 热更新hash值
- isFirstTime 是否是热更新后的首次打开
- isRolledBack 是否是热更新失败后的首次打开
- getHost 热更新服务地址
- checkUpdate 检查更新
- downloadApk 下载android更新包
- downloadUpdate 热更新
- switchVersion 切换版本,立即执行
- switchVersionLater 切换版本,下次执行
- markSuccess 更新成功标记
-
示例代码
import {Platform, Alert, Linking} from "react-native";
import {checkUpdate, packageVersion, currentVersion, downloadUpdate, switchVersion, Env, downloadApk} from "react-native-pack";
import _updateConfig from "../../rnpack_app.json";
const {appKey} = _updateConfig[Platform.OS];
const doUpdate = info => {
console.log("doUpdate info:", info);
downloadUpdate(info).then(hash => {
console.log("doUpdate 应用更新");
//不再提示,默认下次启动应用更新
// Alert.alert('提示', '检查到新的版本'+info.name+',是否重启应用?', [
// {text: '立即重启', onPress: ()=>{switchVersion(hash);}},
// {text: '下次启动时应用更新', onPress: ()=>{switchVersionLater(hash);}},
// ]);
switchVersion(info.hash, info.name).then((data)=>{
console.log("switchVersion hash:", info.hash);
console.log("switchVersion name:", info.name);
}).catch((err)=>{
console.log("switchVersion err:", err);
});
}).catch(err => {
Alert.alert('提示', '更新失败.');
console.log("doUpdate 更新失败:", err);
});
};
export const checkVersionUpdate = (isLaunch) => {
console.log("checkVersionUpdate");
checkUpdate(appKey, Env).then(info => {
console.log("check info:", info);
if (info.type == "Package") {
if(Platform.OS == "ios"){
let url = info.opt.url || "https://itunes.apple.com/cn/app/wan-wu-she/id1156373629?l=en&mt=8";
Alert.alert('提示', '您的应用版本已更新,请前往应用商店下载新的版本',
[{
text: '确定',
onPress: ()=>{
Linking.openURL(url);
}
}],
{cancelable:false}
);
}else{
Alert.alert('提示', '您的应用版本已更新,是否更新?',
[
{
text: '取消', onPress: () => {}
},
{
text: '确定', onPress: () => {
downloadApk(info.data.url, info.data.hash).then((res)=>{
console.log("downloadApk res:", res);
}).catch((err)=>{
console.log("downloadApk err:", err);
})
}
}
],
{
cancelable: false
}
);
}
} else if (info.type == "Bundle") {
doUpdate(info.updateInfo);
} else {
// Alert.alert('提示', '您的应用版本已是最新.');
console.log("您的应用版本已是最新:", currentVersion + " packageVersion:" + packageVersion);
if(!isLaunch){
utils.toast("已经是最新版本");
}
}
}).catch(err => {
//Alert.alert('提示', '检测更新失败.');
console.log("checkVersionUpdate 检测更新失败 err:", err);
});
};
工具服务端:
- 存储android和ios的各类版本{alpha|beta|release}
- 各个版本的增量更新包
- 支持diff更新包
- 支持阿里oss