Section 1/132 menit

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.