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

问题描述 投票:3回答:1

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

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

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

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

ios docker react-native fastlane
1个回答
19
投票

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

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

话虽这么说,有一个fastlane docker图像正在here上工作,也可以在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
© www.soinside.com 2019 - 2024. All rights reserved.