是否可以使用distcc构建iPhone设备版本?

时间:2011-05-27 11:13:47

标签: iphone xcode ios distcc

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

那么,让Xcode使用分布式构建机制进行设备构建是否有任何神奇之处?任何人对这个甚至一些实践经验都有明确的说法吗?

除非您了解分布式构建和Xcode的主题,否则请不要进行downvote或close。这不是关于签署分发的noobie问题。

3 个答案:

答案 0 :(得分:8)

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

但是,可以解决Xcode的限制并强制它也分发设备构建。在Apple看来,这似乎是一种疏忽(bug!),默认情况下他们没有启用Device分布式构建。

您需要采取的步骤如下:

  • 增加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手册页。

  • 为此,您需要在自己的/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 中有很多选项可供调整,特别是关于使用你自己的localhost也可以进行一些编译而不是将所有东西都用完,但上面的内容至少应该让你开始。最适合您的方法显然取决于您自己的Mac硬件和网络性能。

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

答案 1 :(得分:1)

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

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

欢迎任何贡献!

答案 2 :(得分:0)

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

我对distcc没有经验,但我知道可能是什么问题。与模拟器构建相反,需要对设备构建进行签名。我想问题可能是签名只能在本地进行,或者XCode拒绝签署任何已远程构建的内容。

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