Section 3/171 menit
3. Teori: Arsitektur Internal Tuist
3. Teori: Arsitektur Internal Tuist
Pipeline Eksekusi tuist generate
swift
Tuist/Package.swift + Projects/**/*.swift
↓
1. Manifest Loading
Tuist compile semua *.swift di Tuist/ dan Projects/**/ sebagai Swift module
menggunakan SwiftPM, lalu load sebagai dynamic library
↓
2. Graph Construction
Bangun dependency graph dari semua Target dan dependencies yang dideklarasikan
Validasi tidak ada circular dependency
Validasi bahwa referenced targets ada
↓
3. Linting
Cek duplicate bundle IDs, missing Info.plist, invalid settings, dll
↓
4. Side Effect Processing
Jalankan plugins dan pre-generation hooks
↓
5. Project Generation
Convert Tuist's internal model ke XcodeProj model
Generate .xcodeproj dan .xcworkspace files
↓
6. Post-Generation
Jalankan post-generation hooks
Update derived data jika perlu
Hash Calculation untuk Binary Cache
Binary cache Tuist menggunakan deterministic hash untuk setiap target. Hash dihitung dari:
swift
Target Hash Input:
├── Source files (content hash, bukan timestamp)
├── Resource files (content hash)
├── Build settings (sorted key-value pairs)
├── Swift flags (copts)
├── Dependency hashes (recursive — perubahan di leaf otomatis invalidate dependents)
├── Xcode version (dari .xcode-version atau System Xcode)
├── Swift toolchain version
└── Platform & deployment target
Karena hash bersifat content-based (bukan time-based), cache valid selama tidak ada konten yang berubah — bukan hanya karena git pull.
Manifest Compilation
Tuist file (Project.swift, Workspace.swift, dll) dikompilasi sebagai Swift module. Ini berarti:
- Import works: bisa import ProjectDescriptionHelpers
- Type checking: kesalahan konfigurasi terdeteksi saat compile manifest
- IDE support: autocomplete dan error highlighting di Project.swift
swift
Tuist/
├── ProjectDescriptionHelpers/ ← dikompilasi sebagai module terpisah
│ ├── Project+Templates.swift
│ └── Settings+Base.swift
└── Config.swift ← bisa import ProjectDescriptionHelpers
swift
Projects/
└── FeatureHome/
└── Project.swift ← bisa import ProjectDescriptionHelpers