DevOps / CI·CD 6 mai 2026

2026-05-06 runtime Simulateur iOS budget disque, installation sélective et nettoyage CI sur un Mac cloud Apple Silicon loué (HK / JP / KR / SG / US)

MacXCode Engineering Team 6 mai 2026 ~23 min de lecture

Hong Kong, Tokyo, Séoul, Singapour, États-UnisdansMac mini M4louer untest xcodebuildL'équipe qui se retourne remarque immédiatement la deuxième charge.Exécution du simulateurn'est pas gratuit,Bibliothèque/Développeur/CoreSimulatorsubordonné àÉchelle de plusieurs GoPrenez une tranche deDonnées dérivéeset rivalisez pour la bande passante NVMe, qui double lorsque les compagnons watchOS rejoignent la file d'attente. ce2026-05-06Le guide répond à trois questions opérationnelles : Qu'est-ce qu'il contient ?inventaireComment sélectionner uniquement les familles de systèmes d'exploitation dont les destinations ont réellement besoinchoisirComment faire en sorte que les tests d'interface utilisateur nocturnes démarrent toujours sans tuer le runtimeélaguerC'est une méthode.Test du simulateur sans têteétendre etConcierge de nettoyage de disquesur le même hôte.voie parallèleLors de l'exécutionSéparation des données dérivéesVeuillez vous référer à

Pourquoi CI en 2026 est toujours confondu avec « Installation de Xcode = Simulator ready »

Xcode.app regroupe la chaîne d'outils,durée d'exécutionest une charge utile versionnée qui est supprimée à la demande. Trois erreurs répétées :

  • dérive de destination— YAML estiPhone15Cependant, après la mise à jour de Xcode, l'hôte estiPhone16J'ai préparé seulement l'image.
  • appairage silencieux de la montre— Localement, Xcode a automatiquement acquis le temps d'exécution de la montre, mais pas CI.
  • concierge exagéré- cron a effacé "l'ancien" runtime, toujours nécessaire au contrôle qualité pour la reproduction en cas de crash de l'App StoreiOS 17.6perdre.
Ancrage numérique :512 GoLe SKU est gratuit avant la vague de test parallèle≥180 Gomaintenir.2 ToRéduisez le nombre d'exécutions sur le nœud afin que Spotlight et le démon de sauvegarde ne soient pas en concurrence lors de l'archivage.

Empreinte d'exécution : là où se cachent les gigaoctets

Les hôtes Apple Silicon conservent les données des appareils, les caches partagés Dyld et les tranches par runtime. Environ pour deux environnements d'exécution iOS majeurs (appareil + image de la montre par année)7 à 14 Go. Encore plus si vous placez un module linguistique dans la zone de capture d'écran de l'interface utilisateur.3 à 6 Go. Ce qui est important, ce ne sont pas les octets exacts, mais ce qui se passe lorsque cinq ingénieurs utilisent le même générateur partagé et installent le dernier moteur d'exécution bêta.différentielest.

augmenter la durée d'exécutiondélai d'attenteVeuillez faire une corrélation avec l'espace libre12%ci-dessous, les premiers symptômes ne sont pas un échec instantané.xctestLa copie des appareils a tendance à être lente. En effet, APFS a du mal à trouver des étendues contiguës.

Nouvelle mesure XcodeLors de l'utilisation de , la récupération du runtime n'est pas une simple case à cocher.Migration de capacitéest. Invite de pack multiplateforme, reconstruction du cache CoreSimulator, après la première version verte24 à 48 heuresUne expansion chaude implicite se produit. Veuillez vous assurer que l'hébergeur de location dispose d'une fenêtre de maintenance explicite et qu'elle ne chevauche pas le trafic de relations publiques et les téléchargements groupés initiaux. L’équipe ignorée voit la version rouge sans modification de code disparaître le lendemain. à cette fenêtredfEnregistrez-le toutes les heures et comparez-le à la courbe stationnaire du trimestre précédent. La pente est l'histoireS'il dépasse , il est fort probable que des tranches superposées de bêta et de GA aient été placées sur la même voie.

