In 30 Sekunden
- Ursache: macOS beta ist jetzt Teil der CI-Ausführungsschicht — kein Neben-Testimage mehr.
- Symptom: gleicher Commit lokal grün, in CI rot, Retry grün — nicht als flaky test behandeln.
- Fix: Produktions-CI auf stabilem macOS; beta nur auf dediziertem Mac mini, PASS/FAIL zurückgeben.
1. Was sich geändert hat
Nach WWDC 2026 kommen macOS 27 beta und Xcode 18 beta als Paar. Für das neue SDK muss der CI-Host in die beta-Spur — die Pipeline sieht nicht mehr so aus:
code → build → test → artifact
sondern eher so:
code + Xcode beta + macOS beta + Simulator + Keychain → build
Selten liegt es am Diff. beta ist zur Laufzeit geworden — und beta ändert sich wöchentlich.
2. Vier Fehlermodi (nach WWDC)
| Mechanismus | Was Sie sehen |
|---|---|
| Xcode an macOS beta gebunden | Runner können Versionen nicht einfrieren; lokal stabil vs. CI beta passt nie |
| Simulator-Jitter | Kaltstart +30–80 %, UI-Tests timeouten, Kernel-Scheduling schwankt |
| Signing / Keychain-Drift | Intermittierende codesign-Fehler, Retry grün — siehe Signing-Leitfaden |
| Strengere Swift-Toolchain | Inkrementelle Builds übersehen Dateien; clean build nötig |
3. Bekannte Symptome
- Zeitdrift: gleicher Commit,
xcodebuildspringt von 18 auf 37 Minuten - Ergebnisdrift: lokal grün → CI rot → Retry grün (Umgebungsrauschen, kein Test-Flakiness)
- Falsche Sicherheit: CPU idle, kein Stacktrace, Tests scheitern zufällig
Das unterscheidet sich von warum CI 2–3× langsamer als lokal ist: dort geht es um Cache-Tuning. Hier OS-Unsicherheit — YAML hilft nicht.
4. Fix: beta-Ausführungsisolierung
beta nie auf Produktions-CI installieren. Auf wegwerfbarem Mac mini laufen lassen und Ergebnisse zurückstreamen.
Stabile CI (Release-macOS + Xcode)
↓
Remote Mac mini (nur beta)
↓
PASS / FAIL + IPA zurückgeben
Vier Schritte:
- beta-only Mac mini bereitstellen (eigener User + Keychain)
- Haupt-Runner auf stabilem macOS für Merges und Releases fixieren
- beta-Stack auf Isolationsknoten; Trigger via
[beta, ios]-Labels oder nächtlichem SSH - Nur Ergebnisse zurück — keine beta-Caches auf Produktions-Runner mounten
Runner-Labels siehe Mac-mini-Self-hosted-Runner-Leitfaden; für Release-Sprint-beta-Matrizen temporäre Build-Matrix.
5. Welche Option wählen
| Ansatz | Stabilität | Urteil |
|---|---|---|
| beta auf Alltags-Mac | ❌ Keychain-Verschmutzung, Rollback schwer | ❌ |
| GitHub-hosted Runner | ⚠️ Queue + veraltete beta-Images | ⚠️ nur Ergänzung |
| VM / Snapshots | ❌ Simulator-GPU instabil | ❌ |
| Remote Mac mini beta-Knoten | ✅ isoliert, wegwerfbar | ✅ |
6. FAQ
Beeinflusst macOS beta die CI?
Ja — Simulatoren, Toolchain-Defaults und Signing driften. Gleicher Commit, andere Ergebnisse.
beta-CI auf dem Alltags-Mac?
Für persönliche Tests ok; auf geteilten oder Produktions-Build-Maschinen vermeiden.
Reichen GitHub Actions?
Hilft bei Queues, aber beta-Nichtdeterminismus bleibt.
Best Practice?
Dedizierter beta-Mac mini + eingefrorene Haupt-CI. Nach WWDC ist das Problem unkontrollierte Umgebung, nicht „Build failed“.
Isolierung in 48 Stunden prüfen
Haupt-Runner einfrieren → nächtlicher beta-Knoten auf gleichem Commit → PASS-Raten vergleichen. Stabile Hauptlinie + zitternde beta = Split funktioniert. Onboarding-Checkliste · Tarife