我正在努力简化我的iOS开发版本,并阅读有关Docker的文章.

如果我理解正确,我可以创建一个包含所有依赖项的映像,而我的开发伙伴可以直接将其拉出来并在其中构建.

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

此外,我使用的是React Native,它似乎启动了第二个绑定JavaScript的过程,该过程将在以后的native版本中包含,我读到Docker只允许一个过程,这是一个问题吗?

推荐答案

使用Docker的问题是,即使使用Docker for mac,也无法访问基于macOS的图像.Docker运行在一个名为xhyve的轻量级虚拟机中——至少如果您通过Docker for Mac软件包安装Docker,该虚拟机在Mac上运行Linux.

本质上,这意味着docker容器将仅限于非Xcode功能.以下是你肯定做不到的事情,至少如果没有大量的工作:

  • 编译应用程序的本机代码
  • 拍摄应用程序的屏幕截图或在模拟器中运行应用程序
  • 用苹果codesign签名完成应用程序

以下是您可能会使用docker容器进行的操作:

  • 构建JS代码(我假设,因为RN应该在Linux上工作)
  • 使用iTMSTransporter上传应用程序(即使用fastlane的deliver)
  • 下载/创建证书、配置文件和推送证书(即fastlane的matchcertpemsigh)
  • 与git合作

总而言之,你可能会非常有限.相反,建议使用GemfileBrewfile之类的东西列出所有依赖项,并使用一个运行brew bundlebundle install的小setup.sh脚本将它们安装到同事的机器上.您还可以将其设置为在构建过程中运行(使用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

React-native相关问答推荐

在我的 React Native 应用程序中获取数据返回 [object Object] 而不是 renderSectionHeader

在 React Native 中使用 Flatlist scrollView 时的模式关闭

如何在 react-native 中刷新 Flatlist 数据?

如何判断 Detox 正在运行测试?

在 TouchableOpacity 上创建 Raised凸起或Shadow阴影效果

在 React Native 中从 Modal 打开 Modal

Soundcloud API /stream 端点给出 401 错误

TypeError:传播不可迭代实例的无效try

这个 refs 在方法中变得未定义

将 svg 转换为 react-native-svg

React Native:如何获取文件大小、mime 类型和扩展名?

使用 android 的应用中心分发时应用未安装错误

是否需要使用 StyleSheet.create?

React Native 从导航堆栈中清除上一个屏幕

React-Native:更改 ImageBackground 的不透明度 colored颜色

如何使 react-native Picker 停留在新 Select 的选项?

当前未启用语法nullishCoalescingOperator

列之间的 React Native FlatList 分隔符

在 React Native 中检测向左滑动

如何允许 react-native 启用对 JSX(扩展)文件的支持