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

K..*_*K.. 8 ios docker react-native fastlane

我正在尝试简化我的iOS开发版本并阅读有关Docker的内容.

如果我理解正确的话,我可以创建一个包含所有依赖项的图像,而我的同伴开发人员可以将其拉入并在其中构建.

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

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

mil*_*lch 21

使用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,pemsigh)
  • 使用git

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

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

我读Docker只允许一个进程

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

docker run <repo/image:tag> <your_command>
Run Code Online (Sandbox Code Playgroud)

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

docker run -it <repo/image:tag> /bin/bash
Run Code Online (Sandbox Code Playgroud)