全面了解React Native CodePush

一、CodePush 回滚

1、如果在CodePush发布后发现某个版本存在问题,我们可以使用CodePush回滚功能。
2、在回滚前,需要先生成新版本发布,将有问题的版本下线。

//生成新版本发布
code-push release-react MyApp ios -d production
//将有问题的版本下线
code-push promote MyApp-OldProduction ios -r Production
//回滚到上一个版本
code-push rollback MyApp ios Production

3、回滚成功后,用户会强制离线,并且,当他们再次打开应用时,将看到指定版本的更新提示。如果你想在回滚时保留部分用户的更新,请使用–targetBinaryVersion参数,例如: –targetBinaryVersion 1.0.0

二、CodePush 更新没效果

1、如果在发布应用更新后用户并未收到更新,这个问题通常是由以下原因导致的:
– 应用安装方式有误,例如在应用安装时未给予正确的访问权限;
– 对于已签名和已发布的应用,应用的版本号及签名存在问题;
– 应用使用了未发布的更新版本;
– CodePush服务无法连接。

2、如果是随机的更新没有生效,可以试试重启设备或者清空缓存。

三、CodePush 如何打包

1、在使用React Native CodePush时,我们需要对应用进行打包,示例如下:

//进行生产环境的打包
react-native bundle --platform ios --entry-file index.ios.js --bundle-output ./ios/main.jsbundle --dev false

2、打包生成的main.jsbundle文件需要在本地引用。为了方便操作,我们可以在Xcode中的Build Phases选项卡下添加一个Run Script,示例如下:

    # 在运行前先清空之前的构建生成目录
    rm -rf "${SRCROOT}/../CodePush"
    # 执行 react-native 命令生成JsBundle文件到指定目录
    react-native bundle --platform ios --entry-file index.ios.js --bundle-output "${SRCROOT}/../CodePush/main.jsbundle" --dev false --assets-dest "${SRCROOT}/../"

    # 删除文件中字符串中的空格
    sed -i "" 's/ *$//g' "${SRCROOT}/../CodePush/main.jsbundle"

    # 验证是否存在文件
    if [ ! -f "${SRCROOT}/../CodePush/main.jsbundle" ]
    then
    echo "main.jsbundle not found!"
    exit 1
    else
    echo "main.jsbundle is found."
    fi

3、最后,在Xcode中将链接的JavaScript库指向main.jsbundle即可。

四、CodePush 服务迁移

1、如果你想从一个CodePush服务迁移到另一个CodePush服务,可以参考以下步骤:
– 在第二个CodePush服务中新建应用,并将新应用的名称在原先应用的配置文件中替换;
– 停止第一个CodePush服务的向应用推送更新,等所有设备轮询到新应用名称后,开始在第二个CodePush服务中发布更新。
2、在此过程中,用户需要重新下载应用,或者检查更新从第二个服务中获取更新。

五、CodePush 苹果上架审核

1、如果使用了CodePush,请在苹果上架审核中填写以下说明:
– 该应用使用了Microsoft App Center CodePush移动应用更新;
– App Store Review Guidelines规定,所有应用程序都必须由苹果公司直接审批,并且不能在应用内部进行部分更新(指软件的核心功能)。
2、当你成功提交应用后,更新内容将会弹出。如果你需要更新的是应用的核心功能,苹果会要求你进行重新提交审核。不过,CodePush更新不会涉及核心功能,所以能够通过审核。

六、CodePush 更新ram-bundle

1、在发布时,需要将生产环境下JS代码包压缩成一个单一的文件。您可以通过将ram-bundle忽略选项添加到发布脚本中,来禁用此功能。

