【问题标题】:Is it possible to use distcc for building iPhone device builds?是否可以使用 distcc 来构建 iPhone 设备版本?
【发布时间】:2011-05-27 11:13:46
【问题描述】:

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

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

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

【问题讨论】:

  • 我不是在批评,但你有什么真正的理由要分发构建吗?该项目是否庞大且需要很长时间才能在一台机器上构建?
  • @Jasarien,请参阅我对该问题的最新评论。是的,这很重要。完全重建(这些并不少见)可能需要半个小时。
  • @Steven Kramer 指出并点赞 :)
  • @Steven 您在设置可以链接到的 distcc 时是否遵循了一些教程?我们真的对您的配置一无所知,除了它在为设备构建时不起作用。在不了解您的配置的情况下,我猜我们所能做的就是猜测。

标签: iphone xcode ios distcc


【解决方案1】:

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

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

您需要采取的步骤如下:

  • 增加 Xcode 用户默认值 PBXNumberOfParallelBuildSubtasks。这限制了并行构建任务的最大数量并默认为 CPU 内核的数量(有关详细信息,请参阅 Apple 自己的 Xcode User Default Reference 文档)。我从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 个。

【讨论】:

  • 尊敬的 user776140,太棒了,它有效!一个小提示,我必须将 $* 更改为 "$@" (带引号)才能正确引用带空格的参数。作为参考,我的 DISTCC_HOSTS 现在看起来像:export DISTCC_HOSTS="--randomize machine1.local,cpp,lzo machine2.local,cpp,lzo"(实际上还有几台机器)。祝你的项目好运,听起来很有趣。
  • 这似乎不适用于 xcode 4。有人可以确认吗?
【解决方案2】:

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

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

欢迎任何贡献!

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 所有预编译和后编译步骤(如NIB编译、链接)始终在本地执行。这些步骤包括签名,所以这应该不是问题。
    • @Steven 你确定在为设备编译时使用 distcc 进行编译吗?也许您只为模拟器配置了 distcc?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多