1. Apa Itu Project Generation dan Build System Tools?
1. Apa Itu Project Generation dan Build System Tools?
Saat project iOS tumbuh dari satu target menjadi puluhan modul, mengelola .xcodeproj secara langsung menjadi sumber masalah — konflik git yang tidak perlu, inkonsistensi konfigurasi antar target, dan waktu build yang lambat karena tidak ada incremental caching yang benar.
Project generation tools menggantikan .xcodeproj yang di-commit ke git dengan sebuah definisi deklaratif yang lebih mudah dikelola manusia:
| Tool | Pendekatan | Target Pengguna |
|---|---|---|
| XcodeGen | YAML spec → xcodeproj | Tim kecil-menengah, migrasi mudah |
| Tuist | Swift DSL → xcodeproj + dependency graph | Tim menengah-besar, modular app |
| Bazel | BUILD files → build artifacts langsung | Tim besar, monorepo, distributed build |
Filosofi yang Berbeda
XcodeGen adalah lapisan tipis di atas Xcode — ia generate .xcodeproj yang tetap digunakan Xcode untuk build. Perubahan minimal, manfaat langsung: tidak ada lagi merge conflict di .xcodeproj.
Tuist selangkah lebih jauh — ia tidak hanya generate project, tapi juga memodelkan dependency graph seluruh workspace, mendeteksi implicit dependencies, dan memprovide cache untuk binary targets. Swift DSL-nya membuat konfigurasi type-safe dan reusable.
Bazel adalah paradigma berbeda sepenuhnya — ia menggantikan Xcode build system dengan graph-based hermetic build engine yang dapat mendistribusikan build ke ratusan mesin. Didesain untuk monorepo skala Google/Airbnb.