Миграция проекта XcodeGen
XcodeGen – это инструмент для генерации проектов, который использует YAML как формат конфигурации для описания Xcode-проектов. Многие организации перешли на него, пытаясь избавиться от частых конфликтов в Git, возникающих при работе с Xcode-проектами. Однако частые конфликты в Git – лишь одна из множества проблем, с которыми сталкиваются команды. Xcode открывает разработчикам множество нюансов и неявных конфигураций, которые усложняют сопровождение и оптимизацию проектов в масштабах организации. XcodeGen в этом плане ограничен по своей природе, поскольку является инструментом генерации Xcode-проектов, а не менеджером проектов. Если вам нужен инструмент, который выходит за рамки простой генерации Xcode-проектов, стоит рассмотреть Tuist.
SWIFT ВМЕСТО YAML
Многие организации также предпочитают Tuist в качестве инструмента генерации проектов, поскольку он использует Swift в качестве формата конфигурации. Swift – это язык программирования, знакомый разработчикам, который предоставляет им такие удобства, как автодополнение, проверка типов и валидация в Xcode.
Ниже приведены некоторые соображения и рекомендации, которые помогут вам перенести ваши проекты из XcodeGen в Tuist.
Генерация проекта
И Tuist, и XcodeGen предоставляют команду generate, которая преобразует описание вашего проекта в проекты и рабочие пространства Xcode.
xcodegen generatetuist generateРазница заключается в опыте редактирования. В Tuist вы можете выполнить команду tuist edit, которая на лету генерирует Xcode-проект, который можно открыть и сразу начать с ним работу. Это особенно удобно, когда нужно быстро внести изменения в проект.
project.yaml
Файл описания project.yaml из XcodeGen превращается в Project.swift. Кроме того, вы можете использовать Workspace.swift, чтобы настраивать, как проекты объединяются в рабочие пространства. Также можно создать проект Project.swift с целями, которые ссылаются на цели из других проектов. В таких случаях Tuist сгенерирует рабочее пространство Xcode, включающее все проекты.
/
project.yaml/
Tuist.swift
Project.swift
Workspace.swiftЯЗЫК XCODE
И XcodeGen, и Tuist используют язык и концепции Xcode. Однако конфигурация Tuist на основе Swift обеспечивает удобство работы с такими функциями Xcode, как автодополнение, проверка типов и валидация.
Шаблоны спецификаций
Одним из недостатков YAML как языка для конфигурации проектов является отсутствие встроенной поддержки повторного использования кода между YAML-файлами. Это распространённая потребность при описании проектов, которую XcodeGen решает с помощью собственного решения под названием "шаблоны". В Tuist же повторное использование реализовано на уровне самого языка Swift – через модуль
project description helpers, который позволяет использовать общий код во всех манифест-файлах проекта.import ProjectDescription
extension Target {
/**
This function is a factory of targets that together represent a feature.
*/
static func featureTargets(name: String) -> [Target] {
// ...
}
}import ProjectDescription
import ProjectDescriptionHelpers
let project = Project(name: "MyProject",
targets: Target.featureTargets(name: "MyFeature")) 