Можно ли использовать distcc для построения сборок устройства iPhone? - PullRequest
13 голосов
/ 27 мая 2011

Насколько я могу судить, в тот момент, когда я переключаю любой из моих проектов с симулятора на конфигурацию сборки устройства, сборка больше не распространяется, а собирается локально.участвует в том, чтобы заставить Xcode использовать механизм распределенной сборки для сборки устройств?У кого-нибудь есть определенное слово на этот счет или даже какой-то практический опыт?

Пожалуйста, не отрицайте или не закрывайте голос, если вы не понимаете тему распределенных сборок и Xcode.Это не вопрос о подписи для распространения.

Ответы [ 3 ]

8 голосов
/ 30 мая 2011

Мы также обнаружили, что Xcode 3.2.5 не распространяет сборки устройства, тогда как сборки Simulator правильно распространяются с помощью distcc, несмотря на установку всех необходимых параметров в Предпочтения Xcode -> Распределенные сборки .

Однако можно обойти ограничение Xcode и заставить его также распространять сборки устройства.Это выглядит как упущение (ошибка!) Со стороны Apple, что они не включили распределенные сборки устройства по умолчанию.

Необходимо выполнить следующие шаги:

  • Увеличьте значение пользователя Xcode по умолчанию PBXNumberOfParallelBuildSubtasks .Это ограничивает максимальное количество задач параллельной сборки и по умолчанию равно количеству ядер ЦП (подробности см. В собственном справочнике 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.

  • Для этого вам нужно установить DISTCC_HOSTS из вашего собственного /Developer/usr/bin/distcc скрипта (который затем вызывает оригинальный двоичный файл /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.

1 голос
/ 01 марта 2012

Я на самом деле написал инструмент для управления группами машин в сети для распространения сборок.Он включает в себя поддержку настройки PBXNumberOfParallelBuildSubtasks (отличается в XCode 3.x + 4.x).Он также работает без машин поддержки сборки, для которых требуется установить XCode.Я сделал это частично из-за ужасных скоростей распределенной сборки, которые мы получали с XCode.Мы использовали его на работе в течение последнего года с ~ 50-100 доступными процессорами для одновременных сборок Android / iOS / Desktop, и скорость потрясающая!Вот сайт SourceForge: http://sourceforge.net/projects/distccmanager.

Я предполагал, что он позволит поддерживать кросс-платформенную компиляцию (т. Е. Windows + Mac машины, помогающие в сборке Android).

0 голосов
/ 27 мая 2011

Я как раз собирался отметить это как дубликат, когда понял, что предыдущий вопрос закрыт из-за того, что он не является реальным вопросом.

У меня нет опыта работы с distcc, но у меня есть представление о том, что можетбыть проблемой.Сборки устройства должны быть подписаны в отличие от сборок симулятора.Я предполагаю, что проблема может заключаться в том, что подпись может происходить только локально или XCode отказывается подписывать все, что было создано удаленно.

Другая возможность состоит в том, что вы выполняли настройку distcc только для сборок симулятора, а не сборок устройства.

...