据我所知,当我将我的任何项目从模拟器切换到设备构建配置时,构建不再分发,而是在本地构建。
那么,让Xcode使用分布式构建机制进行设备构建是否有任何神奇之处?任何人对这个甚至一些实践经验都有明确的说法吗?
除非您了解分布式构建和Xcode的主题,否则请不要进行downvote或close。这不是关于签署分发的noobie问题。
答案 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配置。