Можно ли использовать distcc для сборки iPhone-устройств?

Насколько я могу судить, в момент переключения любого из моих проектов из конфигурации Simulator в Device build сборка больше не распространяется, а создается локально.

Итак, есть ли какая-то магия, связанная с тем, чтобы Xcode использовал распределенный механизм построения для сборки устройств? Кто-нибудь имеет определенное слово в этом или даже практическом опыте?

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

Ответы

Ответ 1

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

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

Действия, которые вам нужно предпринять, следующие:

  • Увеличьте значение по умолчанию пользователя Xcode PBXNumberOfParallelBuildSubtasks. Это ограничивает максимальное количество задач параллельной сборки и значений по умолчанию для количества ядер ЦП (подробности см. В собственном справочном документе пользователя по умолчанию для Xcode). Я увеличил его с 2 до 16, следующим образом:

    write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 16 или для Xcode 4.2 defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 16

  • Обязательно заново запустите Xcode для того, чтобы вышеупомянутое изменение вступило в силу.

  • Вам нужно будет установить собственное значение переменной DISTCC_HOSTS, как описано в man-странице distcc.

  • Чтобы сделать это, вам нужно установить DISTCC_HOSTS из своего собственного /Developer/usr/bin/distcc script (который затем вызывает исходный /Developer/usr/bin/distcc двоичный код, который вы переименовываете в нечто еще). Обратите внимание, что Xcode вызывает /Developer/usr/bin/distcc для каждого блока компиляции и устанавливает перед каждым вызовом DISTCC_HOSTS, поэтому вам нужно использовать этот маскарад script для переопределения Xcode.

  • Мой собственный distcc script выглядит следующим образом (и я переименовал исходный двоичный код distcc в distcc.orig):

    #!/bin/sh
    export DISTCC_HOSTS="--randomize your list of hosts, each followed by ',cpp,lzo'"
    /Developer/usr/bin/distcc.orig "[email protected]"
    exit $?
    

Существует множество опций для настройки в DISTCC_HOSTS, особенно в отношении использования вашего собственного локального хоста, чтобы также выполнить некоторую компиляцию вместо того, чтобы обрабатывать все, но выше, по крайней мере, вы должны начать. Что лучше всего подходит для вас, очевидно, будет зависеть от вашего собственного оборудования Mac и производительности сети.

В моем собственном опыте, используя распределенную конфигурацию сервера сборки, состоящую из пары четырехъядерных компьютеров Mac вместе с моим двухъядерным Mac на относительно медленной сети, сокращено полное время восстановления устройства примерно с 15 минут до около 5.

Ответ 2

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

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

Любые вклады приветствуются!

Ответ 3

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

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

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