Структура каталогов
Хотя проекты Tuist обычно используются для замены проектов Xcode, они не ограничиваются этим сценарием. Проекты Tuist также применяются для генерации других типов проектов, таких как пакеты SPM, шаблоны, плагины и задачи. В этом документе описана структура проектов Tuist и способы их организации. В последующих разделах мы рассмотрим, как определять шаблоны, плагины и задачи.
Стандартные проекты Tuist#
Проекты Tuist — это наиболее распространённый тип проектов, создаваемых с помощью Tuist. Они используются для сборки приложений, фреймворков и библиотек. В отличие от проектов Xcode, проекты Tuist описываются на Swift, что делает их более гибкими и простыми в поддержке. Проекты Tuist также более декларативны, поэтому их легче понимать и анализировать. Ниже показана типичная структура проекта Tuist, который генерирует проект Xcode:
Tuist.swift
Tuist/
Package.swift
ProjectDescriptionHelpers/
Projects/
App/
Project.swift
Feature/
Project.swift
Workspace.swift
Каталог Tuist: Этот каталог выполняет две функции. Во-первых, он указывает расположение корня проекта. Это позволяет строить пути относительно корня проекта и запускать команды Tuist из любого каталога внутри проекта. Во-вторых, он содержит следующие файлы:
- ProjectDescriptionHelpers: Этот каталог содержит код Swift, общий для всех файлов манифестов. Файлы манифестов могут
import ProjectDescriptionHelpers, чтобы использовать код, определённый в этом каталоге. Совместное использование кода помогает избежать дублирования и обеспечить согласованность между проектами. - Package.swift: Этот файл содержит зависимости Swift Package, которые Tuist интегрирует через проекты и цели Xcode (например, CocoaPods), делая их настраиваемыми и оптимизируемыми. Подробнее здесь.
- ProjectDescriptionHelpers: Этот каталог содержит код Swift, общий для всех файлов манифестов. Файлы манифестов могут
Корневой каталог: корневой каталог вашего проекта, который также содержит каталог
Tuist.Tuist.swift: Этот файл содержит конфигурацию Tuist, общую для всех проектов, рабочих пространств и окружений. Например, его можно использовать для отключения автоматической генерации схем или для определения целевой платформы проектов.Workspace.swift: Этот манифест представляет рабочее пространство Xcode. Оно используется для группировки других проектов, а также позволяет добавлять дополнительные файлы и схемы.Project.swift: Этот манифест представляет проект Xcode. Он используется для определения целей, входящих в состав проекта, и их зависимостей.
При работе с указанным выше проектом команды ожидают найти файл Workspace.swift или Project.swift в рабочем каталоге или в каталоге, указанном через флаг --path. Манифест должен находиться в каталоге или подкаталоге каталога, содержащего каталог Tuist, который представляет корень проекта.
Рабочие пространства Xcode позволяли разделять проекты на несколько проектов Xcode, чтобы снизить вероятность конфликтов при слиянии. Если вы использовали рабочие пространства именно для этого, в Tuist они не нужны. Tuist автоматически генерирует рабочее пространство, включающее проект и проекты его зависимостей.
Пакет Swift #
Tuist также поддерживает проекты пакетов SPM. Если вы работаете над пакетом SPM, вам не нужно ничего менять. Tuist автоматически обнаруживает ваш корневой Package.swift, и все возможности Tuist работают так, как если бы это был манифест Project.swift.
Чтобы начать, выполните tuist install и tuist generate в вашем пакете SPM. Теперь ваш проект должен иметь те же схемы и файлы, что и при стандартной интеграции SPM в Xcode. Кроме того, теперь вы можете запускать tuist cache и предварительно компилировать большинство зависимостей и модулей SPM, что значительно ускоряет последующие сборки.