dernièrementQui peut installer le runtime ?Veuillez documenter. Un exemple typique d'installation sudo personnelle aboutissant à un "mystérieux 6 Go" de clés partagées. Centraliser les modifications des tickets d'infrastructure et des balises d'image CI,chutLes sessions peuvent être auditées, en particulier lors de la sauvegarde des documents de signatureSingapourmoustiqueBeitoIl s’agit d’un cas où les réglementations sont contraignantes.

Matrice de voies : quel hôte détient quel runtime

Répartissez explicitement les responsabilités et ne présumez pas que tous les coureurs sont interchangeables.

étiquettes de voie Politique d'exécution propriétaire de ménage
ios-actuel 1 bouteille du dernier GA iOS et App Store aligné N-1 Taille hebdomadaire + ticket
lourd en montres Image watchOS + appareil couplé uniquement Mensuel; ne supprimez pas N-1 sans l'approbation du contrôle qualité
archive uniquement Minimum du simulateur ; L'archive de la machine réelle est prioritaire Agressif pour le simulateur, doux pour les clés

Commande d'inventaire que l'opérateur colle dans le runbook

Commencez par des sondes non destructives et progressez par étapes.

xcrun simctl liste d'exécution df -h / du -sh ~/Bibliothèque/Developer/CoreSimulator/* 2>/dev/null | trier -h | queue -n 20

Si les chiffres diffèrent de ceux du Finder, exécutez en tant qu'utilisateur CI.duFaites-nous confiance : les tâches lancées sont exécutées sur des comptes de constructeur. Si c'est un volume différent/Volumes/constructionsMais je le répète.

Runbook d'installation sélective (happy path)

  1. geler la file d'attenteou vider l'étiquette associée à l'hôte.
  2. Incluez uniquement les bundles d'exécution dont vous avez réellement besoin dans la matrice de destination pour le prochain sprint.télécharger.
  3. par durée d'exécutiondémarrage simctl xcrunfumé avecsysctl hw.modèleVérifiez s'il reste Apple Silicon.
  4. Augmentez la balise de version de l'image pour faire correspondre CI YAML à la réalité,reprendre la file d'attente.
  5. Collections installées dans le référentiel d'infrastructureenregistrer(N'en faites pas un wiki isolé).

Entre les étapes 2 et 3, vers le ticketsomme de contrôleOu laissez la chaîne de version d'Apple et la restauration est claire si le runtime est interrompu en raison d'un miroir brisé.

Politique d'élagage : ce qui peut être supprimé

Un bon concierge estproduits dérivésà agressif,durée d'exécutionest traitée comme une infrastructure semi-statique. Politique en deux étapes :

Livrables fréquence sûre Risque de surcoupe
Terminal de simulation non démarré tous les jours Faible——Recréé à partir d'un modèle
vieux.xcresultpaquet Après le téléchargement vers le magasin d'objets Moyen : si vous avez besoin de 30 à 90 jours hors hôte pour la maintenance légale.
corps du bundle d'exécution Liste trimestrielle + QA Élevé – brise la reproductibilité de la reproduction des crashs

Voies parallèles et pression de mémoire intégrée

parallèlexcodebuildamplifie le taux de désabonnement au lancement du simulateur. Veuillez limiter le nombre de démarrages simultanés par hôte à l'aide d'étiquettes de file d'attente.Article de Joe parallèleVoir. Si la pression de la mémoire atteint un pic, essayez d'échangerRéduisez les destinations simultanéespréféré ; XCTest est extrêmement vulnérable au swap sur la mémoire unifiée.

Conseils sans tête :Si vos tests d'interface utilisateur ne sont pas satisfaisants seulement après l'élagage, vérifiez votre compte de constructeur avant de blâmer le code de votre application.diagnostic systèmeObtenez une tranche : la pression du disque apparaît d'abord comme un chien de garde SpringBoard.

