在 Docker 中使用 Fastlane 构建一个 iOS 应用程序

Building a iOS app with Fastlane inside Docker

我正在尝试简化我的 iOS 开发构建并了解 Docker。

如果我理解正确,我可以创建一个包含所有依赖项的映像,而我的开发人员同事可以拉取它并在其中构建。

现在重点是,这是否也适用于 Fastlane(我认为它使用 Xcode cli 工具)和 "Docker for Mac"?

此外,我正在使用 React-Native,它似乎开始了第二个过程来捆绑 JavaScript,稍后将包含在 native 构建中,并且我读到 Docker 只允许一个进程,这是一个问题吗?

使用Docker的问题在于,即使您对mac使用Docker,您也无法访问macOS-基于图像。 Docker 运行s 在一个名为 xhyve 的轻量级虚拟 machine 中 - 至少如果你通过 Docker 安装 docker for Mac 包 - 运行s Linux 在你的 mac 上。

从本质上讲,这意味着您的 docker 容器将仅限于非 Xcode 功能。以下是您绝对无法做到的,至少在没有大量工作的情况下无法做到:

  • 编译您应用的本机代码
  • 在模拟器中截取您的应用或运行您的应用的屏幕截图
  • 使用 Apple codesign
  • 对完成的应用程序进行签名

您可以将 docker 容器用于以下用途:

  • 构建 JS 代码(我假设,因为 RN 应该在 Linux 上工作)
  • 正在使用 iTMSTransporter 上传您的应用(即使用 fastlane 的 deliver
  • Downloading/Creating 证书、配置文件和推送证书(即 fastlane 的 matchcertpemsigh
  • 与git
  • 合作

总而言之,您的能力可能会非常有限。相反,建议使用 GemfileBrewfile 之类的东西来列出所有依赖项,并有一个小的 setup.sh 脚本 运行s brew bundlebundle install 将它们安装在您同事的 mac 引擎上。您还可以将其设置为构建期间的 运行(使用 Xcode 的脚本构建阶段),这样就不会有人不小心忘记安装构建所需的东西。

也就是说,有一个 fastlane docker 图像正在处理 here that is also available on the Docker Hub。请注意,它仅针对 运行 快速通道测试进行过测试(不依赖于 macOS-only 软件),因此它实际上并未声称 [=80] =] 可靠的快车道。

I read Docker only allows one process

Docker允许多进程,只是不允许多于一个主进程。如果您的主进程停止了其他一切,并且容器也随之停止。如果你只是想用它来安装依赖项,这样你就可以 运行 使用它们的一次性命令,而不是托管一个长期的 运行ning 服务,你总是可以通过使用 docker run:

docker run <repo/image:tag> <your_command>

或者在容器中启动交互式 shell:

docker run -it <repo/image:tag> /bin/bash