🔗 Статья: How to speed up Xcode build time
Основные идеи:
1️⃣ ИМХО, самая важная - использовать Build Time Summary (и его ассистента/визуализатора) — мощный встроенный способ увидеть узкие места на сборке, для того чтобы принимать решения не вслепую.
Для детализации на CI: попробуйте xclogparser или xcode-build-times.
Как уже не раз говорил, наблюдаемость и инспекция - наше все и то с чего всегда стоит начинать.
2️⃣ Проверить флаги сборки, оптимизации и параллельные билды.
3️⃣ Правильно чистить DerivedData — мы недавно подробно писали об этом тут.
4️⃣ Компилировать только, то что нужно для текущего запуска:
Автор предлагает проверить конфигурацию схемы.
А я бы предложил в том числе, смотреть на уровне исходников и анализа компиляции, например: исключать моки из сборок для Debug-а, если вы их модуляризуете.
5️⃣ Тоже имба в случае верной настройки:
input/output files в кастомных скриптах/фазах сборки (например, для SwiftLint: настройте фазу и используйте параметры --use-script-input-file-lists и --cache-path) — чтобы Xcode не перезапускал всё подряд, на каждом прогоне.
💡 От себя также добавлю:
1️⃣ Bitcode — мёртв. Apple официально отключила его поддержку с iOS 16 (см. release notes), поэтому можно смело его выкидывать из головы.
2️⃣ Оптимизация графа зависимостей: через API/Impl, Dependency Inversion и контроль build critical path — мощнейший рычаг (я писал об этом здесь).
3️⃣ Build cache (локальный или remote) — просто имбовый импакт на многомодульном проекте.
🔥 В сумме это всё может дать десятки процентов прироста при правильном использовании.
#L #Xcode #CompileTime
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
🚀 How to Speed Up Xcode Build Time (and Stop Wasting Hours Waiting)
If you’re an iOS developer, you’ve probably stared at that blue progress bar way longer than you’d like to admit.
Let’s be real — Xcode…
Let’s be real — Xcode…
❤3
Поэтому буду по-тихоньку "доставать из загашника".
Автор в статье пытается сделать кэш.
Ну не столько кеш, сколько упрощённую модель мира, в которой механизмы доступные из коробки начинают работать.
Он берёт iOS-сборку и насильно приводит её к детерминированному виду:
1. генерирует umbrella SPM-пакет как единый build graph
2. приводит DerivedData к стабильным абсолютным путям
3. поверх этого строит свой slot-based кеш.
После этого артефакты сборки «вдруг» становится переносимым: их можно zip-нуть и перекинуть между CI-раннерами, потому что внутри больше нет отличий в путях и случайных хешей.
Но важно:
- это не распределённый билд-кеш и не интеграция с Xcode.
- это локальный кеш, который можно копировать, потому что автор сначала нормализовал весь проект.
С инженерной точки зрения — решение тяжёлое и хрупкое.Это не то, что хочется тащить в прод.
Зато как упражнение для насмотренности — отличное, имхо, конечно.
Статья очень наглядно показывает, проблемы о которых мы уже общались ранее в разрезе tuist-а, из-за чего сложно сделать норм-кэш из коробки в iOS.
P.S.: Напоминание. Xcode 26 compilation cache делает лучше, но не идеально. Все еще ждем "красоты" из коробки.
#L #BuildCache #iOS #Tuist #xcode
Please open Telegram to view this post
VIEW IN TELEGRAM
Jeffverkoeyen
10× faster Xcode CI builds with slot caching — featherless software design
❤4🔥2
Решил начать с темы несложной, но полезной.
Про Xcode File Templates большинство давно знает и использует, но статья натолкнула на мысль еще раз подсветить этот инструмент и напомнить, почему он действительно полезен в повседневной разработке.
✏️ Когда вы создаёте новый экран или фичу, почти всегда повторяется одно и то же:
- импорты
- базовая структура View
- ViewModel/Reducer
- Preview
- тестовый файл где-то рядом
Чаще всего это решается копипастом. Работает, но:
- легко забыть что-то переименовать
- появляются мелкие расхождения в стиле
- растёт количество рутинных действий
📝 Как раз в этом случае и можно использовать File Template. Это пользовательский шаблон файлов, который появляется прямо в Xcode.
Вы заранее описываете:
- какие файлы создаются
- какой в них код
- какие значения Xcode подставляет автоматически
А дальше Xcode сам создает нужные файлы.
🔸Из чего состоит шаблон:
- один или несколько
.swift файлов-
TemplateInfo.plist- плейсхолдеры в коде
Например:
___FILEBASENAME___
_FILEBASENAMEASIDENTIFIER_
При создании файла Xcode автоматически подставляет нужные значения.
🔹 Как создать файл из шаблона:
1. File → New → File…
2. Выбрать нужную категорию
3. Выбрать шаблон
4. Ввести имя
5. Получить готовые файлы в проекте
Без копипаста и лишних шагов.
🔍
TemplateInfo.plist описывает поведение шаблона:- имя шаблона, которое вы видите в Xcode
- описание
- тип шаблона
- список файлов, которые будут созданы
Через него можно:
- создавать сразу несколько файлов
- указать, какие файлы открывать после генерации
- управлять отображением шаблона в Xcode
По сути, именно
TemplateInfo.plist определяет, насколько шаблон будет удобен в реальной работе.✔️ Где шаблоны особенно хорошо работают:
- SwiftUI View + ViewModel
- Feature (View + Reducer + Preview)
- экраны дизайн-системы
- сетевые запросы с DTO
- тестовые файлы с общей структурой
Особенно полезно, когда:
- в проекте есть устоявшаяся архитектура
- важно соблюдать единый стиль
- в команду приходят новые разработчики
🍕 Почему полезно использовать шаблоны:
- меньше рутинных действий
- меньше ошибок от копипаста
- единая структура по проекту
- проще поддерживать кодовую базу
- быстрее старт новых фич
Но при регулярном использовании он заметно упрощает повседневную работу и помогает поддерживать аккуратную и предсказуемую структуру проекта.
#R #Xcode #Templates
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3