Fenêtre de mise à niveau Xcode : acquisition du runtime et ordre d'archivage

À moins qu'il n'y ait un deuxième nœud chaud,Téléchargement volumineux du runtimeetLa soumission TestFlight se bloque la nuitS'il vous plaît, ne les mettez pas le même soir. L'hôte MacXCode le plus sécurisé estconstructeur bleu/vert: Image du candidattest xcodebuildet la lumièrearchive xcodebuild -archivePath /tmp/Smoke.xcarchiveFaites la promotion de la balise d’image une fois que les deux sont devenues vertes. Si vous ne pouvez pas vous permettre des nœuds doubles, réduisez la portée : un temps d'exécution supplémentaire par temps de maintenance, pas cinq en même temps. de chaque téléchargementminutes de l'horloge muraleles dossiers et les états financiers sont séparés1 ToVous permet de comparer s'il faut louer un constructeur ou graver une version du week-end.

Après la mise à niveau, le YAMLchaîne de destinationVeuillez revérifier. Apple modifie parfois les noms des profils matériels du simulateur. L'inadéquation ressemble à "destination introuvable".liste simctlsemble être renseigné, probablement parce que le travail pointe vers une chaîne matérielle qui a été élaguée.liste simctl des appareils disponiblesVeuillez différer l'exportation lisible par machine de l'infrarepo.

Objectifs numériques à Grafana

  • Utilisation persistante du disque avant les opérations de pagination85%limite supérieure.
  • 16 GBSur les machines, les simulateurs lancés peuvent fonctionner jusqu'à4La tribune.
  • Limite supérieure d'acceptation à froid pour "Acquisition du runtime + démarrage + XCTest unique"22 minutes; Alerte en cas de dépassement après mise à niveau.

9 étapes avant de supprimer un « dossier énorme »

  1. Assurez-vous qu'il n'y a pas de tâches d'archivage en cours.
  2. actuelliste simctlInstantané vers GitOps.
  3. passé30 joursIdentifiez le temps d'exécution du travail zéro.
  4. Informez le contrôle qualité avec une date de suppression explicite.
  5. Videz une seule voie à la fois.
  6. Suppression du runtime uniquement avec les chemins UI/CLI pris en charge.
  7. Réexécutez la fumée sur la destination restante.
  8. Avant et après la suppressiondfComparez et attachez la différence au billet.
  9. Balises avancées avec uniquement des hôtes sains.

FAQ : version bêta, Apple Silicon, hébergement inter-régional

question Réponses pratiques (2026-05-06)
Dois-je mettre des environnements d'exécution bêta dans le CI de production ? Isolé à l'hôte étiqueté canari ; non mélangé avec les voies de soumission de l'App Store.
Les hôtes de Singapour et des États-Unis doivent-ils faire partie du même groupe ? S'aligner sur l'ensemble commun minimum ; des ajouts spécifiques à une région sont possibles à condition qu'ils soient codés en YAML.

Pourquoi le Mac mini M4 de 1 à 2 To gagne en CI biaisé sur simulateur

La charge du simulateur estlecture aléatoireC'est proche. Nœud MacXCode Bare MetalMac mini M4NVMe maintient les temps de démarrage prévisibles même lorsque les quatre voies démarrent différentes générations de système d'exploitation avec la même matrice PR. Cette prévisibilité transforme la budgétisation numérique en discipline, mieux que l’achat du mystérieux « disque cloud de grande capacité » derrière Noisy Neighbor. La planification des capacités est la deuxièmeJPSi vous demandez un canariTarification régionale, si la sécurité demande une preuve de la personne qui a supprimé le runtimeGuide d'accès SSH/VNCVeuillez ajouter.

Ajoutez de la marge NVMe avant que les runtimes ne débordent

Mac mini M4 · HK / JP / KR / SG / US · SSH / VNC optionnel