XcodeGen 프로젝트 마이그레이션
XcodeGen은 YAML을 구성 형식으로 사용하여 Xcode 프로젝트를 정의하는 프로젝트 생성 도구입니다. 많은 조직이 Xcode 프로젝트 작업 시 자주 발생하는 Git 충돌을 피하기 위해 이를 도입했습니다. 그러나 빈번한 Git 충돌은 조직이 겪는 여러 문제 중 하나일 뿐입니다. Xcode는 개발자에게 수많은 복잡성과 암시적 구성을 노출시켜, 대규모 프로젝트의 유지보수와 최적화를 어렵게 만듭니다. XcodeGen은 Xcode 프로젝트를 생성하는 도구일 뿐 프로젝트 관리자가 아니기 때문에 설계상 이러한 부분에서 한계가 있습니다. Xcode 프로젝트 생성 이상의 도움을 주는 도구가 필요하다면 Tuist를 고려해 보세요.
많은 조직이 Tuist를 프로젝트 생성 도구로 선호하는 또 다른 이유는 구성 형식으로 Swift를 사용하기 때문입니다. Swift는 개발자에게 친숙한 프로그래밍 언어이며, Xcode의 자동 완성, 타입 검사 및 검증 기능을 편리하게 사용할 수 있게 해줍니다.
다음은 XcodeGen에서 Tuist로 프로젝트를 마이그레이션하는 데 도움이 되는 고려 사항과 지침입니다.
프로젝트 생성#
Tuist와 XcodeGen 모두 프로젝트 선언을 Xcode 프로젝트 및 워크스페이스로 변환하는 generate 명령을 제공합니다.
xcodegen generate
tuist generate
차이는 편집 경험에 있습니다. Tuist에서는 tuist edit 명령을 실행하여 즉시 Xcode 프로젝트를 생성하고 열어 작업을 시작할 수 있습니다. 프로젝트에 빠른 변경 사항을 적용해야 할 때 특히 유용합니다.
project.yaml#
XcodeGen의 project.yaml 설명 파일은 Project.swift가 됩니다. 또한 워크스페이스 내 프로젝트 그룹화 방식을カスタ마이즈하기 위해 Workspace.swift를 사용할 수 있습니다. 다른 프로젝트의 타겟을 참조하는 타겟을 포함한 프로젝트 Project.swift도 만들 수 있습니다. 이 경우 Tuist는 모든 프로젝트를 포함하는 Xcode 워크스페이스를 생성합니다.
/
project.yaml
/
Tuist.swift
Project.swift
Workspace.swift
XcodeGen과 Tuist 모두 Xcode의 언어와 개념을 따릅니다. 다만 Tuist의 Swift 기반 구성은 Xcode의 자동 완성, 타입 검사 및 검증 기능을 편리하게 사용할 수 있게 해줍니다.
스펙 템플릿#
프로젝트 구성 언어로서 YAML의 단점 중 하나는 기본적으로 YAML 파일 간 재사용성을 지원하지 않는다는 점입니다. 이는 프로젝트 설명 시 흔히 필요한 요구사항이며, XcodeGen은 이를 "템플릿" 이라는 자체 고유 솔루션으로 해결했습니다. Tuist에서는 재사용성이 언어 자체인 Swift에 내장되어 있으며, 프로젝트 설명 헬퍼라는 Swift 모듈을 통해 모든 매니페스트 파일에서 코드를 재사용할 수 있습니다.
::: code-group
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 // [!code highlight]
let project = Project(name: "MyProject",
targets: Target.featureTargets(name: "MyFeature")) // [!code highlight]