【问题标题】:Is there any way to make Xcode 7.3 and above support distributed build among multi Mac devices?有没有办法让 Xcode 7.3 及更高版本支持多 Mac 设备之间的分布式构建?
【发布时间】:2016-06-17 09:57:24
【问题描述】:

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

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

我已经在 Google 上搜索了很多关于此的内容,但所有文章似乎都已过时。最新的 Xcode 7.3 有什么解决方案吗?

【问题讨论】:

  • 据我所知,这种东西是不存在的。哦,好吧。

标签: ios xcode distcc


【解决方案1】:

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

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

【讨论】:

  • 我检查了那个 github 项目,但我不知道如何让它工作。我启动了监视器并在 xcode 中按了 cmd+B,而插件已经加载,但似乎没有什么不同。 xcode 像往常一样构建,监视器什么也不显示。你有这方面的教程吗?
  • 当您构建项目时,它还会创建许多其他工具,包括一个名为 Distcc 3.2.xcplugin 的 Xcode 插件...您可能希望将其添加到每个客户端 Xcode。除此之外,请查看主要 distcc 项目页面:github.com/distcc/distcc
  • 我确实安装了插件,但我在 xcode 中似乎没有任何明显的差异,无论是 xcode gui 还是构建日志。这个插件是静默取代构建过程还是我应该做些什么?
  • 为了从 Xcode 中获得并行编译,您需要选择 distcc compiler - 这就是它的基础。更多信息在这里:github.com/marksatt/DistCode/issues/1#issuecomment-77769713(......该线程中提到的问题已经修复......)
  • 那是有道理的。我会试试。非常感谢。
【解决方案2】:

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

在某些构建工具链和某些项目中,分布式构建是有益的,甚至是必要的,因为代码量庞大,再加上编译器、链接器和其他工具链播放器的速度很慢,并且当工具链识别依赖关系和跟踪更改的能力禁止部分和差异构建时。换句话说……Vis​​ual-Studio for Windows 上的任何相当大的项目……(笑话——还有更糟的)。

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2019-11-27
    • 2016-03-12
    相关资源
    最近更新 更多