如何发布并保持安装的React Native应用的多个版本?

时间:2019-02-16 23:49:38

标签: react-native google-play app-store

我需要如何处理某事的建议:

我有一个即将发布到App Store和Google Play的应用程序,我想找到一种方法来克隆具有较少功能的该应用程序,此克隆旨在为用户带来该应用程序的品味并让公司的业务员演示它,我也想将两个应用程序都安装在同一设备上,因此对于业务员,他们可以通过此“演示应用程序”进行演示,也可以将真实的应用程序用于自己的目的。

我知道我只能在TestFlight和Google Play上拥有一个Beta用户组,但这需要我注册这些用户或给他们提供链接以注册为Beta,并且不可能同时安装这两个应用程序。

我想使这个“演示应用程序”可以从商店下载,它将具有与真实应用程序不同的API调用,不同的图标等。  但我希望避免维护和复制从“生产”应用程序到“演示”应用程序的所有更改。

我认为的选项:创建一个分支并将应用重命名为新的签名,名称,图标,因此我只需要始终从origin / master分支中获取diff并将其发布到商店即可,但是它没有没用,因为xcode会破坏应用程序并在执行时给我随机错误。

希望能收到有关此问题的想法和解决方法。

2 个答案:

答案 0 :(得分:1)

如果您希望他们从商店下载应用程序,则应用程序必须具有不同的包/应用程序ID

我最近从事一个react native项目,实际上我们在单个分支中处理过stagingproduction应用程序。尽管我们没有在Play商店上发布staging应用,但我们使用Google drive进行共享,并且由于两个应用都有不同的软件包,因此可以将它们安装在一起。

要更改applicationId,您需要在build.gradle中应用程序的Android文件中进行更改。只需在制作.demo的末尾添加.anythingapplicationId。并根据需要更改api端点,应用名称和图标。因此,在一段时间后手动进行此操作变得很麻烦,因为您必须来回更改。因此,我们在构建shell script之前编写了apk进行所有这些更改。

我们实际上不需要在iPhone上安装2个版本,因此我们对此没有做任何事情。另外,我对iOS开发并不熟悉,但是我猜过程会有些相似。

现在,我们不必跟踪从一个分支到另一个分支的更改。 Setup(Shell scripts)会花费一些,但值得。

答案 1 :(得分:1)

我目前可以安装我开发的应用程序的四个不同版本。解决方案的确取决于您的设置,但是目前这是我的操作方法 1 。这不是唯一的方法,但对我有用,我发现此问题导致的问题很小,以至于它并没有真正打扰我。

iOS

iOS的最简单解决方案是使用不同的Bundle Identifiers。这要求您具有不同的配置文件。每个开发环境的一个配置文件(如果您想将它们放在设备上进行测试,以远离开发机器,则它们必须是 distribution 配置文件)和一个配置文件以提交到App Store。

Xcode能够使用不同的配置文件管理不同的环境,但是这在使用CocoaPods时给我造成了重大问题,最终我不得不停止Xcode的管理。

我现在要做的是将脚本添加到工作流 2 中,该脚本将为环境强制使用正确的捆绑包标识符。如果要在本地构建,只需手动更改Bundle Identifier和供应配置文件(只需一秒钟)

Android

对于Android,我使用内置的flavors来管理不同的环境。设置起来真的很容易。在我的app/build.gradle中添加了以下内容:

flavorDimensions "version"
productFlavors {
    dev {
        dimension "version"
        applicationIdSuffix ".dev"
    }
    uat {
        dimension "version"
        applicationIdSuffix ".uat"
    }
    staging {
        dimension "version"
        applicationIdSuffix ".staging"
    }
    prod {
        dimension "version"
        applicationIdSuffix ".prod"
    }
}

这会在构建中添加applicationIdSuffix,这意味着您可以在设备上安装多种类型。使用口味是一种管理Android应用程序的非常有效的方法。您可以阅读有关使用口味here

的更多信息

需要注意的重要一点是,使用调味品确实会改变您运行应用程序的方式。

我现在不得不使用react-native run-android,而不是使用react-native run-android --variant=devDebug

当我要构建它而不是使用./gradlew assembleRelease时,我必须使用./gradlew assembledevRelease(您必须为所使用的每个味道进行更改)

React-native中还有一个小错误,当使用--variant标志时,它不会启动应用程序,因此您只需单击设备上的图标即可。但是,如果您从Android Studio启动它,它将正常启动。

因此,如果您从Android Studio启动应用程序,或将适当的脚本添加到package.json,这些问题就会消失。


1 我没有将Expo用于生产应用程序,仅将其用于原型制作,因此这些解决方案适用于完整的react-native应用程序具有访问权限

2 我使用Bitrise构建我的应用程序,因此很容易添加bash脚本或类似于构建过程的文件。