据我所知,当我将任何项目从Simulator切换到Device构建配置时,该构建不再是分布式的,而是本地构建的。

因此,让Xcode使用分布式构建机制进行设备构建是否涉及任何魔术?有人对此甚至是一些动手经验有明确的说法吗?

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

最佳答案

我们还发现,尽管在 Xcode Preferences-> Distributed Builds 下设置了所有必需的选项,但Xcode 3.2.5不会分发Device版本,而Simulator的版本使用distcc进行了正确的分发。

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

您需要采取的步骤如下:

  • 增加Xcode用户默认值 PBXNumberOfParallelBuildSubtasks 的值。这限制了并行构建任务的最大数量,并且默认为CPU内核的数量(有关详细信息,请参阅Apple自己的Xcode用户默认引用文档)。我将其从2增加到16,如下所示:
    write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 16或用于Xcode 4.2defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 16
  • 确保重新启动Xcode,以上更改才能生效。
  • 您需要设置自己的 DISTCC_HOSTS 环境变量的值,如distcc手册页中所述。
  • 为此,您需要在自己的/Developer/usr/bin/distcc脚本中设置 DISTCC_HOSTS (然后调用原始/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 ,特别是有关使用自己的本地主机也进行一些编译而不是全部淘汰的工作,但是以上内容至少应该使您入门。最适合您的选择显然取决于您自己的Mac硬件和网络性能。

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

    10-07 16:24