С ростом проекта, скорость компиляции проекта замедляется. Особенно это заметно становится, когда тестируешь программу, делая параллельно небольшие изменения в программе.
Сначала давайте узнаем как долго компилируется проект до наших улучшений. ЧТобы это сделать надо в терминале ввести
Для этого нужно зайти в раздел Product зажать alt и нажать Clean Build Folder, а потом собрать проект заново. Мой проект компилируется 81 секунду. Посмотрим какой результат будет после улучшения.
![](https://habrastorage.org/r/w1560/webt/ai/nn/wk/ainnwksfevq9ofpg-2kbgr0dyk8.png)
Нам, в первую очередь, стоит узнать какие места приводят к замедлению компиляции. По умолчанию Xcode не показывает предупреждения, где проблема, но мы можем это исправить.
Самые «тяжелые» места большие функции и проверка типов. Поэтому нам нужно вписать эти две строчки в раздел Build Settings -> Other Swift Flags -> Debug
(здесь у нас стоит 100мс время компиляции, мы можем поставить любое число)
Пример моего рабочего проекта
![](https://habrastorage.org/r/w1560/webt/lo/fb/ml/lofbmlh_mbj0ttozv1umwgdboj4.png)
У меня есть участок который занимает 13778 ms, скорее всего у вас не будет такого, но из-за специфики проекта у меня такие участки есть. Так как там построено бинарное дерево для OCR.
Из-за глубокой вложенности друг в друга и определения типа только в самом начале, перед знаком равенства, компилятору требуется много времени понять какой перед ним тип. (Дерево занимает 30 строк, вот его часть)
До
![](https://habrastorage.org/r/w1560/webt/km/iy/gy/kmiygyrccfpgigf9jqgpb2oiap4.png)
После
![](https://habrastorage.org/r/w1560/webt/fd/hc/ip/fdhcipngcgvgs0fsxe-5zblrczi.png)
Мы определили тип для каждой вложенности и предупреждение ушло.
Еще одно слабое место несколько замыканий подряд.
До
![](https://habrastorage.org/r/w1560/webt/wi/9z/wu/wi9zwu7ogh0thzf0qmbvlsmr_ok.png)
После
Явно указали тип
![](https://habrastorage.org/r/w1560/webt/cy/l6/yg/cyl6ygv4mldo_ii6oyr-jg8gtia.png)
После исправления всех предупреждений проверим время сборки проекта снова.
Теперь проект компилируется 26 секунд в два с половиной раза быстрей.
![](https://habrastorage.org/r/w1560/webt/jg/se/vd/jgsevdfpysvqaztx1ncws5fzwci.png)
Там еще есть над чем работать, но самые явные проблемы были исправлены.
Сначала давайте узнаем как долго компилируется проект до наших улучшений. ЧТобы это сделать надо в терминале ввести
defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES
Для этого нужно зайти в раздел Product зажать alt и нажать Clean Build Folder, а потом собрать проект заново. Мой проект компилируется 81 секунду. Посмотрим какой результат будет после улучшения.
![](https://habrastorage.org/webt/ai/nn/wk/ainnwksfevq9ofpg-2kbgr0dyk8.png)
Нам, в первую очередь, стоит узнать какие места приводят к замедлению компиляции. По умолчанию Xcode не показывает предупреждения, где проблема, но мы можем это исправить.
Самые «тяжелые» места большие функции и проверка типов. Поэтому нам нужно вписать эти две строчки в раздел Build Settings -> Other Swift Flags -> Debug
-Xfrontend -warn-long-function-bodies=100
-Xfrontend -warn-long-expression-type-checking=100
(здесь у нас стоит 100мс время компиляции, мы можем поставить любое число)
Наглядный рисунок![](https://habrastorage.org/r/w1560/webt/zd/d8/tm/zdd8tmafqnt9p2oepvgnrqvqtqi.png)
![](https://habrastorage.org/webt/zd/d8/tm/zdd8tmafqnt9p2oepvgnrqvqtqi.png)
Пример моего рабочего проекта
![](https://habrastorage.org/webt/lo/fb/ml/lofbmlh_mbj0ttozv1umwgdboj4.png)
У меня есть участок который занимает 13778 ms, скорее всего у вас не будет такого, но из-за специфики проекта у меня такие участки есть. Так как там построено бинарное дерево для OCR.
Из-за глубокой вложенности друг в друга и определения типа только в самом начале, перед знаком равенства, компилятору требуется много времени понять какой перед ним тип. (Дерево занимает 30 строк, вот его часть)
До
![](https://habrastorage.org/webt/km/iy/gy/kmiygyrccfpgigf9jqgpb2oiap4.png)
После
![](https://habrastorage.org/webt/fd/hc/ip/fdhcipngcgvgs0fsxe-5zblrczi.png)
Мы определили тип для каждой вложенности и предупреждение ушло.
Еще одно слабое место несколько замыканий подряд.
До
![](https://habrastorage.org/webt/wi/9z/wu/wi9zwu7ogh0thzf0qmbvlsmr_ok.png)
После
Явно указали тип
![](https://habrastorage.org/webt/cy/l6/yg/cyl6ygv4mldo_ii6oyr-jg8gtia.png)
После исправления всех предупреждений проверим время сборки проекта снова.
Теперь проект компилируется 26 секунд в два с половиной раза быстрей.
![](https://habrastorage.org/webt/jg/se/vd/jgsevdfpysvqaztx1ncws5fzwci.png)
Там еще есть над чем работать, но самые явные проблемы были исправлены.