why?

기존 Xcode 프로젝트 방식 문제점 Tuist의 해결 방식
.xcodeproj는 Git 충돌이 잦음 선언형 Project.swift로 충돌 없이 관리 가능
타겟/빌드 설정이 복잡하고 반복적임 설정을 코드로 재사용 가능 (템플릿, 헬퍼 등)
수동 설정이 많아 실수 가능성 높음 코드 기반이라 버그/설정 누락 줄일 수 있음
모듈 분리나 멀티 타겟 관리가 번거로움 Tuist는 멀티 모듈, 타겟 분리를 쉽게 관리 가능
CI/CD에서 .xcodeproj 의존성 있음 CI에서 tuist generate로 프로젝트 생성 가능

how?

MyApp/
├── Project.swift         👈 Xcode 프로젝트 정의
├── Targets/
│   ├── App/
│   │   ├── Sources/
│   │   └── Resources/
│   └── FeatureA/
│       ├── Sources/
│       └── Resources/
├── Tuist/
│   └── Config.swift      👈 전역 설정
└── .gitignore            👈 Tuist가 생성한 파일들은 무시

Tuist의 Prjoject.swift 는 기존에 xcode에서 .xcodeporj 에서 General, Build Settings, Build Phases 등 Xcode UI 로 개발자들이 직접 설정하는 부분을 Swift 언어로 분리하여 관리합니다.

# Tuist
/.build
/.xcodeproj
/.xcworkspace
/Tuist/Generated
/.swiftpm
/Derived
/DerivedData
/Project.xcworkspace
/Project.xcodeproj

# Tuist cache
/.tuist-cache

# Xcode
*.xcuserstate
*.xcscmblueprint
*.xcworkspace
*.xcodeproj
*.xccheckout

# User settings
*.xcuserdatad
*.moved-aside

.gitignore 파일에 Tuist가 생성하는 파일들과 .xcodeporj 관련 파일을 무시하도록 설정하면, 이제 .xcodeproj 파일은 Git으로 관리되지 않게 됩니다.

협업 개발자는 프로젝트를 pull받은 후 Project.swift에 정의된 내용을 기반으로 Tuist CLI를 사용해 Xcode 프로젝트를 생성하면 됩니다. 이제 우리는 .xcodeproj 파일로 인한 Git 충돌에서 완전히 자유로워졌습니다

Xcode 프로젝트 migratate

https://docs.tuist.dev/ko/guides/features/projects/adoption/migrate/xcode-project

공식 가이드문서를 따라 mirgration을 해보며 해당 내용을 상세하게 기록 앱 환경은 Cordova 기반 하이브리드 앱. 외부 의존성은 Firebase SPM으로 사용중입니다.

1) Tuist 설정 파일 생성

가이드 문서에서 요구하는 파일을 경로에 생성해줍니다.

MyApp/
├── Tuist.swift    👈 Tuist 설정을 정의(수정한거 없음)
├── Project.swift    👈 Xcode 프로젝트 정의
├── Tuist/
│   └── Package.swift  👈 Xcode 프로젝트 SPM 의존성 

Tuist로 마이그레이션하는 과정 중간에 기존 프로젝트를 Xcode로 열어 설정을 확인해야 할 때는, Project.swiftname 속성에 -Tuist와 같은 접미사를 추가하는 것이 좋습니다.

이렇게 하면 Tuist가 생성한 MyApp-Tuist.xcodeproj 파일과 기존 프로젝트의 MyApp.xcodeproj 파일이 구분되어, 원본 프로젝트가 변경되는 것을 방지할 수 있습니다.

2) Tuist 프로젝트 생성 명령어

Tuist 설정 파일을 토대로 .xcodeproj를 생성하는 명령어 입니다.

tuist install 👈 Xcode 프로젝트 의존성 설치(내기준 SPM) 
tuist generate 👈 Xcode 프로젝트 생성
tuist build 👈 생성된 프로젝트를 빌드해 문제가 없는지 확인 
tuist edit 👈 tuist 관련 파일을 xcode로 편집할수 있게 열어줍니다.

3) xcconfig 파일로 기존 프로젝트 설정 추출하기