在Docker中使用Fastlane构建iOS应用程序
我正在尝试简化我的iOS开发版本并阅读有关Docker的内容。
如果我理解正确的话,我可以创建一个包含所有依赖项的图像,而我的同伴开发人员可以将其拉入并在其中构建。
点现在,这是否也适用于Fastlane(我认为使用Xcode cli工具)和“Docker for Mac”?
另外,我正在使用React-Native,它似乎启动了第二个进程,用于捆绑稍后将包含在本机构建中的JavaScript,并且我读到Docker只允许一个进程,这是一个问题吗?
使用Docker的问题在于,即使您使用Docker for mac,您也无法访问基于macOS的图像。 Docker在一个名为xhyve的轻量级虚拟机中运行 – 至少如果你通过Docker for Mac软件包安装docker – 在你的mac上运行Linux。
本质上,这意味着您的docker容器将仅限于非Xcodefunction。 这是你绝对无法做到的,至少在没有非常重要的工作量的情况下:
- 编译应用程序的本机代码
- 获取应用的屏幕截图或在模拟器中运行您的应用
- 使用Apple的代码签名完成应用程序签名
以下是您可能使用docker容器的内容:
- 构建JS代码(我假设,因为RN应该在Linux上运行)
- 使用iTMSTransporter上传您的应用程序(即使用fastlane的
deliver
) - 下载/创建证书,配置文件和推送证书(即fastlane的
match
,cert
,pem
和sigh
) - 使用git
总而言之,你可能会非常有限。 相反,建议使用Gemfile
和Brewfile
类的东西列出所有依赖项,并使用一个小型的setup.sh
脚本运行brew bundle
和bundle install
,将它们安装在同事的机器上。 您还可以将其设置为在构建期间运行(使用Xcode的脚本构建阶段),这样就不会有人意外忘记安装构建所需的东西。
话虽这么说,有一个fastlane docker镜像正在这里工作 ,也可以在Docker Hub上使用 。 请注意,它只是经过测试才能运行fastlane测试(不依赖于macOS专用软件),所以它实际上并没有声称能够可靠地运行fastlane。
我读Docker只允许一个进程
Docker允许多个进程,它不允许多个主进程。 如果您的主进程停止其他所有操作并且容器随之停止。 如果您只是想使用它来安装依赖项,以便您可以运行使用它们的一次性命令,而不是托管长时间运行的服务,您可以通过使用docker run
:
docker run
或者在容器中启动交互式shell:
docker run -it /bin/bash