반응형
iOS 개발자를 위한 Tuist 완벽 가이드
iOS 개발을 하다 보면 Xcode 프로젝트 설정이 점점 복잡해지고, 팀원이 많아질수록 설정 충돌이나 빌드 환경 불일치 문제가 발생합니다.
이런 문제를 해결하기 위해 등장한 도구가 바로 Tuist입니다.
Tuist란 무엇인가?
Tuist는 Xcode 프로젝트를 코드로 정의하고 자동 생성하는 CLI 도구입니다.
즉, “Xcode에서 클릭하며 설정하던 작업을 Swift 코드로 선언해두면 Tuist가 알아서 .xcodeproj 파일을 만들어주는 시스템”입니다.
이 방식은 특히 대규모 프로젝트나 멀티 모듈 구조를 다루는 개발자들에게 필수적인 관리 방식입니다.
Tuist의 핵심 개념
개념설명
| Project.swift | 하나의 앱 혹은 프레임워크 단위 프로젝트 정의 파일 |
| Workspace.swift | 여러 프로젝트를 묶어 관리하는 워크스페이스 정의 파일 |
| Tuist | 프로젝트 정의 파일을 읽어 Xcode 프로젝트를 생성하는 CLI 도구 |
| Target | 실제 빌드 가능한 단위 (App, Framework, Tests 등) |
| Dependencies | 타 모듈 혹은 외부 라이브러리와의 의존성 설정 |
Tuist의 주요 장점
1. 반복 작업 자동화
- Info.plist, Scheme, Build Settings 등 모든 설정을 Swift 코드로 관리
- Git을 통해 변경 이력 추적 가능
2. 모듈화에 최적화
- Feature, Core, Shared 등의 모듈을 독립적으로 구성 가능
- tuist generate 명령으로 전체 워크스페이스 자동 생성
3. 협업 충돌 최소화
- .xcodeproj 대신 Swift 코드로 관리하여 충돌 최소화
4. 빌드 속도 향상
- 모듈 단위 빌드로 불필요한 빌드 최소화
5. CI/CD 통합 용이
- GitHub Actions, Jenkins 등과 연동하여 일관된 환경 재현 가능
설치 및 기본 사용법
설치(mise 또는 brew 사용해서 설치)
// 1. mise 사용해서 설치하는 방법
// mise 설치
curl https://mise.run | sh
// 환경설정 등록
echo 'export PATH="$HOME/.local/bin:$HOME/.mise/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
source ~/.zshrc
// tuist 설치
mise install tuist
// tuist 버젼 전역 등록
mise use -g tuist@4.103.0
// 2. HomeBrew 사용해서 설치하는 방법
// HomeBrew 설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
// tuist 설치
brew tap tuist/tuist
brew install tuist
프로젝트 초기화
tuist init --platform ios
기본 폴더 구조 예시
.
├── Project.swift
├── Targets/
│ └── App/
│ ├── Sources/
│ ├── Resources/
│ └── Info.plist
└── Tuist/
└── Config.swift
Project.swift 기본 구조 예시
import ProjectDescription
let project = Project(
name: "MyApp",
targets: [
Target(
name: "MyApp",
platform: .iOS,
product: .app,
bundleId: "com.example.myapp",
deploymentTarget: .iOS(targetVersion: "17.0", devices: [.iphone]),
infoPlist: .file(path: "Targets/App/Info.plist"),
sources: ["Targets/App/Sources/**"],
resources: ["Targets/App/Resources/**"],
dependencies: [
.target(name: "MyFeature"),
.external(name: "Alamofire")
]
)
]
)
Workspace.swift (멀티 모듈 구성 예시)
import ProjectDescription
let workspace = Workspace(
name: "MyAppWorkspace",
projects: [
"Projects/App",
"Projects/Feature/**",
"Projects/Core/**"
]
)
Dependencies.swift (Swift Package Manager 연동)
import ProjectDescription
let dependencies = Dependencies(
swiftPackageManager: .init(
[
.remote(
url: "https://github.com/Alamofire/Alamofire.git",
requirement: .upToNextMajor(from: "5.6.0")
)
]
),
platforms: [.iOS]
)
패키지 다운로드 명령:
bash
tuist fetch
Tuist 주요 명령어 정리
명령어설명
| tuist init | 새 프로젝트 초기화 |
| tuist edit | Tuist 설정용 Xcode 프로젝트 열기 |
| tuist generate | Xcode 프로젝트(.xcodeproj) 생성 |
| tuist fetch | SPM Dependencies 다운로드 |
| tuist clean | 캐시 및 빌드 아티팩트 정리 |
| tuist graph | 의존성 그래프 시각화 (Mermaid 지원) |
모듈 구조 예시
Projects/
├── App/
│ └── Project.swift
├── Core/
│ ├── Network/
│ ├── Database/
│ └── UI/
└── Features/
├── Home/
├── Profile/
└── Settings/
협업 환경에서의 Tuist 활용 예시
- 개발자 A: Features/Home 모듈 수정
- 개발자 B: Features/Profile 모듈 수정
→ 서로 다른 모듈에서 작업하므로 충돌이 거의 없음
→ tuist generate 명령으로 동일한 개발 환경 재현 가능
CI/CD 통합 예시 (GitHub Actions)
name: iOS CI
on:
push:
branches: [ main ]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install Tuist
run: curl -Ls https://install.tuist.io | bash
- name: Generate Xcode Project
run: tuist generate
- name: Build
run: xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -sdk iphonesimulator
실무 활용 팁
- 각 모듈마다 별도의 Unit Test Target 생성 → 테스트 속도 향상
- Info.plist 최소화 및 공통 설정은 Config.swift로 통합 관리
- Team ID, Bundle Prefix 등은 Tuist/Config.swift에서 정의
- tuist scaffold 기능으로 템플릿 기반 빠른 모듈 생성 가능
정리 및 결론
Tuist는 대규모 iOS 프로젝트의 생산성, 협업 효율, 유지보수성을 크게 높여주는 도구입니다.
프로젝트를 코드로 정의함으로써
- 설정 충돌 최소화
- 일관된 환경 구성
- 자동화된 빌드 파이프라인
을 손쉽게 구현할 수 있습니다.
앞으로 SwiftUI, TCA, Modular Architecture를 함께 사용할 때 Tuist는 더욱 강력한 조합이 될 것입니다.
반응형
'Dev Study > iOS' 카테고리의 다른 글
| iOS 위젯에서 앱 특정 화면으로 이동하는 방법 (0) | 2025.11.06 |
|---|---|
| iOS 앱 크래시 발생 시 확인하는 방법 (0) | 2025.11.06 |
| iOS DocC 완전 정복 가이드: Swift 문서화를 위한 최고의 도구 (0) | 2025.11.06 |
| iOS TDD 완벽 가이드: 개념부터 실전까지 (0) | 2025.11.06 |
| Mac OS 업데이트 이후 Xcode 실행 (0) | 2024.12.11 |
| XCode - Unable to process request - PLA Update available (0) | 2024.11.17 |
| 다크모드 'traitCollectionDidChange’ deprecated in iOS 17.0 (0) | 2024.03.22 |
| 휴대전화번호 포멧(000-0000-0000)으로 만들기 (0) | 2024.01.16 |


