react-native - 如何发布和保持安装的 React Native 应用程序的多个版本?
问题描述
我需要关于如何处理某事的建议:
我有一个很快将发布到 App Store 和 Google Play 的应用程序,我想找到一种方法来克隆这个应用程序,它的功能较少,这个克隆是为了让用户体验这个应用程序,也为了公司的推销员来演示它,我也想将两个应用程序安装在同一台设备上,所以在推销员的情况下,他们可以用这个“演示应用程序”进行演示,也可以将真实应用程序用于自己的目的.
我知道我可以在 TestFlight 和 Google Play 上拥有一个 beta 用户组,但这需要我注册这些用户或给他们一个链接以注册为 beta,并且不可能同时安装这两个应用程序。
我想让这个“演示应用程序”可以从商店下载,它会有来自真实应用程序的不同 API 调用、不同的图标等......但我想避免维护和复制“生产”应用程序到“演示”应用程序。
我想到的选项:创建一个分支并将应用程序重命名为新的签名、名称、图标,所以我只需要始终从 origin/master 分支中提取差异并将其发布到商店,但它没有用,因为 xcode 会破坏应用程序并在我执行此操作时给我随机错误。
我很高兴收到有关此的想法和解决方法。
解决方案
我目前可以安装我开发的应用程序的四个不同版本。解决方案实际上取决于您的设置,但目前我是这样做的1。这不是唯一的方法,但它对我有用,我发现这种设置导致的问题非常小,以至于它并没有真正打扰我。
iOS
最简单的解决方案iOS
是使用不同的Bundle Identifiers
. 这要求您拥有不同的配置文件。每个开发环境都有一个配置文件(如果您想将它们放在设备上以便在远离开发机器的地方进行测试,它们需要是分发配置文件)和一个用于提交到 App Store 的配置文件。
Xcode 能够使用不同的配置文件管理不同的环境,但是这给我在使用 CocoaPods 时带来了重大问题,我最终不得不阻止 Xcode 管理它。
我现在要做的是在我的工作流2中添加一个脚本,该脚本强制为环境提供正确的 Bundle Identifier。如果我想在本地构建,我只需手动更改 Bundle Identifier 和配置文件(只需要一秒钟)
安卓
因为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 应用程序的一种非常强大的方法。您可以在此处阅读有关使用风味的更多信息
需要注意的重要一点是,使用风味确实会改变您运行应用程序的方式。
而不是使用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 脚本或类似的构建过程。
推荐阅读
- sql-server-2008-r2 - 为什么我们不能在 SQL Server 中查看已删除的表
- browser - 隐藏式字幕轨道不适用于所有浏览器
- selenium - 自定义 /etc/hosts 文件上的 docker-selenium ?
- python - 这里继承合适吗?
- javascript - 将点击事件绑定到 Javascript 函数
- android - 尽管不在布局中,但仍在创建片段
- vba - 如何找出使用 VBA 写入 Excel 单元格时出现错误的原因?
- docker - CSV 数据集配置 - Jmeter Docker
- amazon-web-services - AWS Fargate ALB DNS 未解析
- android-studio - Android Studio 3.3 缺少喷气背包创建选项