在 Docker 中使用 Fastlane 构建 iOS 应用
Posted
技术标签:
【中文标题】在 Docker 中使用 Fastlane 构建 iOS 应用【英文标题】:Building a iOS app with Fastlane inside Docker 【发布时间】:2018-01-03 13:10:12 【问题描述】:我正在尝试简化我的 ios 开发构建并阅读有关 Docker 的信息。
如果我理解正确,我可以创建一个包含所有依赖项的图像,我的开发人员可以直接拉取它并在其中构建。
重点是,这是否也适用于 Fastlane(我认为它使用 Xcode cli 工具)和“Docker for Mac”?
另外,我正在使用 React-Native,它似乎开始了第二个流程,用于捆绑稍后将包含在 native 构建中的 javascript,我读到 Docker 只允许一个流程,是这是个问题?
【问题讨论】:
【参考方案1】:使用 Docker 的问题在于,即使您使用 Docker for mac,您也无法访问基于 macOS 的图像。 Docker 在一个名为xhyve 的轻量级虚拟机中运行——至少如果你通过 Docker for Mac 包安装 docker——它在你的 Mac 上运行 Linux。
本质上,这意味着您的 docker 容器将仅限于非 Xcode 功能。以下是您绝对无法做到的事情,至少在没有大量工作的情况下是无法做到的:
编译应用的原生代码 为您的应用截屏或在模拟器中运行您的应用 使用 Apple 的codesign
签署完成的应用程序
您可能会使用 docker 容器来做以下事情:
构建 JS 代码(我假设,因为 RN 应该在 Linux 上工作) 使用 iTMSTransporter 上传您的应用(即使用 fastlane 的deliver
)
下载/创建证书、配置文件和推送证书(即 fastlane 的 match
、cert
、pem
和 sigh
)
使用 git
总而言之,您可能会非常有限。相反,建议使用Gemfile
和Brewfile
之类的东西列出所有依赖项,并使用一个小的setup.sh
脚本运行brew bundle
和bundle install
将它们安装在您同事的机器上。您还可以将其设置为在构建期间运行它们(使用 Xcode 的脚本构建阶段),这样就不会有人不小心忘记安装构建所需的东西。
话虽如此,here 上正在开发一个 fastlane docker 映像,Docker Hub 上也提供该映像。请注意,它只经过测试以运行 fastlane 测试(不依赖于仅 macOS 的软件),因此它实际上并没有声称可以可靠地运行 fastlane。
我读过 Docker 只允许一个进程
Docker 允许多个进程,它只是不允许多个主进程。如果您的主进程停止了其他一切并且容器随之停止。如果您只想使用它来安装依赖项,以便您可以运行使用它们的一次性命令,而不是托管长时间运行的服务,您始终可以使用 docker run
来做到这一点:
docker run <repo/image:tag> <your_command>
或者在容器中启动一个交互式 shell:
docker run -it <repo/image:tag> /bin/bash
【讨论】:
我注意到引用的链接:这里正在处理一个 fastlane docker 映像... 不再存在,因此我编辑/更新了您的答案正确的网址。以上是关于在 Docker 中使用 Fastlane 构建 iOS 应用的主要内容,如果未能解决你的问题,请参考以下文章
在监视目标中使用 fastlane 和可可豆荚进行构建的问题