Vos hôtes de build sont à Singapour alors que l’orchestration et la sortie des artefacts sont aux États-Unis ou en Europe ? Ce guide s’adresse aux équipes qui parallélisent les tests unitaires et UI XCTest sur Mac distants : six mythes qui font du « vert en local, rouge en CI » une fausse piste « flaky », deux tableaux reliant M4 / M4 Pro, nombre de Simulateurs, marge disque DerivedData et modalités de location, ainsi que des flags xcodebuild, commandes d’audit disque et un runbook en six étapes prêts à coller. Après lecture, vous pourrez justifier le nombre de workers, les seuils d’alerte disque et le choix entre ajuster les timeouts des runners ou déplacer une région.
Ensuite nous cartographions mémoire, disque et réseau ensemble, puis nous posons des tables paramétrables.
Tests unitaires parallèles sollicitent les pics CPU et RAM ; les écritures disque se concentrent dans les index DerivedData et les produits de build. Avec des caches chauds, les rafales de linkage et le nombre de processus vous plafonnent souvent avant le GHz brut.Tests UI parallèles ajoutent graphisme Simulateur, WindowServer et fichiers temporaires ; le gain cesse d’être linéaire dès que la Nième voie parallèle fait exploser la latence de queue.DerivedData grossit avec le cache des modules, la compilation parallèle et la fréquence des nettoyages—suivez la taille du répertoire et le rythme des builds comme signaux FinOps, pas seulement le loyer mensuel.Les liens inter-régions n’allègent pas les besoins disque locaux mais amplifient la latence de queue pour résultats et journaux ; séparez « xcodebuild a réussi » de « l’étape pipeline a réussi » ou le triage pointe vers la mauvaise couche.
Lisez en parallèle l’article balises d’exécuteur et concurrence et la checklist build reproductible et DerivedData : router les jobs, sceller les racines de build et plafonner les Simulateurs sont trois réglages distincts.
| Dimension | Mac mini M4 (référence) | Mac mini M4 Pro (plus de parallélisme) |
|---|---|---|
| Cibles typiques | 2 à 4 workers de tests unitaires ; garder le parallélisme UI plus bas ou le découper dans le temps | 4 à 8 workers de tests unitaires ; n’augmenter le parallélisme UI qu’après bains d’essai |
| Signaux de stress mémoire | Swap, boot Simulateur lent, saccades UI sous charge | Probabilité de swap moindre à même concurrence ; les E/S disque peuvent encore vous plafonner |
| Orientation disque | 512 Go se remplit vite avec les branches ; viser 1 To en parallèle + multi-branches | Privilégier 2 To ou un nettoyage agressif pour UI parallèle et plusieurs versions Xcode |
| Adéquation | Petits dépôts, majorité unitaire, passage nocturne unique | Gros monorepos, nombreux packs UI, builds PR fréquents |
| Couplage location | Mensuel de base + pic court pour la semaine de release | Engagement mensuel/trimestriel pour éviter la contention de pointe |
Pour xcodebuild test avec UI, découplez parallélisme de compilation et parallélisme de tests : vous pouvez monter -parallelizeTargets pour les builds, mais -parallel-testing-enabled et -maximum-parallel-testing-workers méritent leur propre bain d’essai. Pour le triage GUI, croisez avec le guide SSH vs VNC et des fenêtres interactives courtes plutôt qu’un parallélisme UI élevé laissé 24h/24 sur WindowServer.
| Scénario | Stratégie parallèle | Contrôles supplémentaires sur le Mac distant |
|---|---|---|
| Tests unitaires purs, suites courtes | Workers modérés calibrés sur les pics RAM | Surveiller les courbes de croissance DerivedData |
| Tests UI lourds | Faible parallélisme + créneaux file d’attente ; scinder les schémas si besoin | Documenter le nettoyage Simulateur et la politique de redémarrage WindowServer |
| Monorepo, nombreuses branches | Isolation par balises d’exécuteur et racines DerivedData séparées | Aligner secrets et plafonds de concurrence avec la checklist exécuteurs |
| Équipe mondiale, sortie de journaux lente | Garder le parallélisme de tests local ; limiter agrégation/upload | Régler timeouts et nouvelles tentatives HTTP/SSH ; revoir la région via le guide location multi-régions |
| Matrice nocturne complète + PR de jour | Forte parallélisation la nuit, protéger la branche principale le jour | Planifier des nettoyages profonds hors pics |
# Exemple : plafonner les workers de tests parallèles (à calibrer par projet/matériel—ne pas copier aveuglément) xcodebuild test \ -scheme YourScheme \ -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.4' \ -parallel-testing-enabled YES \ -maximum-parallel-testing-workers 4 \ -resultBundlePath ./TestResults.xcresult
# Audit empreinte DerivedData / Simulateur (fixez les seuils en % de disque vous-même) du -sh ~/Library/Developer/Xcode/DerivedData 2>/dev/null du -sh ~/Library/Developer/CoreSimulator 2>/dev/null df -h /
Note : enregistrez une base mono-worker et votre concurrence actuelle côte à côte—durée totale, P95 par test, pic RAM et écritures disque—avant de clore le réglage.
-maximum-parallel-testing-workers ; exiger trois verts consécutifs par palier.Cet article répond à jusqu’où pousser les tests parallèles sur un Mac distant ; le guide nœuds multi-régions répond à où placer l’hôte ; la checklist accès zero trust répond à comment le trafic l’atteint. Lisez dans l’ordre : région et durée → connectivité et exécuteurs → capacité tests parallèles, pour ne pas empiler la concurrence sur un chemin fragile.
Les portables héritent des politiques de veille, du réseau grand public et de la dérive des correctifs—peu adaptés aux SLA d’équipe. Monter la parallélisation augmente la pression thermique et disque sur une machine jamais dimensionnée comme worker CI. Les Mac distants dédiés séparent contractuellement l’exécution des postes personnels et stabilisent la surface pour l’automatisation.
Lorsque vous avez besoin d’un placement régional, d’une gouvernance de location pour les pics et d’un hôte propre partagé avec des agents longue durée comme OpenClaw, faire tourner des tests parallèles sur les Mac cloud MACCOME est plus simple à valider qu’empiler des workers sur des portables instables. Commencez par les tarifs de location, puis ouvrez la commande régionale pour vos utilisateurs principaux—Singapour, Tokyo, Séoul, Hong Kong, US Est ou US Ouest. Le triage connexion se trouve dans le centre d’aide, mots-clés SSH ou tunnel.
Questions fréquentes
Quel parallélisme de départ est prudent sur M4 ?
Faites un bain d’essai plutôt que copier le folklore en ligne. Partez de deux workers, échantillonnez RAM et disque, puis montez en charge avec les tableaux ci-dessus. Comparez les paliers de location sur la page tarifs Mac mini.
DerivedData est presque plein — que changer en premier ?
Baissez le parallélisme pour éviter les blocages silencieux, puis lancez un nettoyage ; alignez les périmètres de répertoires avec la checklist build reproductible et DerivedData.
CI rouge, local vert — où regarder ?
Séparez les timeouts d’upload et d’agrégation des échecs de test ; validez le placement des nœuds avec le guide nœuds multi-régions.
Les flakiness ont explosé — scaler les machines tout de suite ?
Lancez des contrôles mono-worker et la surveillance des ressources pour écarter la contention avant d’acheter plus de cœurs ou des montées M4 Pro / 2 To.