Section 11/171 menit
11. Migrasi Bertahap dari XcodeGen ke Tuist
11. Migrasi Bertahap dari XcodeGen ke Tuist
Fase 1: Analisis dan Persiapan
swift
# Langkah 1: Audit project.yml saat ini
# Buat inventory semua targets, dependencies, dan build settings
cat project.yml | grep -E "^ [a-zA-Z]+" | awk '{print $1}' > targets.txt
# Langkah 2: Install Tuist via mise
mise use tuist@latest
# Langkah 3: Buat struktur folder Tuist/
mkdir -p Tuist/ProjectDescriptionHelpers
Fase 2: Buat Tuist Config dan Helpers Minimal
swift
// Tuist/Config.swift
import ProjectDescription
let config = Config(
compatibleXcodeVersions: .list(["16.2"]),
swiftVersion: "6.0"
)
swift
// Tuist/Package.swift — pindahkan SPM dependencies dari project.yml
import PackageDescription
let package = Package(
name: "MyApp",
dependencies: [
// Pindahkan satu per satu dari project.yml packages section
.package(url: "https://github.com/Alamofire/Alamofire", from: "5.9.0"),
]
)
Fase 3: Migrasi Module per Module (Leaf First)
swift
// Strategi: mulai dari leaf modules (tidak ada dependency ke first-party)
// Urutan: Core modules dulu, lalu Shared, lalu Feature, terakhir App
// Langkah per module:
// 1. Buat Projects/Core/NetworkKit/Project.swift
// 2. Tambahkan ke Workspace.swift
// 3. Hapus entry dari project.yml
// 4. Jalankan tuist generate + xcodegen generate bersama-sama
// 5. Validasi build masih hijau
// 6. Lanjut ke module berikutnya
swift
// Projects/Core/NetworkKit/Project.swift — contoh migrasi pertama
import ProjectDescription
import ProjectDescriptionHelpers
// Equivalent dari XcodeGen:
// NetworkKit:
// type: framework
// platform: iOS
// sources: Modules/NetworkKit/Sources
// settings:
// base:
// PRODUCT_BUNDLE_IDENTIFIER: com.company.networkkit
// SWIFT_VERSION: 6.0
let project = Project.module(
name: "NetworkKit",
layer: .core,
dependencies: []
)
Fase 4: Validasi dan Cutover
swift
# Jalankan kedua tools secara paralel selama transisi
# Sampai semua module dipindah, generate keduanya dan validasi identik
# XcodeGen (legacy)
xcodegen generate --spec project.yml --project ./
# Tuist (new)
tuist generate
# Build keduanya dan bandingkan hasil
xcodebuild build -scheme MyApp -destination "generic/platform=iOS Simulator"
# Setelah semua module dipindah:
# 1. Hapus project.yml
# 2. Hapus .gitignore entry untuk XcodeGen
# 3. Tambahkan .gitignore entry untuk Tuist generated files
# 4. Update CI scripts