2026 Tests iOS Simulator en parallèle sur Mac cloud pour pipelines PR : concurrence, destinations, disque et file
Même avec l’analyse statique sur Linux, la fréquence de merge reste souvent bridée par les tests macOS Simulator. Les pools de Mac mini au bureau cassent d’abord sur la contention des simulateurs, la croissance DerivedData et une profondeur de file invisible. Ce guide s’adresse aux équipes qui veulent traiter les PR comme de l’infra : trois idées reçues numérotées, un tableau comparatif pool sur site vs runners Mac cloud prévisibles, au moins cinq étapes opérationnelles, des repères chiffrés à coller dans un runbook, et des FAQ pointant vers le guide API 90 secondes et l’article file de build et DerivedData.
Sommaire
- 1. Trois idées reçues : traiter le simulateur comme un conteneur gratuit
- 2. Tableau : pool Mac mini vs runners Mac cloud PR
- 3. Déploiement en sept étapes : concurrence, destinations, nettoyage
- 4. Repères chiffrés : CPU, disque, profondeur de file
- 5. Questions fréquentes
- 6. Revenir à une exécution Mac fiable
1. Trois idées reçues : traiter le simulateur comme un conteneur gratuit
Les équipes matures ont déjà déplacé le lint et les suites unitaires légères sur Linux. Le dernier mur est presque toujours le travail sur simulateur macOS avant merge. Les ingénieurs habitués au SSH sous-estiment la non-linéarité des tests PR dès que le parallélisme est activé. Sans plafonds mesurés, on ne distingue plus les vrais défauts des collisions de ressources, surtout en 2026 où les agents et les jobs nocturnes se cumulent.
- Croire que les workers montent linéairement : augmenter
-parallel-testing-enabledou multiplier les destinations sur un même hôte empile concurrence CPU et jitter disque. Sans baseline interne « simulateurs par cœur performance », tout SLO wiki est fiction. - Copier la matrice release dans chaque PR : utile avant soumission App Store, bruyant et coûteux sur chaque commit. Sans séparer destinations bloquantes et informatives, la profondeur de file explose les après-midi chargés.
- Traiter DerivedData et pièces jointes comme budget mou : enregistrements, captures d’échec et traces activés en permanence peuvent consommer des dizaines de gigaoctets en quelques heures. Un nettoyage hebdomadaire fait échouer le mercredi faute de disque, pas faute de produit. Notre article file DerivedData couvre la partie build ; ici on resserre pour les PR courts et fréquents.
Paramétrez plafonds de concurrence, paliers de destinations et ramasse-miettes avant de débattre des mineures Xcode. Une flotte instrumentée voit souvent la latence de queue diminuer plus vite grâce au ménage discipliné qu’aux bêtas partagées sur bureau. Histogrammes avant/après : la finance comprend pourquoi une capacité Mac cloud horaire prévisible bat les prêts ad hoc de portables.
2. Tableau : pool Mac mini vs runners Mac cloud PR
Matrice pour la première revue d’architecture : exigence, pool bureau, runners Mac cloud planifiables, risque dominant.
| Exigence | Pool Mac mini bureau | Runners Mac cloud PR | Notes |
|---|---|---|---|
| Concurrence de crête prévisible | Perturbée par postes de travail, mises à jour, logins interactifs | Classe d’instance figée ; la concurrence devient du code | Voir hébergé vs auto-hébergé |
| Seuils disque | « Tout le monde pensait qu’un autre purgerait les caches » | Volumes par job ou hooks prune obligatoires | Supprimer les sous-arbres DerivedData en fin de job |
| Visibilité de file | Souvent coordonnée à l’oral | Alignée labels CI + scaling API | Webhooks : checklist observabilité |
| RTT réseau | LAN bas mais topologie fragile | Régions proches Git et stockage d’artefacts | Compatible pipelines hybrides Linux + Mac |
3. Déploiement en sept étapes : concurrence, destinations, nettoyage
- Table de baseline : vingt jobs représentatifs longueur PR sur le profil matériel cible ; noter P95, RSS max, charge CPU pour dériver un plafond simulateurs par cœur physique.
- Scinder destinations bloquantes / étendues : deux dernières versions iOS majeures et tailles d’écran dominantes en bloquant ; le reste nightly ou branches release uniquement.
- Timeouts durs et retries en couches : séparer timeouts d’infra et échecs d’assertion ; UI flaky : au plus un retry par commit, étiqueté.
- Hooks de nettoyage : succès ou échec, exécuter
xcrun simctl shutdown all, retirer le sous-arbre DerivedData du workspace, tronquer les pièces jointes trop lourdes avant upload. - Profondeur de file en métrique : histogrammer l’attente des exécuteurs macOS ; au-delà du seuil, scaler ou repasser automatiquement au jeu bloquant.
- Frontière d’artefacts avec pré-jobs Linux : livrer sorties compilateur et index, pas des caches monorepo entiers sans cache signé prouvé.
- Runbook d’une page : phrases exécutables (« disque libre < 12 % : désactiver destinations étendues ») sans improvisation Slack.
4. Repères chiffrés : CPU, disque, profondeur de file
Ces chiffres servent d’ancrage de revue ; validez toujours avec vos traces. D’abord, sur un profil type Apple M4 avec dix à douze cœurs performance visibles et 32 Go de RAM, démarrez les applis grand public avec trois à quatre workers de test parallèle et au plus quatre simulateurs chauds, puis montez seulement tant que les suites UI restent limitées CPU et non disque. Ensuite, budgétez environ 1,8 à 2,4 fois l’empreinte DerivedData du dernier build réussi par job PR, et repassez globalement au jeu bloquant si l’espace libre tombe sous 12 %, comme dans l’article file de build. Troisièmement, si la profondeur de file dépasse pendant trente minutes quatre fois le nombre d’exécuteurs macOS disponibles, désactivez d’abord les destinations étendues avant d’acheter du matériel, sinon le flaky se déguise en manque de capacité. Quatrièmement, laissez enregistrements et traces de perf désactivés par défaut sur les PR (jobs manuels ou nightly seulement), ce qui ramène souvent les pièces jointes de plusieurs gigaoctets à quelques centaines de mégaoctets. Cinquièmement, après chaque merge sur la branche par défaut, conservez un artefact JSON de matrice complète 24 à 72 heures pour expliquer les régressions qui passent le jeu PR étroit mais cassent la matrice large. En intégrant ces cinq leviers au budget capacité, vous alignez coût réel et observabilité ; une ligne budgétaire sans chiffre reflète presque toujours une dette technique non quantifiée en heures ni en euros.
5. Questions fréquentes
Faut-il la grille complète iPad + OS mineurs sur chaque PR ?
Non. Jeu bloquant pour les form factors à fort trafic ; l’explosion combinatoire va dans les nightly ou pipelines release.
Les tests parallèles se figent au hasard : que vérifier en premier ?
Divisez les workers par deux, coupez les enregistrements, vérifiez qu’aucun lot de jobs ne partage la même session utilisateur interactive (locks Simulator).
Lien avec le guide 90 secondes ?
Le guide met les runners en ligne ; cet article traite de ce qu’il faut faire après SSH pour garder simulateurs et disques au niveau production.
6. Revenir à une exécution Mac fiable
Quelques Mac mini suffisent au démarrage, mais dès que la fréquence des PR et le parallélisme augmentent, le nettoyage manuel des disques et la coordination dans le couloir deviennent silencieusement des SPOF. La latence de queue devient inexplicable, la profondeur de file invisible, les merges de nuit jouent encore sur l’espace libre. Les portables sont pires pour l’intégration continue : alimentation, montée et isolation ne tiennent pas la promesse d’un vrai VPS. Pour des portes PR mesurables, dégradables et élastiques, louer des Mac cloud M4 VPSMAC comme pool PR dédié est en pratique plus calme que de combattre des bureaux surchargés : SSH familier, classes matérielles figées, politiques de nettoyage et de concurrence dans le même runbook, alignement direct avec nos guides API, file DerivedData et comparaison de runners.