# Структура каталогов {#directory-structure}

Хотя проекты Tuist обычно используются для замены проектов Xcode, они не ограничиваются этим сценарием. Проекты Tuist также применяются для генерации других типов проектов, таких как пакеты SPM, шаблоны, плагины и задачи. В этом документе описана структура проектов Tuist и способы их организации. В последующих разделах мы рассмотрим, как определять шаблоны, плагины и задачи.

## Стандартные проекты Tuist {#standard-tuist-projects}

Проекты Tuist — это **наиболее распространённый тип проектов, создаваемых с помощью Tuist.** Они используются для сборки приложений, фреймворков и библиотек. В отличие от проектов Xcode, проекты Tuist описываются на Swift, что делает их более гибкими и простыми в поддержке. Проекты Tuist также более декларативны, поэтому их легче понимать и анализировать. Ниже показана типичная структура проекта Tuist, который генерирует проект Xcode:

```bash
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](https://cococapods)), делая их настраиваемыми и оптимизируемыми. Подробнее <.localized_link href="/guides/features/projects/dependencies">здесь</.localized_link>.

- **Корневой каталог**: корневой каталог вашего проекта, который также содержит каталог `Tuist`.
  - <.localized_link href="/guides/features/projects/manifests#tuistswift"><bold>Tuist.swift:</bold></.localized_link> Этот файл содержит конфигурацию Tuist, общую для всех проектов, рабочих пространств и окружений. Например, его можно использовать для отключения автоматической генерации схем или для определения целевой платформы проектов.
  - <.localized_link href="/guides/features/projects/manifests#workspace-swift"><bold>Workspace.swift:</bold></.localized_link> Этот манифест представляет рабочее пространство Xcode. Оно используется для группировки других проектов, а также позволяет добавлять дополнительные файлы и схемы.
  - <.localized_link href="/guides/features/projects/manifests#project-swift"><bold>Project.swift:</bold></.localized_link> Этот манифест представляет проект Xcode. Он используется для определения целей, входящих в состав проекта, и их зависимостей.

При работе с указанным выше проектом команды ожидают найти файл `Workspace.swift` или `Project.swift` в рабочем каталоге или в каталоге, указанном через флаг `--path`. Манифест должен находиться в каталоге или подкаталоге каталога, содержащего каталог `Tuist`, который представляет корень проекта.

> [!TIP]
> Рабочие пространства Xcode позволяли разделять проекты на несколько проектов Xcode, чтобы снизить вероятность конфликтов при слиянии. Если вы использовали рабочие пространства именно для этого, в Tuist они не нужны. Tuist автоматически генерирует рабочее пространство, включающее проект и проекты его зависимостей.


## Пакет Swift <Badge type="warning" text="beta" /> {#swift-package-badge-typewarning-textbeta-}

Tuist также поддерживает проекты пакетов SPM. Если вы работаете над пакетом SPM, вам не нужно ничего менять. Tuist автоматически обнаруживает ваш корневой `Package.swift`, и все возможности Tuist работают так, как если бы это был манифест `Project.swift`.

Чтобы начать, выполните `tuist install` и `tuist generate` в вашем пакете SPM. Теперь ваш проект должен иметь те же схемы и файлы, что и при стандартной интеграции SPM в Xcode. Кроме того, теперь вы можете запускать <.localized_link href="/guides/features/cache">`tuist cache`</.localized_link> и предварительно компилировать большинство зависимостей и модулей SPM, что значительно ускоряет последующие сборки.