//忽略打包
code-push release-react MyApp ios --disable-delta --dev false --pre-json {\"buildNumber\": \"$(theme_version)\"} --description "Updating MyApp to version $$(theme_version)" -t [email list]

2、这将禁用使用IncDelta更新生产应用程序时额外的ODR网络请求。

七、CodePush 苹果热更新审核

1、苹果热更新审核需要使用CodePush的“与源文件比较”功能,并将所有JS代码打包到一个文件中。
2、使用以下命令对应用程序进行打包并在发布时禁用增量更新。

//忽略增量更新,更新全部JS文件
code-push release-react MyApp ios --disable-delta --dev false --pre-json {\"buildNumber\": \"$(theme_version)\"} --description "Updating MyApp to version $$(theme_version)" -t [email list]

3、如果您没有像上面这样,用–disable-delta标记禁用增量更新,则热更新审核将不会因为增量更新失败而被阻止。

八、CodePush 升级之后路径不见了

1、如果你在应用升级后出现路径不见(path not found)的错误,请确保协调好Incremental更新和JSBundleURI之间的关系,确保都在应用的设置中反映。
2、可以使用下面的代码获取BundleURL:

import { NativeModules } from 'react-native';
const { CodePush } = NativeModules;
CodePush.getConfiguration((error, config) => {
    console.log(config);
});

3、如果以上方法无法解决问题,请考虑完全升级你的应用程序。如果你确信你的应用程序已经完全更新了,但仍有路径不见的错误,请检查网络问题,确保可以下载并加载应用程序资源。

九、CodePush 命令

1、以下是CodePush常用命令列表:
– code-push app add MyApp ios react-native:添加名为MyApp的React Native应用程序以支持CodePush,平台为iOS。
– code-push deployment add MyApp Production:在名为MyApp的应用程序中添加名为Production的自定义部署(默认只有Staging和Production)。
– code-push release-react MyApp ios:将应用程序版本发布到CodePush服务中,以便可以向设备上的用户进行推送。
– code-push promote MyApp-OldProduction ios -r Production:将名为MyApp-OldProduction的部署“升级”为名为Production的生产部署。尽管它是历史上生产的一个版本,但您无需重新提交应用发行版即可获得它。需要注意的是,只有活动(尤其是正在使用生产编译和签名的应用程序)的Production部署才会受此操作的影响。
– code-push rollback MyApp ios Production:回滚到上一个部署的版本。
– code-push access-key ls:列出所有可用的部署密钥。
– code-push access-key add [KeyName]:添加名为[KeyName]的部署密钥。
2、CodePush还有许多其他标志,详情请参阅CodePush官方文档。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/238944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:13
下一篇 2024-12-12 12:14

相关推荐

  • @uiw/react-amap介绍

    本文将详细阐述@uiw/react-amap的使用方法和参数配置,以及如何在React应用中集成高德地图组件。 一、@uiw/react-amap简介 @uiw/react-ama…

    编程 2025-04-29
  • Python应用程序的全面指南

    Python是一种功能强大而简单易学的编程语言,适用于多种应用场景。本篇文章将从多个方面介绍Python如何应用于开发应用程序。 一、Web应用程序 目前,基于Python的Web…

    编程 2025-04-29
  • Python zscore函数全面解析

    本文将介绍什么是zscore函数,它在数据分析中的作用以及如何使用Python实现zscore函数,为读者提供全面的指导。 一、zscore函数的概念 zscore函数是一种用于标…

    编程 2025-04-29
  • 全面解读数据属性r/w

    数据属性r/w是指数据属性的可读/可写性,它在程序设计中扮演着非常重要的角色。下面我们从多个方面对数据属性r/w进行详细的阐述。 一、r/w的概念 数据属性r/w即指数据属性的可读…

    编程 2025-04-29
  • Python计算机程序代码全面介绍

    本文将从多个方面对Python计算机程序代码进行详细介绍,包括基础语法、数据类型、控制语句、函数、模块及面向对象编程等。 一、基础语法 Python是一种解释型、面向对象、动态数据…

    编程 2025-04-29
  • Matlab二值图像全面解析

    本文将全面介绍Matlab二值图像的相关知识,包括二值图像的基本原理、如何对二值图像进行处理、如何从二值图像中提取信息等等。通过本文的学习,你将能够掌握Matlab二值图像的基本操…

    编程 2025-04-28
  • 疯狂Python讲义的全面掌握与实践

    本文将从多个方面对疯狂Python讲义进行详细的阐述,帮助读者全面了解Python编程,掌握疯狂Python讲义的实现方法。 一、Python基础语法 Python基础语法是学习P…

    编程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常见的一个概念,是我们在编程中经常用到的一个变量类型。Python是一门强类型语言,即每个变量都有一个对应的类型,不能无限制地进行类型间转换。在本篇…

    编程 2025-04-28
  • Zookeeper ACL 用户 anyone 全面解析

    本文将从以下几个方面对Zookeeper ACL中的用户anyone进行全面的解析,并为读者提供相关的示例代码。 一、anyone 的作用是什么? 在Zookeeper中,anyo…

    编程 2025-04-28
  • Switchlight的全面解析

    Switchlight是一个高效的轻量级Web框架,为开发者提供了简单易用的API和丰富的工具,可以快速构建Web应用程序。在本文中,我们将从多个方面阐述Switchlight的特…

    编程 2025-04-28

发表回复

登录后才能评论