有什么方法可以使 Xcode 7.3 及更高版本支持在多个 Mac 设备之间进行分布式构建?
Is there any way to make Xcode 7.3 and above support distributed build among multi Mac devices?
我在一个 iOS 开发团队中,大约有 10 个伙伴。我们所有人都在 1Gbps 局域网中使用 Mac 设备,所以我想知道我们是否可以分布式构建项目:
- 当有人开始构建项目时,它可以自动连接到其他 Mac 设备并分发编译单元。就像 distcc.
- 并行构建作业的数量可能超过主机的 cpu 个内核。例如,即使主机只有 N cpu 个内核,它也可以在不同的客户端上同时编译超过 N 个,也许是 N * 2 个文件。
我在谷歌上搜索了很多关于此的内容,但所有文章似乎都已过时。最新 Xcode 7.3 的任何解决方案?
Xcode 在 4.5 版之前有一个 "Distributed Build" 特性,随后被删除。如今,Apple 执行此类操作的标准方式通常是通过 "Continous Integration"(机器人),通常是来自 Xcode 服务器环境的 运行。这很可能不是您想要的,因为它与简单地让网络上的客户端计算机共享构建任务的想法有很大的不同。
好消息是有一个名为 DistCode - (Distributed Compilation For Xcode) 的活跃 github 项目确实使用了以前的 Apple 组件 distcc
,它似乎确实适用于当前版本的 Xcode(7.3.1/Apple LLVM 版本 7.3.0 clang-703.0.31)。
我的回答是:你不再需要这个设施了,它被移除是有原因的。
分布式构建在某些构建工具链和某些项目中是有益的,甚至是必要的,当代码的绝对大小与缓慢的编译器、链接器和其他工具链播放器相结合时,以及当工具链识别依赖项和跟踪更改的能力禁止部分和差异构建时。换句话说......任何在 Visual-Studio 上相当大的项目 Windows...(开玩笑 - 还有更糟的)。
但是,当您使用 Latest(当前为 v10.3)Xcode 及其工具链时,使用 llvm + CLANG 工具链来开发 iOS 程序 --- 正常构建时间,在一个平庸的 Mac,不会超过 2-3 分钟,除非你在你的项目文件中做了一些非常愚蠢的事情。
在我的最后一个(非常复杂!!!)项目中,每个项目都有几十个内部库和依赖项,我设法让清理+构建时间远低于一分钟,而大多数常规迭代构建时间远低于 10 秒。
在这种情况下 - 非常复杂的分布式构建系统没有真正的好处。
远程构建当然有充分的理由和用途 - 这样完全发生在一台计算机上,但不是你的。这对于 "official" "Build-machine" 场景以及主机上发生的长时间测试运行非常有用 "build server"。这当然得到了今天 Xcode.
的支持
但我的真正要点是 - 如果构建时间困扰您 --- 继续,检查您的项目结构。
您是否使用神秘的依赖插入机制,如自制、cocoa-pods 等?
也许您正在 iOS 生态之上使用 "meta" 开发系统? (Unity?Mono?Cordova?)您是否通过 shell-脚本构建步骤使用外部工具链?您是否有很多损坏的依赖项,迫使您每次都从头开始构建所有内容?
所有这些都有解决办法,并且可以小心地完成,这不仅有利于您的构建时间,还有利于构建产品的稳健性和大小、易于扩展和维护以及可移植性您未来的代码库。
我在一个 iOS 开发团队中,大约有 10 个伙伴。我们所有人都在 1Gbps 局域网中使用 Mac 设备,所以我想知道我们是否可以分布式构建项目:
- 当有人开始构建项目时,它可以自动连接到其他 Mac 设备并分发编译单元。就像 distcc.
- 并行构建作业的数量可能超过主机的 cpu 个内核。例如,即使主机只有 N cpu 个内核,它也可以在不同的客户端上同时编译超过 N 个,也许是 N * 2 个文件。
我在谷歌上搜索了很多关于此的内容,但所有文章似乎都已过时。最新 Xcode 7.3 的任何解决方案?
Xcode 在 4.5 版之前有一个 "Distributed Build" 特性,随后被删除。如今,Apple 执行此类操作的标准方式通常是通过 "Continous Integration"(机器人),通常是来自 Xcode 服务器环境的 运行。这很可能不是您想要的,因为它与简单地让网络上的客户端计算机共享构建任务的想法有很大的不同。
好消息是有一个名为 DistCode - (Distributed Compilation For Xcode) 的活跃 github 项目确实使用了以前的 Apple 组件 distcc
,它似乎确实适用于当前版本的 Xcode(7.3.1/Apple LLVM 版本 7.3.0 clang-703.0.31)。
我的回答是:你不再需要这个设施了,它被移除是有原因的。
分布式构建在某些构建工具链和某些项目中是有益的,甚至是必要的,当代码的绝对大小与缓慢的编译器、链接器和其他工具链播放器相结合时,以及当工具链识别依赖项和跟踪更改的能力禁止部分和差异构建时。换句话说......任何在 Visual-Studio 上相当大的项目 Windows...(开玩笑 - 还有更糟的)。
但是,当您使用 Latest(当前为 v10.3)Xcode 及其工具链时,使用 llvm + CLANG 工具链来开发 iOS 程序 --- 正常构建时间,在一个平庸的 Mac,不会超过 2-3 分钟,除非你在你的项目文件中做了一些非常愚蠢的事情。
在我的最后一个(非常复杂!!!)项目中,每个项目都有几十个内部库和依赖项,我设法让清理+构建时间远低于一分钟,而大多数常规迭代构建时间远低于 10 秒。
在这种情况下 - 非常复杂的分布式构建系统没有真正的好处。
远程构建当然有充分的理由和用途 - 这样完全发生在一台计算机上,但不是你的。这对于 "official" "Build-machine" 场景以及主机上发生的长时间测试运行非常有用 "build server"。这当然得到了今天 Xcode.
的支持但我的真正要点是 - 如果构建时间困扰您 --- 继续,检查您的项目结构。
您是否使用神秘的依赖插入机制,如自制、cocoa-pods 等? 也许您正在 iOS 生态之上使用 "meta" 开发系统? (Unity?Mono?Cordova?)您是否通过 shell-脚本构建步骤使用外部工具链?您是否有很多损坏的依赖项,迫使您每次都从头开始构建所有内容?
所有这些都有解决办法,并且可以小心地完成,这不仅有利于您的构建时间,还有利于构建产品的稳健性和大小、易于扩展和维护以及可移植性您未来的代码库。