Улучшение времени сборки на XCode 4.5 для огромного игрового проекта

Сценарий: У нас есть проект XCode для iOS-игры, в котором содержится около 7000+ файлов.

Только 1000+ файлов - это код. Остальные из них - изображения, звуки, данные уровня, XIB, plists, файлы конфигурации и т.д.

Это универсальное приложение, поэтому у нас есть отдельный набор ресурсов для старого iPhone, сетчатки iPhone, iPad и т.д. У нас также есть PNG и PVRTC для нескольких вещей, таких как изображения BG и т.д., чтобы наилучшим образом использовать различные аппаратные средства.

Проблема:

Сейчас проект занимает около

42 секунды для очистки (Cmd - Shift - K)

8,3 минуты для полной перестройки (Cmd - B) (при восстановлении половина полосы выполнения заполняется за 1 мин)

aaaand... 5 минут 36 для запуска (Cmd-R)

После этого я нажал "Стоп" и снова нажал "Запустить", не делая абсолютно ничего. и он занял 2 минуты 40 секунд, чтобы просто "Запустить снова"

Я также видел, что ресурсы снова копируются, некоторые файлы снова создаются, как показано XCode над индикатором выполнения.

Любые решения для сокращения времени в любой из этих фаз высоко оценены. Пожалуйста,

P.S. Проект был запущен в течение XCode 3 дня, и мы автоматически обновляем файл xcodeproj каждый раз, когда выдается новый XCode.

Ответ 1

Невозможно решить проблему, если причина проблемы неизвестна. "Моя машина больше не запускается, есть ли способ начать ее снова?"; скорее всего, но только в том случае, если известна причина, по которой он в настоящее время отказывается от старта. Это похоже на то, что вы надеетесь, что есть волшебный переключатель в Xcode с именем "Build fast", и, включив его, все становится намного быстрее. Если бы был такой переключатель, разве вы не думаете, что он будет включен по умолчанию? Разве вы не думаете, что на самом деле это всегда будет включено?

Я также задаюсь вопросом, почему вы отметили этот вопрос с помощью "компилятора" и "оптимизации компилятора". Согласно вашему собственному утверждению, компиляция занимает всего одну минуту из 8,3-минутного времени сборки, так как дальнейшее сокращение времени компиляции сделает процесс более быстрым? Даже если время компиляции было сокращено до нуля, это все равно оставит вас с временем сборки 7,3 минуты. Не оптимизируйте на неправильном конце.

Это нравится оптимизация кода. Если ваш код слишком медленный, все оптимизации бессмысленны, если вы не используете в своем коде большую часть вашего времени. Оптимизация кода, который будет работать в десять раз быстрее, ничего не даст для общей производительности, если в этом фрагменте кода будет потрачено всего 0,1% времени. Первым шагом оптимизации кода является код профилирования и выяснение того, сколько времени потрачено на какой фрагмент кода.

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

Взгляните на журнал сборки в Xcode

enter image description here

Обязательно выберите "Все сообщения", иначе вы увидите предупреждения и ошибки или только ошибки. Теперь запустите чистую сборку, выберите новый журнал, который появляется влево, и продолжайте следить за этим журналом. Вы точно увидите, когда Xcode запускает операцию и приближается к следующей операции. Это должно дать вам первое впечатление о том, какая из задач займет довольно много времени. И как только вы сообщите нам, какие задачи у них есть, мы можем начать предлагать вам как можно быстрее выполнить эту задачу.

Ответ 2

Что вы ищете, это улучшить время компиляции и запуска для debug, правильно? Итак, как насчет создания другой цели для каждой платформы? Таким образом, вы сохраняете один и тот же код, но только упаковываете подмножество ресурсов для целей отладки в зависимости от вашего устройства отладки.

Чтобы сделать это, перейдите к своей фактической цели, щелкните правой кнопкой мыши и дублируйте. Держите свою реальную цель нетронутой, она толстая! Для новой цели, скажем, это iPad retina, перейдите к "фазам сборки" → "Ресурсы копирования пакетов" и удалите все ресурсы, которые не связаны с iPad Retina. Сделайте то же самое для каждой платформы.

Затем в левом верхнем углу Xcode выберите хорошую цель для конкретного устройства. Возможно, вы можете определить, какое устройство принято для цели.

Если вы используете непрерывную интеграцию, пусть ваш сборщик компилирует тучную цель ночью.