5

我在一个有大约 10 名队友的 iOS 开发团队中。我们所有人都在 1Gbps 局域网中使用 Mac 设备,所以我想知道我们是否可以分布式构建项目:

  1. 当有人开始构建项目时,它可以自动连接到其他 Mac 设备并分发编译单元。就像 distcc 一样。
  2. 并行构建作业计数可能超出主机的 cpu 内核。例如,即使主机只有 N 个 cpu 内核,它也可以同时在不同的客户端上编译 N 个(可能是 N * 2 个)文件。

我已经用谷歌搜索了很多关于此的内容,但所有文章似乎都已过时。最新 Xcode 7.3 的任何解决方案?

4

2 回答 2

5

Xcode 在 4.5 版本之前有一个“分布式构建”功能,随后被删除。如今,Apple 做这些事情的标准方式通常是通过“持续集成”(机器人),它通常在 Xcode 服务器环境中运行。这很可能不是您想要的,因为它与简单地让客户端计算机在网络上共享构建任务的想法有很大的不同。

好消息是有一个活跃的 github 项目,名为DistCode - (Distributed Compilation For Xcode),它确实使用了以前的 Apple 组件distcc,它似乎确实适用于当前版本的 Xcode(7.3.1 / Apple LLVM 版本 7.3.0 clang -703.0.31)。

于 2016-06-17T10:35:04.313 回答
0

我的回答是:你不再需要这个设施了,它被移除是有原因的。

分布式构建在某些构建工具链和某些项目中是有益的,甚至是必要的,当代码的绝对大小与缓慢的编译器、链接器和其他工具链播放器相结合时,以及当工具链的识别依赖关系和跟踪更改的能力禁止部分和差异构建。换句话说...... Visual-Studio for Windows 上的任何相当大的项目......(笑话 - 还有更糟的)。

但是,当您使用最新(当前为 v10.3)Xcode 及其工具链时,使用 llvm + CLANG 工具链来开发 iOS 程序 --- 在平庸的 Mac 上,正常的构建时间不会超过 2-3 分钟,除非您'在你的项目文件中做一些非常愚蠢的事情。

在我的最后一个(非常复杂的!!!)项目中,每个项目都有几十个内部库和依赖项,我设法让干净+构建时间远低于一分钟,而大多数常规迭代构建 - 远低于 10 秒。

在这种情况下,非常复杂的分布式构建系统没有真正的好处。

远程构建当然有很好的理由和用途 - 这样完全发生在单台计算机上,但不是你的。这对于“官方”“构建机器”场景以及在托管“构建服务器”上发生的长时间测试运行非常有用。当然,今天的 Xcode 支持这一点。

但我真正的意思是——如果构建时间困扰着你——继续,检查你的项目结构。

你是否使用像 home-brew、cocoa-pods 等神秘的依赖插入机制?也许您正在使用 iOS 生态之上的“元”开发系统?(Unity?Mono?Cordova?)您是否通过 shell 脚本构建步骤使用外部工具链?您是否有很多损坏的依赖项,迫使您每次都从头开始构建所有内容?

所有这些都有治疗方法,并且可以小心地完成,不仅有利于您的构建时间,而且有利于构建产品的健壮性和大小,易于扩展和维护以及代码库的可移植性到未来。

于 2019-07-28T16:29:11.083 回答