Длительное время сборки Swift

Мне нравится Apple и то, что они делают, но Swift... OH GOD!

У меня проблема с временем компиляции `Swift`.

Конфигурация:

  • MacBook Pro (Retina, 13 дюймов, середина 2014 года)
  • 2,6 ГГц Intel Core i5
  • 8 ГБ 1600 МГц DDR3
  • SSD 256 (до 800 МБ/с)
  • 1k classes
  • 10 pods

Время компиляции: 3 мин.

Похоже, что для "новой лучшей и потрясающей быстрой, мечты" этой конфигурации недостаточно, и она работает как Google Chrome - InfiniteLoop(find free memory - eat)


Я пробовал различные методы для ускорения времени компиляции:

  • Установите HEADERMAP_USES_VFS в YES (без изменений)

введите описание изображения здесь

  • Установить Build Settings / Architectures / Build Active Architecture Only до YES (некоторое улучшение)

введите описание изображения здесь

  • Установите defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 (8) (иногда это становится еще хуже)

  • Установите уровень оптимизации на -Onone (без существенного улучшения)

введите описание изображения здесь

  • Установить формат отладочной информации - DWARF вместо DWARF with dSYM File

введите описание изображения здесь

  • Отключите Find implicit dependencies от вашей схемы (нет улучшение)

введите описание изображения здесь

  • Создал новый проект и переместил все файлы в новый (занимает слишком много времени и уделяет мало времени)

  • Измените компилятор по умолчанию на другие доступные (еще хуже)

  • Строгие правила о том, как быстро скомпилировать код Swift (ниже более подробная информация)

Я нашел несколько сообщений, где люди описывают одну и ту же проблему: здесь и здесь

Я думаю, что все ждут нового Xcode 8.2 beta 2, где:

Xcode не будет восстанавливать целую цель, когда только небольшие произошли изменения. (28892475)

Но это только отчасти верно, у меня все еще есть длительное время компиляции - от 6 до 12 минут до 3-8. Подробное описание этого можно найти здесь и здесь

Кроме того, я соблюдал все эти правила во время написания кода:

  • Сокращение количества функций
  • Развертывание опций
  • Неявное типирование для объекта (особенно словарь)
  • Избежать? оператор (этот очень голодный!!)
  • Избегать?: operator

В словах не используйте "новые интересные функции", потому что вы будете ждать целых века.

Еще одна попытка - это обходной путь, описанный здесь:

Перейдите в раздел Product → Scheme → Edit Scheme. Выберите "Сборка" в левой части и снимите флажок "Найти неявные зависимости". Но этот флаг должен остаются проверенными, когда вы строите проект в первый раз.

Но это обходное решение не то, что я ищу, и это также может быть временным решением.

Swift - это боль не потому, что ее трудно писать, а потому, что ее трудно использовать (по крайней мере на некоторых машинах).

Для сравнения: у меня есть проект на Objective-C с 2k классами, а 11 pods - чистое время компиляции ~ 30 секунд.

Также я обнаружил много открытых ошибок при быстрой работе:

  • SR-2461
  • SR-1465
  • SR-1707
  • SR-663
  • и многие другие, список слишком длинный, и некоторые из них были открыты несколько лет назад.

Мой вопрос:

Есть ли у кого-нибудь решение по улучшению времени компиляции для Swift?

Ответы

Ответ 1

Эта проблема была чрезвычайно разочаровывающей для меня. Мы попробовали несколько решений, о которых вы упоминали, и никто из них не работал.

Единственное, что значительно улучшило время компиляции: Включение Whole Module Optimization при добавлении -Onone в Other Swift Flags.
Посмотрите это - Ускорьте быструю компиляцию

Я использую Swift 3 с Xcode 8.3.

Ответ 2

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

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

Вы можете отключить оптимизацию кода для разработки, перейдя в "Настройки проекта" > "Параметры сборки", "Оптимизировать", в разделе "Swift Compiler" - "Построение кода" установите "Уровень оптимизации" на "Нет" [-Одно] для сборки Debug.

Это должно значительно улучшить время сборки.

Ответ 3

Мы улучшили время компиляции, используя Carthage вместо Cocoapods, чтобы включить сторонние библиотеки.

Ответ 4

ОПТИМИЗАЦИЯ ОПЕРАТИВНОЙ МОДУЛИ БЕЗ РАЗРУШЕНИЯ ОГРАНИЧЕНИЙ

Просто добавьте SWIFT_WHOLE_MODULE_OPTIMIZATION как определяемый пользователем параметр со значением ДА, и время компиляции должно значительно улучшиться.

введите описание изображения здесь

Это исправление было внесено разработчиками в Zalando. Кричите им. https://jobs.zalando.com/tech/blog/improving-swift-compilation-times-from-12-to-2-minutes/?gh_src=4n3gxh1