Перейти к содержимому

Миграция проекта XcodeGen

XcodeGen — это инструмент генерации проектов, который использует YAML в качестве формата конфигурации для определения проектов Xcode. Многие организации выбрали его, пытаясь избежать частых конфликтов в Git, возникающих при работе с проектами Xcode. Однако частые конфликты в Git — лишь одна из многих проблем, с которыми сталкиваются организации. Xcode предоставляет разработчикам множество сложных и неявных настроек, что затрудняет поддержку и оптимизацию проектов на масштабе. XcodeGen не решает эти проблемы по своей природе, поскольку это инструмент для генерации проектов Xcode, а не менеджер проектов. Если вам нужен инструмент, который помогает не только генерировать проекты Xcode, стоит рассмотреть Tuist.

Swift вместо YAML

Многие организации также предпочитают Tuist в качестве инструмента генерации проектов, потому что он использует Swift в качестве формата конфигурации. Swift — это язык программирования, знакомый разработчикам, который предоставляет им удобство использования функций автодополнения, проверки типов и валидации в Xcode.

Ниже приведены некоторые рекомендации и соображения, которые помогут вам перенести ваши проекты с XcodeGen на Tuist.

Генерация проекта#

И Tuist, и XcodeGen предоставляют команду generate, которая преобразует объявление вашего проекта в проекты и рабочие области Xcode.

bash
xcodegen generate
bash
tuist generate

Разница заключается в опыте редактирования. В Tuist вы можете выполнить команду tuist edit, которая на лету генерирует проект Xcode, который можно открыть и начать с ним работать. Это особенно полезно, когда нужно быстро внести изменения в проект.

project.yaml#

Файл описания project.yaml в XcodeGen становится Project.swift. Кроме того, вы можете использовать Workspace.swift, чтобы настроить группировку проектов в рабочих областях. Также можно иметь файл проекта Project.swift с целями, которые ссылается на цели из других проектов. В таких случаях Tuist сгенерирует рабочую область Xcode, включающую все проекты.

bash
/
project.yaml
bash
/
Tuist.swift
Project.swift
Workspace.swift
Язык Xcode

И XcodeGen, и Tuist используют язык и концепции Xcode. Однако конфигурация Tuist на основе Swift предоставляет вам удобство использования функций автодополнения, проверки типов и валидации в Xcode.

Шаблоны спецификаций#

Один из недостатков YAML как языка для конфигурации проектов заключается в том, что он не поддерживает повторное использование кода между файлами YAML «из коробки». Это распространенная потребность при описании проектов, которую XcodeGen пришлось решать с помощью собственного проприетарного решения под названием «шаблоны». В Tuist возможность повторного использования встроена в сам язык Swift и реализуется через модуль Swift под названием помощники описания проекта, которые позволяют повторно использовать код во всех файлах манифеста.

::: code-group

swift
import ProjectDescription
extension Target {
/**
This function is a factory of targets that together represent a feature.
*/
static func featureTargets(name: String) -> [Target] {
// ...
}
}
swift
import ProjectDescription
import ProjectDescriptionHelpers // [!code highlight]
let project = Project(name: "MyProject",
targets: Target.featureTargets(name: "MyFeature")) // [!code highlight]