从十二因素应用程序中汲取灵感:V. 构建、发布、运行,我正在努力更新我们的 CI/CD 管道,考虑到这三个不同的步骤,用于使用 react-native-web 构建的应用程序。
具体来说,我想:
- 构建:为每个平台(Web,Android,ios(生成与环境无关的代码工件
- 发布:获取工件和配置文件(API URL、API 密钥、调试设置等(,并发布到每个平台
这对于网络来说是微不足道的,这就是十二因素应用程序所想到的。我的问题是如何在移动平台上读取配置文件,以及如何将其与 react-native-web 构建工件合并?我的工件是否需要包含所有源代码和依赖项,以便我可以在发布时拉入配置并构建?
理想情况下,每个工件都包含为每个平台编译的代码,这些代码以某种方式知道如何拉入配置文件并对其进行处理。下一个最好的方法是为每个平台提供源代码,我可以在发布时使用配置文件进行编译。第三好的是有一种方法在发布时为每个发行版提供足够的信息,以便它可以在运行时请求配置。
完全披露,我对构建和部署移动应用程序一无所知,所以如果有明显的解决方案,我深表歉意!
这与Android类似。创建构建二进制文件后,它是不可变的。 所以不幸的是,这否定了选项 #1。一旦我们构建了二进制文件,我们就不能对它做任何其他事情。
我认为对于反应原生选项二是最好的方法。 从本质上讲,一旦您解决了配置所需的内容,就需要在发布时构建应用程序。这避免了在选项 #3 中运行时加载内容的任何开销,并且仍然与 Twelve Factor 很好地匹配。你仍将拥有与发布类型相同的配置匹配的移动二进制文件。
对于实际读取这些值,您只需将配置文件放入项目的根目录中,我们可以帮助设置以提取它们。 如果您愿意,我很乐意讨论这些细节。
更新:
iOS所做的任何事情我们都可以做(几乎一样(
当前的构建工具将所有代码编译为字节码classes.dex
并将所有资源压缩为resrouces.arc
但res/raw
保持不变。 这为我们提供了一个注入文件的地方。 从那里,应用程序将能够在运行时读取和分析。
对于 iOS,构建和(非应用商店(发布过程在高级别上的工作方式如下:
- 在 Xcode 中存档您的项目,这将产生
.xcarchive
工件。 - 导出对
.ipa
文件进行签名和生成的存档。 - 要么自己托管此
.ipa
文件(带有一些额外的元数据文件(,要么将其上传到 HockeyApp 等服务进行分发。
有几种方法可以在 Xcode 项目中管理 config。一种相当常见且直接的方法是使用info.plist
文件来存储自定义键和值。然后,应用可以在运行时查找并使用这些值。
在您描述的场景中,听起来您希望能够在步骤 2 之后但在步骤 3 之前注入特定的配置值。幸运的是,可以提取在步骤 2 中生成的.ipa
文件,这将显示一个包含.app
文件的Payload
文件夹。可以检查此文件,在内部您将看到该应用程序的Info.plist
。修改此文件将允许注入要设置的任何配置值。
这将节省在 Xcode 项目中管理配置的需要,并为应用程序的每个配置创建单独的存档。但是,这不能解决的是步骤3。您仍然需要单独分发每个已配置的.ipa
文件。