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