Site icon AppTractor

Время сборки и верификация модулей

Одной из целей, которую я ставил перед собой, приступая к разработке Secrets 4, был рефакторинг кода на более мелкие модули. Это было сделано по двум причинам:

  1. В то время компилятор Swift действительно лучше справлялся с небольшими модулями, чем с большими и уникальными.
  2. Я хотел воспользоваться ключевыми словами управления доступом Swift (public, private, internal), чтобы четко определить границы модулей и символы, предназначенные только для внутреннего использования.

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

Сегодня в Secrets есть 36 отдельных фреймворков. Большинство из них (33) — это статические фреймворки, которые объединены в один динамический.

Постепенно время сборки Secrets становилось все медленнее и медленнее, и я не замечал этого… до бета-версии Xcode 16, когда я почувствовал, что мне действительно нужно понять, что происходит.

Сборка с Timing Summaries

Наконец-то я нашел время, чтобы разобраться в этом вопросе, и собрал проект с временной сводкой (в Xcode выберет Product > Perform Action > Build with Timing Summary). Причина такой медлительности сразу же стала ясна…

Компилятор явно тратит большую часть из тех 3.5 минут, которые потребовались для сборки Secrets, на проверку модулей…

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

В Xcode версии 14.3 или более поздней включите верификатор модулей в настройках сборки вашего проекта Xcode, чтобы вы могли выявить и устранить проблемы с модулем фреймворка перед его распространением. Некоторые примеры таких проблем:

Когда вы включаете верификатор модулей, он находит проблемы с модулями в вашем коде и отображает ошибки для них в навигаторе Issue в Xcode, как и ошибки компилятора или предупреждения.

Все это звучит хорошо и здорово, особенно если вы распространяете фреймворк, но я явно не хочу делать это в Secrets в каждой сборке!

Поэтому я отключил его для отладочных сборок.

Этот твик сократил время сборки с 3.5 минут до 52 секунд 😮!

И мне потребовалось менее 30 минут, чтобы найти проблему и исправить ее… За последние два года я ждал окончания сборки гораздо дольше.

Заключение

Сборка с временной сводкой — ваш друг. Не забывайте периодически обращаться к ней, чтобы узнать, в чем дело.

Источник

Exit mobile version