13

私の知る限り、プロジェクトを Simulator から Device ビルド構成に切り替えた瞬間、ビルドは分散されなくなり、ローカルでビルドされます。

では、Xcode でデバイス ビルド用の分散型ビルド メカニズムを使用するには、何らかの魔法が必要なのでしょうか? 誰かがこれについて明確な言葉を持っていますか、それとも実践的な経験がありますか?

分散ビルドと Xcode のトピックを理解していない限り、反対票を投じたり、閉じたりしないでください。これは、ディストリビューションへの署名に関する初歩的な質問ではありません。

4

3 に答える 3

8

Xcode Preferences -> Distributed Buildsで必要なすべてのオプションを設定しているにもかかわらず、Xcode 3.2.5 がデバイス ビルドを配布しないのに対し、シミュレータ ビルドは distcc で適切に配布されることもわかりました。

ただし、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 を再起動してください。

  • man ページで説明されているように、 DISTCC_HOSTS環境変数に独自の値を設定する必要があります。distcc

  • これを行うには、独自のスクリプト内からDISTCC_HOSTSを設定する必要があります (これにより、元のバイナリが呼び出され、別の名前に変更されます)。Xcode は各コンパイル ユニットを呼び出し、各呼び出しの前にDISTCC_HOSTSを設定することに注意してください。したがって、このマスカレード スクリプトを使用して Xcode をオーバーライドする必要があります。/Developer/usr/bin/distcc/Developer/usr/bin/distcc/Developer/usr/bin/distcc

  • 私自身の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 ハードウェアとネットワーク パフォーマンスによって明らかに異なります。

私自身の経験では、比較的低速なネットワーク上で 2 台のクアッドコア Mac と私自身のデュアルコア Mac で構成される分散型ビルド サーバー セットアップを使用すると、デバイスの完全な再ビルド時間が約 15 分から約 5 分に短縮されました。

于 2011-05-30T11:59:58.517 に答える
1

私は実際に、ビルドを配布するためにネットワーク上のマシンのグループを管理するツールを作成しました。設定のサポートが含まれていPBXNumberOfParallelBuildSubtasksます (XCode 3.x + 4.x で異なります)。また、XCode をインストールする必要のあるビルド サポート マシンがなくても動作します。私がこれを行ったのは、XCode で得られた分散ビルド速度がひどいためでした。昨年、Android/iOS/Desktop の同時ビルド用に最大 50 ~ 100 個の CPU を使用して仕事で使用しており、速度は素晴らしいです! SourceForge サイトは次のとおりです: http://sourceforge.net/projects/distccmanager

クロス プラットフォームのコンパイル サポート (つまり、Android ビルドを支援する Windows + Mac マシン) を可能にすることを想定しました。

どんな貢献でも大歓迎です!

于 2012-03-01T01:09:54.393 に答える
0

前の質問が実際の質問ではないために閉じられたことに気付いたとき、これを重複としてマークしようとしていました。

distcc の経験はありませんが、何が問題なのかはわかります。シミュレータ ビルドとは対照的に、デバイス ビルドは署名する必要があります。問題は、署名がローカルでのみ行われるか、XCode がリモートでビルドされたものへの署名を拒否することであると思います。

もう 1 つの可能性は、デバイス ビルドではなく、シミュレーター ビルドに対してのみ distcc 構成を行ったことです。

于 2011-05-27T11:28:29.460 に答える