Лучшие практики
За годы работы с различными командами и проектами мы выделили набор лучших практик, которых мы рекомендуем придерживаться при работе с проектами Tuist и Xcode. Эти практики не являются обязательными, но они помогут вам структурировать свои проекты таким образом, чтобы их было легче поддерживать и масштабировать.
Xcode
Нежелательные шаблоны
Конфигурации для моделирования удаленных сред
Многие организации используют конфигурации сборки для моделирования различных удаленных сред (например, Debug-Production или Release-Canary), но такой подход имеет ряд недостатков:
- Несоответствия: Если в графе присутствуют несоответствия конфигурации, система сборки может в итоге использовать неправильную конфигурацию для некоторых целей.
- Сложность: Проекты могут заканчиваться длинным списком локальных конфигураций и удаленных сред, о которых сложно рассуждать и поддерживать.
Конфигурации сборки были разработаны для воплощения различных настроек сборки, и проектам редко требуется больше, чем просто Debug и Release. Необходимость моделирования различных сред может быть достигнута по-разному:
- В отладочных сборках: Вы можете включить в приложение все конфигурации, которые должны быть доступны в разработке (например, конечные точки), и переключать их во время выполнения. Переключение может происходить как с помощью переменных окружения запуска схемы, так и с помощью пользовательского интерфейса внутри приложения.
- В сборках релиза: В случае релиза вы можете включить только ту конфигурацию, к которой привязана сборка релиза, и не включать логику выполнения для переключения конфигураций с помощью директив компилятора.
Нестандартные конфигурации
Хотя Tuist поддерживает нестандартные конфигурации и упрощает управление ими по сравнению с ванильными проектами Xcode, вы будете получать предупреждения, если конфигурации не будут согласованы по всему графу зависимостей. Это помогает обеспечить надежность сборки и предотвратить проблемы, связанные с конфигурацией.
Сгенерированные проекты
Строящиеся папки
В Tuist 4.62.0 добавлена поддержка папок для сборки (синхронизированные группы Xcode), функция, появившаяся в Xcode 16 для уменьшения конфликтов слияния.
Хотя шаблоны подстановочных знаков Туиста (например, Sources/**/*.swift) уже устраняют конфликты слияния в генерируемых проектах, папки с возможностью сборки дают дополнительные преимущества:
- Автоматическая синхронизация: Структура вашего проекта остается синхронизированной с файловой системой - не требуется регенерация при добавлении или удалении файлов
- Рабочие процессы с поддержкой искусственного интеллекта: Ассистенты и агенты по кодированию могут изменять вашу кодовую базу, не вызывая регенерации проекта
- Более простая конфигурация: Определение путей к папкам вместо управления явными списками файлов
Мы рекомендуем использовать собираемые папки вместо традиционных атрибутов Target.sources и Target.resources для более рациональной разработки.
swift
let target = Target(
name: "App",
buildableFolders: ["App/Sources", "App/Resources"]
)swift
let target = Target(
name: "App",
sources: ["App/Sources/**"],
resources: ["App/Resources/**"]
)Зависимости
Принудительное включение разрешенных версий в CI
При установке зависимостей Swift Package Manager в CI мы рекомендуем использовать флаг --force-resolved-versions для обеспечения детерминированности сборок:
bash
tuist install --force-resolved-versionsЭтот флаг гарантирует, что зависимости будут разрешены с использованием точных версий, отмеченных в Package.resolved, устраняя проблемы, вызванные недетерминизмом при разрешении зависимостей. Это особенно важно для CI, где воспроизводимые сборки очень важны.
