使用配置文件释放移动(React Native)工件

时间:2018-05-22 01:38:47

标签: android ios react-native mobile release-management

The Twelve-Factor App: V. Build, release, run获取灵感,我正在努力更新我们的CI / CD管道,并考虑到使用react-native-web构建应用的三个不同步骤。

具体来说,我想:

  1. 构建:为每个平台(web,android,ios)生成代码的环境不可知工件
  2. 发布:获取工件和配置文件(API URL,API密钥,调试设置等),并发布到每个平台
  3. 这对于网络来说是微不足道的,这就是 The Twelve-Factor App 的想法。我的问题是我如何阅读移动平台上的配置文件?如何将其与react-native-web构建工件结合使用?我的工件是否需要包含所有源代码和依赖项,以便我可以在发布时提取配置然后构建?

    理想情况下,每个工件都包含为每个平台编译的代码,这些代码以某种方式知道如何引入配置文件并对其执行某些操作。接下来最好的是拥有每个平台的源代码,我可以在发布时使用配置文件进行编译。第三好的方法是在发布时为每个发行版提供足够的信息,以便它可以在运行时请求配置。

    完全披露,我对构建和部署移动应用程序一无所知,所以如果有明显的解决方案,我会道歉!

2 个答案:

答案 0 :(得分:2)

与Android相似。一旦创建了构建二进制文件,它就是不可变的。 所以不幸的是,否定了选项#1。一旦我们构建二进制文件,我们就无法对二进制文件做任何其他事情。

我认为反应本地选项二是最好的方法。 基本上,一旦解决了您的配置需求,您就需要在发布时构建应用程序。这避免了在选项#3中在运行时加载内容的任何开销,并且仍然与Twelve Factor很好地匹配。您仍然拥有与您的发布类型匹配相同配置的移动二进制文件。

要实际读取这些值,您可以将配置文件放到项目的根目录中,我们可以帮助您完成设置。 如果您愿意,我很乐意讨论这些细节。

更新:

我们可以做任何iOS(几乎同样)

当前构建工具将所有代码编译为字节码classes.dex并将所有重新编译压缩为resrouces.arc,但res/raw保持不变。 这为我们提供了一个注入文件的地方。 从那里,应用程序将能够在运行时读取和解析。

答案 1 :(得分:1)

对于iOS,构建和(非App Store)发布过程在高级别上如此工作:

  1. 在Xcode中存档您的项目,这会产生.xcarchive工件。
  2. 导出您的存档,并在其中生成.ipa文件。
  3. 您自己托管此.ipa文件(使用其他一些元数据文件)或将其上传到HockeyApp等服务进行分发。
  4. 有几种方法可以在Xcode项目中管理配置。一种相当常见和直接的方法是使用info.plist文件来存储自定义键和值。然后,应用程序可以在运行时查找并使用这些值。

    在您描述的场景中,听起来您希望能够在步骤2之后但在步骤3之前注入特定的配置值。幸运的是,可以提取在步骤2中生成的.ipa文件,这将揭示包含Payload文件的.app文件夹。可以检查此文件,在内部您将看到应用程序的Info.plist。修改此文件将允许注入您想要设置的任何配置值。

    这将节省管理Xcode项目内部配置的需要,并为应用程序的每个配置创建单独的存档。但是没有解决的是第3步。您仍然需要单独分发每个已配置的.ipa文件。