Norvell's Public Machinations

    react-native-pack

    1.2.2 • Public • Published

    描述

    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

    Install

    npm i react-native-pack

    DownloadsWeekly Downloads

    11

    Version

    1.2.2

    License

    MIT

    Unpacked Size

    980 kB

    Total Files

    104

    Last publish

    Collaborators

    • lijinchao2007