Длительное время сборки 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
(некоторое улучшение)
![введите описание изображения здесь]()
![введите описание изображения здесь]()
- Установить формат отладочной информации -
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 секунд.
Также я обнаружил много открытых ошибок при быстрой работе:
Мой вопрос:
Есть ли у кого-нибудь решение по улучшению времени компиляции для 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