Section 4/221 menit

4. Mengukur Build Time

4. Mengukur Build Time

Sebelum optimasi, ukur dulu. Optimasi tanpa data adalah tebak-tebakan.

Build Timing Summary

Aktifkan timing summary di Xcode:

swift
# Tambahkan ke shell profile atau jalankan sekali per sesi
defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

Setelah build, Xcode menampilkan total waktu di activity area.

Per-File Compilation Time

swift
# Tambahkan OTHER_SWIFT_FLAGS di Build Settings (Debug only)
-Xfrontend -warn-long-function-bodies=100
-Xfrontend -warn-long-expression-type-checking=100

Nilai 100 artinya: warning jika satu fungsi atau expression butuh lebih dari 100ms untuk dikompilasi. Turunkan threshold untuk menemukan bottleneck spesifik.

Build Timeline di Xcode

Buka Report Navigator (Cmd+9) → pilih build terakhir → klik ikon clock di kanan atas. Xcode 14+ menampilkan waterfall timeline semua build tasks, memperlihatkan apa yang berjalan paralel dan apa yang blocking.

xcode-build-times

swift
# Install tool open-source untuk analisis lebih detail
brew install kiliankoe/formulae/xcode-build-times

# Jalankan setelah build
xcode-build-times generate
# Output: HTML report dengan breakdown per file

Script Pengukuran Otomatis

swift
#!/bin/bash
# Ukur build time dan simpan ke file log
# scripts/measure-build-time.sh

SCHEME="${1:-MyApp}"
DESTINATION="${2:-platform=iOS Simulator,name=iPhone 16}"
LOG_FILE="build-time-$(date +%Y%m%d-%H%M%S).log"

echo "Measuring clean build time for scheme: $SCHEME"
START=$(date +%s)

xcodebuild clean build \
  -scheme "$SCHEME" \
  -destination "$DESTINATION" \
  -configuration Debug \
  2>&1 | tee "$LOG_FILE" | grep -E "(error:|warning:|Build succeeded|Build FAILED)"

END=$(date +%s)
ELAPSED=$((END - START))

echo ""
echo "Build time: ${ELAPSED}s"
echo "Log saved to: $LOG_FILE"

# Simpan ke CSV untuk tracking regresi
echo "$(date +%Y-%m-%d),${SCHEME},${ELAPSED}" >> build-times.csv