2016-11-03 7 views
7

Как мой проект вырос за последний год, так и его время сборки. За последние несколько месяцев он ушел с 4 минут до 7 (время включает в себя GitHub pull, модульные тесты и т. Д.).Ускорение ускорения Xcode Swift

Я исследовал с -Xfrontend -debug-time-function-bodies строки, которые медленно компилируются и меняют этот код.

Я считаю, что сейчас вопрос о размере проекта; 182 файла Swift, ≈ 31K строк. 23 раскадровки, 52 XIB. Это обычное приложение UIKit с несколькими зависимостями Cocoapods.

Основная часть времени сборки проводится в фазе «Компиляция исходных файлов Swift».

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

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

+6

Фактор кода в каркасах. Те, кому не нужно компилировать каждый раз, когда вы что-то меняете. – HAS

+0

Вы пробовали без xibs? Я построил проект в Swift 1.x без xibs и не обнаружил явных различий во времени компиляции, но с тех пор я присоединился к компании, где везде есть xibs, поэтому у них не было возможности проверить это с помощью большого проекта. – Magoo

+0

Физическое оборудование также играет большую роль, Mac с быстрым SSD и большим количеством физических потоков будет хруст через исходные файлы Swift. –

ответ

3

Вот статья о бенчмаркинге/ускорении времени компиляции - swift-profiling.

В случае идет мертв вот tldr:

xcodebuild -workspace App.xcworkspace -scheme App clean build OTHER_SWIFT_FLAGS="-Xfrontend -debug-time-function-bodies" | grep .[0-9]ms | grep -v ^0.[0-9]ms | sort -nr > culprits.txt 

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

-Xfrontend -warn-long-function-bodies=100 

Это покажет вам, какие линии замедляют время компиляции.

+0

Работает ли это на Swift 2.3? – ricardopereira

+0

@ricardopereira Я не понимаю, почему это не так. Дайте мне знать, если это не так. –

2

Xcode 8.1/Swift 3.1 добавляет некоторые облегчения для проектов, включая некоторые ObjC. Предварительно скомпилированные заголовки вернулись! https://swift.org/blog/bridging-pch/

Если ваш проект включает в себя соединительный заголовок, это поможет. (В Xcode 8.1 beta 4 и более поздних версиях это значение по умолчанию: в предыдущих бетах добавить -enable-bridging-pch - Other Swift Flags).

2

Включение Whole Module Optimization при добавлении -Onone в Other Swift Flags работал для меня, это сократило время компиляции до 3 минут с 10.
Подробнее здесь - Speed Up Swift Compilation

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

+0

Я изумляюсь. Моя сборка шла с 68-х до 52-х годов. Ошибка Xcode? Отладка все еще работает нормально. –

+1

Я открыл радар 31539545, чтобы спросить у Apple, есть ли отрицательные ответы, а если нет, может ли это стать по умолчанию Xcode. –

+0

Привет, что делает -Onone флаг? Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^