13

据我所知,当我将任何项目从模拟器切换到设备构建配置时,构建不再是分布式的,而是在本地构建的。

那么,让 Xcode 使用分布式构建机制进行设备构建有什么魔力吗?有人对此有明确的说法,甚至有一些动手经验吗?

除非您了解分布式构建和 Xcode 的主题,否则请不要投票或关闭。这不是关于签署分发的菜鸟问题。

4

3 回答 3

8

我们还发现 Xcode 3.2.5 不分发设备构建,而模拟器构建使用 distcc 正确分发,尽管在Xcode Preferences -> Distributed Builds下设置了所有必要的选项。

但是,可以解决 Xcode 的限制并强制它也分发设备构建。看起来苹果方面的疏忽(错误!)默认情况下他们没有启用设备分布式构建。

您需要采取的步骤如下:

  • 增加 Xcode 用户默认PBXNumberOfParallelBuildSubtasks的值。这限制了并行构建任务的最大数量,并且默认为 CPU 内核的数量(有关详细信息,请参阅 Apple 自己的Xcode 用户默认参考文档)。我将它从 2 增加到 16,如下所示:

    write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 16 或者对于 Xcode 4.2 defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 16

  • 请务必重新启动 Xcode 以使上述更改生效。

  • 您需要设置自己的DISTCC_HOSTS环境变量的值,如distcc手册页中所述。

  • 为此,您需要在自己的脚本中设置DISTCC_HOSTS/Developer/usr/bin/distcc(然后调用原始/Developer/usr/bin/distcc二进制文件,您将其重命名为其他内容)。请注意,Xcode 会/Developer/usr/bin/distcc为每个编译单元调用并在每次调用之前设置DISTCC_HOSTS,因此您需要使用此伪装脚本来覆盖 Xcode。

  • 我自己的distcc脚本如下(我将原来的distcc二进制文件重命名为distcc.orig):

    #!/bin/sh
    export DISTCC_HOSTS="--randomize your list of hosts, each followed by ',cpp,lzo'"
    /Developer/usr/bin/distcc.orig "$@"
    exit $?
    

在DISTCC_HOSTS中有很多选项可以调整,特别是关于使用你自己的 localhost 来进行一些编译而不是把所有东西都拿出来,但上面至少应该让你开始。最适合您的显然取决于您自己的 Mac 硬件和网络性能。

根据我自己的经验,在相对较慢的网络上使用由几台四核 Mac 和我自己的双核 Mac 组成的分布式构建服务器设置可以将整个设备重新构建时间从大约 15 分钟减少到大约 5 分钟。

于 2011-05-30T11:59:58.517 回答
1

实际上,我编写了一个工具来管理网络上用于分发构建的机器组。它包括对设置的支持PBXNumberOfParallelBuildSubtasks(在 XCode 3.x + 4.x 之间有所不同)。它也可以在没有安装 XCode 的构建支持机器的情况下工作。我这样做的部分原因是我们使用 XCode 获得了糟糕的分布式构建速度。去年我们一直在工作中使用它,大约 50-100 个可用 CPU 用于并发 android/iOS/Desktop 构建,速度非常棒!这是 SourceForge 站点:http: //sourceforge.net/projects/distccmanager

我设想它允许跨平台编译支持(即 windows + mac 机器帮助构建 android)。

欢迎任何贡献!

于 2012-03-01T01:09:54.393 回答
0

当我意识到上一个问题因为不是一个真正的问题而被关闭时,我正要将此标记为重复。

我没有使用 distcc 的经验,但我知道可能是什么问题。设备构建需要签名,而不是模拟器构建。我想问题可能是签名只能在本地进行,或者 XCode 拒绝签署任何远程构建的东西。

另一种可能性是您只为模拟器构建而不是设备构建进行了 distcc 配置。

于 2011-05-27T11:28:29.460 回答