Avec Swift 6, la strict concurrency fragilise la confiance dans la CI lorsque les builds locaux passent mais la pipeline fluctue. La cause est souvent des réglages divergents, des conflits DerivedData, une destination simulateur différente ou l'absence de barrière sur les avertissements. Cet article liste sept points sensibles, un tableau comparatif des environnements et un runbook en six étapes jusqu'à la validation. Lecture complémentaire : SwiftPM, CocoaPods et DerivedData, empreinte de build reproductible, runner auto-hébergé et isolation du cache.
Les diagnostics de concurrence dépendent du timing; de faibles variations d'environnement dispersent les échecs.
Combinaison Swift et Xcode différente entre poste et CI :sans swift --version ni xcodebuild -version journalisés, les diagnostics Sendable manquent de base.
Mode strict activé uniquement avant mise en production :le quotidien reste permissif et la release concentre l'écart, retardant le rollback.
Plusieurs xcodebuild partagent un même DerivedData :course et corruption incrémentale, cleans fréquents sans lien avec la concurrence réelle.
Avertissements tolérés alors que la CI est verte :schémas qui ne deviennent bloquants qu après durcissement de SWIFT_STRICT_CONCURRENCY.
Tests UI et unitaires mélangés sans plan d'acteurs :charge simulateur et drapeaux se superposent; faux flakiness.
Aucune entrée Runbook pour xcode-select ou TOOLCHAINS :un simple changement Xcode graphique bascule le compilateur nocturne.
Uniquement swift build sous Linux :les cibles iOS ne subissent pas la même stricte analyse; dette reportée.
Le dénominateur commun : l'état du compilateur n'est pas figé à l'entrée CI. Le Mac distant dédié le fige via SSH comme toute autre infra.
L'objectif est d'obtenir le même ensemble de diagnostics à chaque exécution.
| Axe | Xcode Cloud | Runner macOS hébergé | Mac distant dédié (SSH) |
|---|---|---|---|
| Pinning toolchain | Suit les mises à jour managées | Dépend des tags d'image | xcode-select et disque contractualisables |
| Reproductibilité | Bonne si workflow discipliné | Sensible aux bases mutualisées | DerivedData par job simple |
| Paramètres xcodebuild | Limites possibles sur scripts | Policies administrateur | -destination et chemins stables |
| Échecs types | Files d'attente, quotas | Dépendances manquantes sur images vierges | Mise en veille, disque plein |
| Profils | Parcours proche App Store | Nombreux smokes courts | Monorepos à barrières strictes |
La strict concurrency CI combine logique applicative et disposition du cache.
Alignez finance et plateforme via SLA de location et facturation.
Geler le profil Xcode et journaliser xcode-select -p.
Imprimer systématiquement versions SDK et compilateur.
Uniformiser SWIFT_STRICT_CONCURRENCY et tracer la montée progressive.
Fixer schéma, destination, -derivedDataPath et caches SPM si nécessaire.
Séparer suites de tests et plafonner la concurrence contractuelle.
Signer la check-list d'acceptation avec extraits de logs.
#!/usr/bin/env bash set -euo pipefail xcodebuild -version xcodebuild -showsdks swift --version export DERIVED_DATA="$(pwd)/.derivedData/$CI_JOB_ID" xcodebuild -scheme "App" \ -destination 'platform=iOS Simulator,name=iPhone 16' \ -derivedDataPath "$DERIVED_DATA" \ build
Astuce :maintenez une feuille de route pour élever progressivement les modules tiers vers le mode complet.
Évitez de partager un même compte entre automatisation nocturne et sessions interactives.
Publiez une matrice cible par cible; les notes de version Xcode et Swift prévalent sur ce résumé opérationnel.
Avertissement :ce guide couvre l'exploitation, pas la définition normative des modes du compilateur.
Les avertissements MainActor réagissent aussi à la charge; isolez journaux perf et fonctionnels.
Les runners exclusivement mutualisés rendent les barrières Swift 6 difficiles à tenir. NodeMini propose la location de Mac Mini cloud dédiés adaptée aux équipes qui contractualisent SSH, stockage et charge comme un service. Consultez les tarifs de location Mac Mini et le centre d'aide Cloud Mac pour l'intégration.
Après stabilisation, agrégez hebdomadairement les violations et reliez-les aux feuilles de route des dépendances.
Pour figer compilateur et cache. Tarifs : page tarifs.
Scheme, destination, derivedDataPath et niveau strict homogène. Détails : centre d'aide.
Build Xcode, xcode-select, TOOLCHAINS optionnel, séquence d'amorçage CI. Offres : tarifs.