Appearance
Манифесты
Tuist по умолчанию использует Swift файлы в качестве основного способа определения проектов и рабочих пространств, а также настройки процесса генерации. В документации эти файлы называются манифест файлами.
Решение использовать Swift было вдохновлено менеджером пакетов Swift Package Manager, который также использует Swift файлы для описания пакетов. Благодаря использованию Swift мы можем использовать компилятор для валидации содержимого и повторного использования кода в различных манифест файлах, а также Xcode для предоставления первоклассного опыта редактирования благодаря подсветке синтаксиса, автодополнению и валидации.
Кэширование
Поскольку манифест файлы представляют собой файлы Swift, которые необходимо скомпилировать, Tuist кэширует результаты компиляции, чтобы ускорить процесс анализа. Поэтому вы заметите, что при первом запуске Tuist генерация проекта может занять немного больше времени. Последующие запуски будут быстрее.
Project.swift
Манифест Project.swift
объявляет проект Xcode. Проект создается в той же директории, где находится манифест файл, с именем, указанным в параметре name
.
swift
// Project.swift
let project = Project(
name: "App",
targets: [
// ....
]
)
КОРНЕВЫЕ ПЕРЕМЕННЫЕ
Единственная переменная, которая должна находиться в корне манифеста – это let project = Project(...)
. Если вам необходимо переиспользовать код в различных частях манифеста, вы можете воспользоваться функциями Swift.
Workspace.swift
По умолчанию Tuist генерирует Xcode Workspace, содержащий создаваемый проект и проекты его зависимостей. Если по какой-либо причине вы хотите настроить рабочее пространство для добавления дополнительных проектов или включения файлов и групп, вы можете сделать это, определив манифест Workspace.swift
.
swift
// Workspace.swift
import ProjectDescription
let workspace = Workspace(
name: "App-Workspace",
projects: [
"./App", // Путь к директории, содержащий файл Project.swift
]
)
NOTE
Tuist создаст граф зависимостей и включит проекты зависимостей в рабочее пространство. Вам не нужно добавлять их вручную. Это необходимо для того, чтобы система сборки правильно разрешила зависимости.
Мульти или монопроект
Часто возникает вопрос, следует ли использовать один или несколько проектов в рабочем пространстве. В мире без Tuist, где настройка монопроекта приводит к частым конфликтам Git, поэтому использование рабочих пространств приветствуется. Однако, поскольку мы не рекомендуем включать проекты Xcode, созданные Tuist, в репозиторий Git, конфликты Git не являются проблемой. Поэтому решение об использовании одного или нескольких проектов в рабочем пространстве остается за вами.
В проекте Tuist мы опираемся на монопроекты, поскольку время холодной генерации меньше (компилируется меньше манифест файлов), и мы используем помощников описания проекта как единицу инкапсуляции. Однако, вы можете использовать проекты Xcode в качестве единицы инкапсуляции для представления различных доменов вашего приложения, что более точно соответствует рекомендуемой структуре проекта Xcode.
Tuist.swift
Tuist предоставляет целесообразные значения по умолчанию для упрощения конфигурации проекта. Однако, вы можете настроить конфигурацию, определив Tuist.swift
в корне проекта, который будет использоваться Tuist для определения корня проекта.
swift
import ProjectDescription
let tuist = Tuist(
project: .tuist(generationOptions: .options(enforceExplicitDependencies: true))
)