En 30 secondes
- Cause : macOS beta fait partie de la couche d'exécution CI — plus une image de test annexe.
- Symptôme : même commit OK en local, KO en CI, OK au retry — ne le traitez pas comme un flaky test.
- Correctif : CI prod sur macOS stable ; beta uniquement sur Mac mini dédié, retour PASS/FAIL.
1. Ce qui a changé
Après WWDC 2026, macOS 27 beta et Xcode 18 beta arrivent en duo. Pour tester le nouveau SDK, l'hôte CI doit monter dans le train beta — le pipeline ne ressemble plus à :
code → build → test → artifact
mais plutôt à :
code + Xcode beta + macOS beta + Simulator + Keychain → build
Le problème n'est rarement votre diff. beta est devenu le runtime — et beta change chaque semaine.
2. Quatre modes d'échec (post-WWDC)
| Mécanisme | Ce que vous voyez |
|---|---|
| Xcode lié à macOS beta | Impossible de figer les versions ; local stable vs CI beta jamais alignés |
| Jitter du Simulator | Démarrage à froid +30–80 %, tests UI en timeout, scheduling noyau instable |
| Dérive signature / Keychain | Échecs codesign intermittents, retry OK — voir guide signature |
| Toolchain Swift plus stricte | Builds incrémentaux ratent des fichiers ; clean build requis |
3. Symptômes familiers
- Dérive temporelle : même commit,
xcodebuildpasse de 18 à 37 minutes - Dérive de résultat : local vert → CI rouge → retry vert (bruit d'environnement, pas flakiness de test)
- Fausse confiance : CPU idle, pas de stack trace, tests qui échouent au hasard
Différent de pourquoi la CI est 2–3× plus lente qu'en local : là c'est le cache. Ici c'est l'incertitude OS — le YAML ne suffit pas.
4. Correctif : isolation d'exécution beta
N'installez jamais beta sur la CI prod. Lancez sur un Mac mini jetable et renvoyez les résultats.
CI stable (macOS release + Xcode)
↓
Mac mini distant (beta seul)
↓
Retour PASS / FAIL + IPA
Quatre étapes :
- Provisionner un Mac mini beta-only (utilisateur + Keychain séparés)
- Geler les runners principaux sur macOS stable pour merges et releases
- Stack beta sur nœud isolé ; déclenchement via labels
[beta, ios]ou SSH nocturne - Renvoyer uniquement les résultats — ne pas monter les caches beta sur les runners prod
Labels runner : guide Mac mini auto-hébergé ; matrice beta sprint release : matrice de build temporaire.
5. Quelle option choisir
| Approche | Stabilité | Verdict |
|---|---|---|
| beta sur Mac quotidien | ❌ pollution Keychain, rollback difficile | ❌ |
| Runners GitHub-hosted | ⚠️ file d'attente + images beta en retard | ⚠️ complément seulement |
| VM / snapshots | ❌ GPU Simulator instable | ❌ |
| Nœud beta Mac mini distant | ✅ isolé, jetable | ✅ |
6. FAQ
macOS beta affecte-t-il la CI ?
Oui — simulateurs, défauts toolchain et signature dérivent. Même commit, résultats qui basculent.
beta CI sur mon Mac quotidien ?
OK pour tests perso ; évitez sur machines partagées ou de build prod.
GitHub Actions suffit-il ?
Aide les files, mais ne supprime pas la non-déterminisme beta.
Meilleure pratique ?
Mac mini beta dédié + CI principale figée. Après WWDC, le vrai sujet est l'environnement non contrôlé, pas « build failed ».
Valider l'isolation en 48 h
Figer runners principaux → nœud beta nocturne sur même commit → comparer PASS. Ligne stable + beta instable = split OK. Checklist onboarding · Offres