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



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

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

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

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

但是,可以解决Xcode的限制,并强制它也分发设备构建。苹果方面似乎有疏忽(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分钟。

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

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

欢迎任何贡献!

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

我没有distcc的经验,但我知道问题出在哪里。设备构建需要签名,而不是模拟器构建。我想问题可能是签名只能在本地进行,或者XCode拒绝对任何远程构建的内容进行签名。

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

相关内容

  • 没有找到相关文章

最新更新