3. Teori: Cara Kerja Xcode Build System
3. Teori: Cara Kerja Xcode Build System
Build Graph dan Dependency Resolution
Xcode menggunakan llbuild (Low-Level Build System) yang mengelola directed acyclic graph (DAG) dari semua build tasks. Setiap node dalam graph adalah sebuah task (kompilasi satu file, linking, copy resources, dsb). llbuild menentukan urutan eksekusi dan memaksimalkan paralelisme.
Source Files (.swift)
↓
swiftc (per module)
↓
.o files (object files)
↓
Linker (ld)
↓
Mach-O Binary
↓
Code Signing
↓
.app bundle
Incremental Compilation di Swift
Swift compiler menggunakan dependency tracking file (.d files) untuk melacak dependency antar file. Ketika sebuah file berubah, compiler hanya recompile file tersebut dan semua file yang mengimpor simbol dari file itu.
Ada dua mode incremental compilation:
- File-level incremental: Recompile file yang berubah beserta direct dependants-nya.
- Cross-module incremental (Swift 5.4+): Lebih granular — hanya recompile jika interface modul berubah, bukan implementasi.
Whole-Module Optimization (WMO)
WMO mengkompilasi seluruh modul dalam satu proses swiftc, memungkinkan optimasi cross-file seperti inlining dan dead code elimination. Tradeoff: tidak ada incremental build dalam satu modul — semua file dikompilasi ulang setiap kali.
Rekomendasi: WMO hanya untuk Release build. Debug build gunakan incremental.
Explicit Module Build
Xcode 15+ memperkenalkan Explicit Module Build — setiap modul dikompilasi secara eksplisit dengan semua dependensinya ditentukan di awal. Ini menghilangkan "implicit module scanning" yang sebelumnya dilakukan di setiap kompilasi file.