Warum Clean Build statt inkrementeller Kompilierung messen?
Im Alltag recompiliert Xcode nur betroffene Module – oft in Sekunden. Inkrementelle Builds hängen jedoch am DerivedData-Cache: Wechseln Sie die Maschine oder leeren CI den Cache, zählt nur der volle Clean Build. Diese Szenarien erzwingen einen Neustart:
- CI-Job leert DerivedData beim Start
- Xcode/macOS-Upgrade, alter Cache ungültig
- Neue Entwicklungsmaschine ohne Cache
- ausführen
xcodebuild clean buildoderxcodebuild archiveRelease-Build
Clean-Build-Zeit misst, ob die Maschine die iOS-Pipeline trägt. Inkrementell spiegelt Gewohnheiten, nicht Hardware-Deckel. Alle Daten aus vollem Clean Build – gleicher Start für alle drei Maschinen.
Testumgebung & Projekt
Gleiches Projekt, gleiches Xcode, ähnliche Raumtemperatur – je drei Läufe, Median.
Vor jedem Lauf rm -rf ~/Library/Developer/Xcode/DerivedData –
Kompilierung von null.
Testprojekt: SwiftUI-Mittel-App, ~92k Swift-Zeilen, 2 Extension Targets (WidgetKit + Share), ~5.800 Swift-Dateien, ~12 lokale Swift Packages.
Xcode: 16.4, macOS 15.5 Sequoia (alle drei identisch).
Läufe: je 3× Clean Build + 3× Archive, Median. Clean: xcodebuild clean build -scheme AppName -destination generic/platform=iOS; Archive: xcodebuild clean archive -scheme AppName -archivePath /tmp/app.xcarchive.
Hardware: ① MacBook Air M2 (2022) · 8-Core · 16 GB · 256 GB SSD; ② MacBook Pro 14" M1 Pro (2021) · 10-Core · 16 GB · 512 GB SSD; ③ VPSRox Mac mini M4 (2024) · 10-Core (4P+6E) · 16 GB · 256 GB NVMe · Rechenzentrum (Hongkong).
MacBook Air M2: 8-Core (häufigste Variante), nicht 10-Core Top. M1 Pro und VPSRox M4 Mini je 10-Core – Generation (M1 Pro vs. M4) und Kühlung vergleichbar.
Clean Build: Vollkompilierung
Median Wall-Clock über drei Clean Builds, RAM-Spitze und Xcode-CPU-Peak.
RAM via memory_pressure und Aktivitätsanzeige während des Builds.
| Maschine | CPU | Clean-Build-Median | RAM-Spitze | Abweichung Lauf 3 vs. 1 |
|---|---|---|---|---|
| MacBook Air M2 (8-Core) | 8-Core M2 | 5m 42s | 11,8 GB (leichter Swap) | +38s (deutliches Drosseln) |
| MacBook Pro 14" M1 Pro (10-Core) | 10-Core M1 Pro | 4m 08s | 10,9 GB (kein Swap) | +14s (leichtes Drosseln) |
| VPSRox Mac mini M4 (10-Core) | 10-Core M4 | 3m 11s | 9,4 GB (kein Swap) | +2s (kaum Abweichung) |
Spalte „Lauf 3 vs. 1“: MacBook Air +38 s – passiv gekühlt, Thermodrosselung. MacBook Pro +14 s mit aktiver Kühlung. VPSRox M4 im Rack nur +2 s – Messrauschen.
Einmalig ist MacBook Pro M1 Pro stark. In CI zählt aber Lauf 10 und 50 – stabile Dauerleistung. Kühlung verstärkt den Unterschied deutlich.
Archive-Pipeline: Zeitvergleich
Archive näher an Produktion: neben Kompilierung Signierung, Bitcode (falls aktiv), dSYM und Symbol-Paket. Archive dauert typisch 1,2–1,4× Clean Build.
| Maschine | Archive-Median | Mehraufwand vs. Clean Build | Durchschnitt 5 Läufe (Schätzung) |
|---|---|---|---|
| MacBook Air M2 (8-Core) | 7m 18s | +1m 36s | ca. 8m 40s (Thermodrosselung) |
| MacBook Pro 14" M1 Pro (10-Core) | 5m 22s | +1m 14s | ca. 5m 45s |
| VPSRox Mac mini M4 (10-Core) | 4m 06s | +55s | ca. 4m 10s (sehr stabil) |
Archive: M4-Vorteil bei dSYM/Symbolen ~19 % gegenüber M1 Pro – nicht nur Taktrate, sondern Speicherbandbreite und Neural Engine.
fastlane gym = Archive + Export – am M4 Mini ~5m 30s,
MacBook Air M2 ~10 Min.
Mehrere Varianten/Tag (dev/staging/prod) – spürbarer Release-Rhythmus.
Thermodrosselung & RAM: versteckte Faktoren
Viele Tests nur Kaltstart – Thermal Accumulation fehlt. Apple Silicon drosselt bei Temperatur CPU/GPU – besonders fanlos am MacBook Air.
Thermodrosselung am MacBook Air M2
MacBook Air M2: Unterseite nach Lauf 2 (~11 Min.) heiß –
pmset -g thermlog: CPU_Speed_Limit 100→~78, Lauf 3 +30 s.
Mehrere CI-Jobs am Air: +15–30 % vs. Kaltstart, schwer vorhersagbar.
Aktive Kühlung am MacBook Pro M1 Pro
MacBook Pro mit aktiver Kühlung deutlich besser, nicht immun. >28 °C Innenraum oder mehrere Simulatoren – leichte Drosselung. 14 s Abweichung aus wärmerem Lauf 3; bei 22 °C nur ~8 s.
Thermische Stabilität im Rechenzentrum
VPSRox: Rack 18–22 °C, Mac mini M4 mit Lüfter – konsistentere Build-Zeiten als jedes Notebook. Lauf 1 vs. 3: 2 s. Für CI: p99 planbar statt Überraschungs-Timeout.
MacBook Air am Fenster, Sommer >27 °C – frühere, stärkere Drosselung. Winter oft 20–30 % schneller. Messen in Ihrer Umgebung, nicht im Klimaraum der Reviews.
RAM-Spitze & Swap-Einfluss auf Geschwindigkeit
Mit 16 GB Unified Memory ist RAM-Druck bei großen iOS-Projekten real.
Linker, Signierung und Swift-Compiler parallel – speicherhungrig.
Gegengeprüft mit vm_stat und memory_pressure.
MacBook Air M2: ~11,8 GB Peak, kurzer Swap (200–400 MB) bei parallelen Extensions – SSD beeinflusst Build. M1 Pro ~10,9 GB, kein Swap in drei Läufen. VPSRox M4 ~9,4 GB – M4 braucht weniger Kopien/Zwischenobjekte für dieselbe Aufgabe.
| Maschine | RAM-Spitze | Swap ausgelöst? | CPU-Spitze beim Kompilieren | SSD-Schreibvolumen (Clean Build) |
|---|---|---|---|---|
| MacBook Air M2 | 11.8 GB | Ja (~300 MB) | ca. 780 % (~8 Kerne voll) | ca. 4,2 GB |
| MacBook Pro M1 Pro | 10.9 GB | Nein | ca. 980 % (~10 Kerne voll) | ca. 3,8 GB |
| VPSRox Mac mini M4 | 9.4 GB | Nein | ca. 960 % (~10 Kerne voll) | ca. 3,5 GB |
Über 200k Zeilen oder viele Swift Packages: 16 GB am Air enger. VPSRox SSD-Erweiterung (+1TB $2.6/Tag, +2TB $5.2/Tag), aber noch kein RAM >16 GB – vorab bedenken.
Wann lokales MacBook reicht
Nicht jedes Team braucht Cloud – in diesen Fällen reicht Ihr MacBook:
- Kleines Projekt (< 30k Swift-Zeilen): Clean Build auf jedem Apple-Silicon-MacBook in unter 2 Min. – kein Engpass.
- Wenig CI (< 5 Builds/Tag): Selbst 7–8 Min. pro Clean Build – unter 40 Min./Tag, noch akzeptabel.
- Solo-Entwickler, lokales Debug: Inkrementell reicht meist; Clean Build nur beim Release – MacBook Pro M1 Pro+ ausreichend.
- MacBook Pro M3/M4 Nutzer: Neuestes MacBook Pro (M4 Max) ähnlich Mac mini M4 – Unterschied eher Stabilität bei Dauer-Builds als Einzellauf.
Cloud ernst prüfen bei: CI > 20 Builds/Tag, geteilte Build-Umgebung („works on my machine“), MacBook Air + wachsendes Projekt oder mehrere isolierte Builds.
Gesamtbewertung: Kosten vs. Nutzen
Cloud-Kosten: VPSRox Mac mini M4 $21.8/Tag, monatlich ~$109.1 – günstiger als neues MacBook Pro, aber laufende Kosten. Was sparen Sie?
5-köpfiges iOS-Team, 30 Clean Builds/Archives/Tag: Air M2 ~8 Min./Lauf (leichte Drosselung) = 240 Min.; VPSRox M4 ~123 Min. – ~117 Min./Tag gespart, schnelleres Review-Feedback und Release-Fenster bei parallelen Branches.
Versteckte Kosten: Warten und Kontextwechsel. Unter 5 Min. oft Progress-Bar; ab 8 Min. andere Tasks – Flow braucht ~20 Min. zurück. $109/Monat eher „Fokus-Tool“ als reine Servermiete.
Cloud sinnvoll: Projekt > 50k Zeilen + MacBook Air + CI > 15 Builds/Tag – alle drei zutreffend.
Lokal upgraden: hauptsächlich lokales Debug + mittleres Projekt + knappes Budget – MacBook Pro M4 kann besser sein als Miete.
Ergänzende Kombination: lokales MacBook für inkrementell & Debug, CI auf exklusivem Cloud-Knoten – klare Trennung.
Cloud-M4 statt instabilem lokalem Mac
VPSRox: exklusiver Mac mini M4 im Rechenzentrum, keine Thermodrosselung, volle Physik, Tagesmiete ohne Vertrag. Lieferung 1–5 Min., fünf globale Knoten.