Section 3/221 menit

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.

swift
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:

  1. File-level incremental: Recompile file yang berubah beserta direct dependants-nya.
  2. 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.