Yazılım Notları

Mobil Mühendislik

Bir iOS Uygulamasını Geleceğe Hazırlamak: Modularization, Build Performance ve Developer Experience

Future-Proofing an iOS App: Modularization, Build Performance and Developer Experience

Bir iOS uygulamasını geleceğe hazırlamak, modül sınırlarını netleştirip Build Time'ı ölçülen bir ürün metriği gibi yönetmek demektir; Xcode 27'de Agent'lar her doğrulamada derleme yaptığı için bu süre artık hem insanın hem Agent'ın hızını belirliyor.

Kabul görüyor

Build Time artık konfor değil ürün metriği: modül sınırlarını net çizip derlemeyi ölçen ekip hem insanı hem Agent'ı hızlandırır.

Apple'ın resmî derleme rehberi ve Tuist modülerleştirip ölçmeyi öneriyor; Build Time'ın Agent temposunu belirlemesi daha yeni, Xcode 27 ile görünür oldu.

Zihinsel model

Modül grafiği bir yol ağıdır: tek yönlü katmanlı yollarda trafik paralel akar, örümcek ağında tek kaza bütün şehri kilitler.

Neden

  • Değişiklik yalnızca etkilenen modülleri yeniden derletir; interface modülleri uygulama detayını gizleyerek yeniden derleme zincirini keser.
  • İçerik özetiyle çalışan cache ve binary cache dokunulmamış modülleri hiç derletmez; en büyük kazanç derlememekten gelir.
  • Xcode 27'de Agent her doğrulama turunda derleyip test ettiği için Build Time saatteki deneme sayısını doğrudan sınırlar.

Kanıt

Binary cache, büyük modüler bir iOS kod tabanında dakikanın altında biten yerel derlemelerin payını üç katından fazla artırdı.

Tuist, Toss vaka çalışması 2026

Xcode 26 compilation cache projeye göre yüzde 77'ye varan hızlanma sağladı, ama bazı projelerde kazanç sınırlı kaldı.

Tuist Blog 2025

Xcode 27'de Agent'lar test koşarak, önizleme ve simülatörü kontrol ederek kendi işini doğruluyor; her doğrulama bir derleme demek.

Apple Newsroom 2026

Karşı görüş

Modülerleştirme bedava değil: her modül yapılandırma, bağımlılık yönetimi ve link süresi ekler, çok sayıda dinamik framework açılışı yavaşlatır. Cache de kötü bir bağımlılık grafiğinin yerini tutmaz.

Kavramlar

Interface modülüYalnızca protokol ve modelleri taşır; uygulama değişince bağımlı modüller yeniden derlenmez.
Explicit modulesBağımlılıklar derleme öncesi taranır, modül derlemeleri ayrı görevler olarak paralel planlanır.
Compilation cachingÇıktıyı dosya yoluna değil içerik özetine göre saklar; dal değişse de yeniden kullanılır.
Binary cacheDokunulmayan modülleri önceden derlenmiş XCFramework'ten çeker, onları derlemeden çıkarır.
Critical pathParalelleşemeyen en uzun görev zinciri; toplam derleme süresini o belirler.

Pratikte

  • Temiz, artımlı ve CI derleme sürelerini her gün aynı makinede ölçüp panoda izle.
  • Feature'ları birbirinin uygulamasına değil interface modülüne bağla; ihlal olursa CI'ı kır.
  • Modül bazlı derleme ve test komutlarını Agent'ın okuyacağı proje talimat dosyasına yaz.
Önce bunu okuThe physics of build systemsDerleme hızını grafiğin sınırladığını, cache'in bunu telafi edemeyeceğini anlatır.