在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的matchcertpemsigh
  • 使用git

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

话虽这么说,有一个fastlane docker镜像正在这里工作 ,也可以在Docker Hub上使用 。 请注意,它只是经过测试才能运行fastlane测试(不依赖于macOS专用软件),所以它实际上并没有声称能够可靠地运行fastlane。

我读Docker只允许一个进程

Docker允许多个进程,它不允许多个主进程。 如果您的主进程停止其他所有操作并且容器随之停止。 如果您只是想使用它来安装依赖项,以便您可以运行使用它们的一次性命令,而不是托管长时间运行的服务,您可以通过使用docker run

 docker run   

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

 docker run -it  /bin/bash