La tâche CI affiche une version de Swift attendue, mais le build ne suit pas le résultat de la machine de développement.
Solution immédiate : ne généralisez pas la bascule sur la seule présence de Swift 6.4. Vérifiez d’abord le Swift et SwiftPM réellement appelés par la tâche, puis exécutez le build et les tests dans un environnement isolé avant de décider.
La note officielle indique que Swift 6.4 est sorti le 15 septembre 2026 et que SwiftPM utilise désormais Swift Build par défaut. Ce changement ne prouve ni la compatibilité de votre paquet ni le basculement automatique des projets Xcode. La validation doit porter sur les commandes et les résultats de votre propre chaîne.
Qui devrait lire cet article : les ingénieurs qui maintiennent des pipelines de compilation avec Swift Package Manager et doivent contrôler dépendances, builds et tests sous Swift 6.4.
Les responsables qui préparent une mise à niveau de l’outil trouveront des critères de déploiement progressif. Les équipes CI macOS pourront constituer des preuves reproductibles avant de modifier leur tâche de référence.
Dernière mise à jour : 11 novembre 2026. Les informations sur la publication et le comportement par défaut ont été vérifiées dans l’annonce officielle de Swift 6.4 et la documentation SwiftPM 6.4.
[ SECTION_01 ] Portée exacte du changement SwiftPM
La déclaration à vérifier est précise : SwiftPM utilise Swift Build par défaut avec Swift 6.4. Elle concerne le chemin de construction invoqué par SwiftPM. Elle ne constitue pas une instruction de migration automatique de tous les projets Xcode, et ne certifie pas que chaque paquet ou script personnalisé produira le même résultat. Pour le comportement de SwiftPM, consultez la documentation de SwiftPM 6.4.
Séparez donc les tâches avant de mesurer le risque. Un appel à swift build appartient au périmètre SwiftPM. Une compilation pilotée par Xcode, une archive Apple ou un script qui sélectionne explicitement un outil suit son propre chemin d’exécution. La référence Apple décrit les commandes et les outils de ligne de commande Xcode ; la documentation sur le processus d’archivage Xcode traite, elle, de l’archive. Le changement de valeur par défaut dans SwiftPM ne permet pas d’en déduire le comportement de ces tâches.
Pour décider, consignez séparément trois éléments : l’outil installé, l’exécutable trouvé par la tâche et l’entrée réellement appelée par le script. Un nom de version affiché dans une configuration de machine ne suffit pas. Un shell de CI peut utiliser un autre chemin, une autre sélection d’outils ou un wrapper défini dans le projet. La preuve pertinente vient du processus exécuté dans la tâche concernée.
[ SECTION_02 ] Identité de l’outil et entrée d’exécution
Ajoutez un relevé au début de la tâche candidate, avant toute compilation. Par exemple :
swift --version
command -v swift
xcode-select -p
swift --version identifie la version affichée par l’exécutable atteint dans ce shell ; command -v swift révèle le chemin résolu par ce shell. Lorsque la tâche dépend des outils en ligne de commande Apple, xcode-select -p permet également de documenter la sélection active. Pour les commandes Xcode disponibles, référez-vous à la référence Apple des outils de ligne de commande. Pour installer ou sélectionner une distribution Swift sur macOS, utilisez les instructions officielles d’installation Swift.
Ne déduisez pas de ces seules sorties que le bon outil sert au build. Vérifiez ensuite le script CI et ses appels effectifs : swift build, swift test, un script intermédiaire ou une commande Xcode. Si un alias, un gestionnaire d’environnement ou un wrapper intervient, consignez-le également. La sortie de version doit provenir de la même tâche, du même utilisateur d’exécution et du même contexte de shell que la compilation.
Le tableau sert à choisir les preuves à conserver plutôt qu’à présumer qu’un outil est actif.
| Élément observé | Preuve à consigner dans la tâche | Ce que cette preuve permet de conclure |
|---|---|---|
| Version Swift affichée | Sortie de swift --version |
Version annoncée par l’exécutable atteint |
| Résolution de commande | Sortie de command -v swift |
Chemin sélectionné par le shell de la tâche |
| Sélection des outils Apple | Sortie de xcode-select -p, si pertinente |
Sélection active pour les outils concernés |
| Entrée du build | Commande réelle inscrite dans le journal | Périmètre SwiftPM ou tâche Xcode à examiner |
| Résultat | Code de sortie et journal complet | Succès ou échec de cette exécution, sans extrapolation |
Une tâche n’est pas acceptée parce que les trois premières lignes semblent cohérentes. Il faut aussi relier ces lignes à l’entrée de build exacte et au commit évalué. Sans cette relation, le relevé décrit l’hôte, pas nécessairement le travail qui a produit le résultat.
[ SECTION_03 ] Dépendances et état de résolution
La comparaison entre l’ancienne et la nouvelle exécution doit partir du même commit, avec les mêmes sources de dépendances et les mêmes contraintes. Conservez Package.resolved, le journal de résolution et les éventuelles configurations de miroirs ou d’accès aux dépendances privées. La documentation officielle décrit la déclaration des dépendances dans PackageDescription ; elle aide à distinguer les contraintes déclarées de l’état effectivement résolu.
Un changement de version de dépendance n’établit pas, à lui seul, que Swift 6.4 l’a causé. Il peut provenir d’un fichier de verrouillage absent ou différent, d’une modification du manifeste, d’un miroir, d’un accès privé ou d’un état d’environnement non identique. L’acceptation exige de trouver l’origine de l’écart et de pouvoir la reproduire.
| Vérification | Exécution de référence | Exécution candidate | Motif de report |
|---|---|---|---|
| Commit et modifications locales | Identifiants et état du dépôt enregistrés | Même identifiant, arbre de travail comparable | Commit différent ou modification non déclarée |
Fichier Package.resolved |
Copie ou empreinte conservée | Comparaison explicite avec la référence | Changement inexpliqué |
| Sources et miroirs | Configuration consignée | Configuration identique ou différence documentée | Miroir ou dépendance privée inaccessible |
| Résolution | Journal conservé | Journal conservé et comparé | Résolution impossible à reproduire |
| Manifestes | Versions et contraintes présentes | Aucune modification involontaire | Modification du manifeste confondue avec le changement d’outil |
Ces preuves doivent être produites dans les deux exécutions, et non reconstituées après un échec. Si la résolution diverge, interrompez l’interprétation du build : comparez d’abord les manifestes, le verrouillage et les sources accessibles. Une compilation réussie avec un jeu de dépendances différent ne valide pas une migration à conditions constantes.
[ SECTION_04 ] Compilation, objectifs et périmètre CI
Sur un paquet Swift, commencez par appeler explicitement la commande réellement utilisée par la CI, par exemple swift build. Conservez le code de sortie, le journal complet et les informations qui identifient l’objectif demandé. La documentation Swift décrit les étapes de construction avec Swift ; utilisez la documentation SwiftPM 6.4 pour vérifier le comportement de l’outil correspondant à la version évaluée.
Un statut vert n’est pas suffisant si la tâche n’a pas couvert les objectifs attendus par le projet. Vérifiez que les cibles pertinentes ont été demandées, que les produits attendus existent et que le journal permet de remonter à la première erreur en cas d’échec. Ne prétendez pas qu’un paquet a été validé pour une cible qui n’a pas été construite. Les objectifs retenus doivent venir des besoins réels du dépôt.
Distinguez aussi cette vérification d’une archive d’application Apple. La compilation du paquet par SwiftPM ne démontre pas qu’un projet Xcode s’archive, se signe ou suit correctement son processus de distribution. Si le pipeline comprend une tâche Xcode, gardez une vérification séparée, avec sa propre commande, son propre journal et son résultat. La documentation Apple sur l’archivage Xcode décrit le périmètre de ce processus ; ne l’assimilez pas au changement de valeur par défaut de SwiftPM.
[ SECTION_05 ] Tests et preuve de reproductibilité
Un build réussi indique que la commande de compilation s’est terminée sans erreur dans ce contexte. Il ne signifie pas que les tests ont été découverts, exécutés ou réussis. Lancez séparément la commande de test de la tâche, comme swift test lorsque c’est bien l’entrée prévue pour le paquet. Conservez le journal, le code de sortie et les indications de tests trouvés, ignorés ou échoués.
Lorsqu’un test diffère de la référence, reproduisez le cas sur le même commit et avec les mêmes dépendances. Un test non découvert, un arrêt avant son exécution et un échec d’assertion sont des résultats différents ; le compte rendu doit les distinguer. Comparez aussi les éléments d’environnement consignés dans la tâche plutôt que d’attribuer immédiatement l’écart au nouveau système de construction.
Pour toute anomalie, le dossier d’acceptation doit contenir la commande, le journal complet, le commit, les sorties de version et une reproduction. Sans ces éléments, le diagnostic reste une hypothèse. Un échec isolé qui n’a pas été reproduit ne justifie pas une conclusion générale sur SwiftPM ; inversement, une seule exécution verte ne prouve pas la stabilité du pipeline.
[ SECTION_06 ] Caches, répétition et critères de décision
La question du cache se tranche par une comparaison contrôlée, pas par une supposition sur son fonctionnement. Exécutez le scénario prévu par l’équipe avec l’état de cache habituel, puis répétez-le après la procédure de nettoyage retenue pour le projet. Si vous utilisez swift package clean, consignez la commande et son résultat ; vérifiez la procédure et les commandes dans la documentation SwiftPM 6.4.
Ne modifiez pas simultanément le commit, les dépendances, l’entrée du build et l’état du cache. Sinon, un résultat différent n’identifie aucune cause. Enregistrez les écarts d’environnement connus, notamment les variables ou étapes de préparation définies par le pipeline. La conclusion doit porter sur le comportement effectivement observé dans ces conditions, pas sur une propriété universelle des caches.
Le tableau suivant aide à appliquer un verdict cohérent. Les notes sont des repères internes, pas des résultats d’essai ni des statistiques de compatibilité. Chaque équipe doit définir ses critères avant de comparer les tâches.
| Dimension évaluée | Accepté | À différer | Motif de retour |
|---|---|---|---|
| Identité de l’outil | Version, chemin et entrée reliés à la tâche | Une preuve manque mais peut être ajoutée | La tâche appelle un outil inattendu |
| Dépendances | Même état ou différences expliquées et reproduites | Résolution différente sans cause établie | Dépendances privées ou verrouillage non maîtrisés |
| Build | Objectifs requis construits, journaux exploitables | Échec localisé et diagnostic en cours | Échec bloquant reproductible |
| Tests | Résultat et découverte documentés | Couverture de la tâche incomplète | Échec reproductible ou tests non exécutés |
| Répétition | Résultat conforme aux exigences de l’équipe | Écart de cache ou d’environnement à expliquer | Résultats contradictoires non maîtrisés |
Séquence de validation à exécuter
-
Créer une tâche isolée. Gardez intacte la tâche de référence et sélectionnez un commit représentatif du projet. Cette séparation évite de faire dépendre la production d’un résultat encore exploratoire.
-
Enregistrer l’identité de l’outil. Ajoutez les sorties de version et de chemin dans le journal du travail. Confirmez que le shell et le compte utilisés sont ceux qui exécutent réellement le build.
-
Figer les conditions de dépendances. Archivez le fichier de verrouillage, le commit, les manifestes et les paramètres de sources ou miroirs. Si une de ces conditions change, notez-le avant d’interpréter le résultat.
-
Lancer les constructions prévues. Exécutez les commandes et les objectifs que le dépôt utilise réellement. Vérifiez le code de sortie, les produits attendus et la possibilité d’identifier la première erreur.
-
Exécuter et consigner les tests. Vérifiez que les tests attendus ont été découverts, exécutés et terminés. Un build vert ne remplace pas ce contrôle.
-
Répéter selon la politique de cache du projet. Comparez les exécutions en ne changeant qu’un facteur à la fois. Conservez les journaux et expliquez tout écart avant de déclarer la tâche reproductible.
-
Appliquer une décision explicite. Acceptez et étendez progressivement si les preuves répondent aux critères convenus. Différez si une différence reste inexpliquée. Revenez à la tâche de référence si un échec bloquant se reproduit et que l’équipe ne peut pas encore en maîtriser la cause.
À retenir : une sortie
swift --versioncohérente ne suffit pas si elle provient d’un autre shell que celui du build. Reliez toujours version, chemin, commande, commit et résultat dans le journal de la même tâche.
Cette démarche est plus facile à réaliser sur un environnement macOS distinct de la machine de travail lorsqu’il faut comparer des entrées ou préserver une tâche de référence. Une location Mac n’est pas automatiquement préférable : un nœud déjà maîtrisé convient mieux si l’équipe peut créer une tâche isolée et conserver les preuves. Pour comparer les contraintes d’un Mac physique et d’un environnement distant, la fiche Mac mini M4 aide à examiner l’option matérielle ; les équipes qui veulent évaluer un environnement Mac distant peuvent consulter NOVAKVM.
[ SECTION_07 ] FAQ — validation de SwiftPM et de la CI macOS
Qu’est-ce qui change pour la compilation SwiftPM avec Swift 6.4 ?
La note de publication de Swift 6.4 indique que SwiftPM utilise désormais Swift Build par défaut. Cette évolution concerne les tâches exécutées par SwiftPM avec l’outil réellement sélectionné ; elle ne signifie pas que les projets Xcode ni leurs processus d’archivage basculent automatiquement. Vérifiez donc la commande et le contexte de chaque tâche avant de conclure que votre chaîne est concernée.
Comment vérifier que la CI macOS exécute bien Swift 6.4 ?
Dans la tâche elle-même, consignez la sortie de swift --version, le chemin renvoyé par command -v swift et, si la tâche passe par les outils en ligne de commande Apple, le résultat de xcode-select -p. Ces éléments doivent être capturés par le même travail que le build : une version installée sur l’hôte ne prouve pas qu’elle est celle appelée par le script.
Que vérifier si un paquet Swift ne compile plus après le changement ?
Repartez du même commit et des mêmes conditions de dépendances. Comparez l’outil et son chemin, l’état du fichier Package.resolved, les miroirs ou dépendances privées, puis le journal complet de swift build. Relancez ensuite le test concerné avec swift test. Sans reproduction et sans trace, il est impossible de distinguer un changement d’outil, un problème du projet ou une différence d’environnement.
Faut-il basculer immédiatement la CI de production vers Swift 6.4 ?
Non, pas sur la seule base de la publication. Commencez par une tâche isolée qui conserve le commit, les dépendances et les objectifs habituels. Faites-la accepter uniquement si les builds, les tests et les éléments de preuve répondent aux critères de l’équipe ; généralisez ensuite par étapes. Si un écart reste inexpliqué ou non reproductible, gardez la tâche de référence et différez la bascule.
[ SECTION_08 ] Choisir un environnement de validation adapté
Pour une équipe qui possède déjà un Mac disponible et sait isoler ses tâches, la solution la plus simple peut être de tester sur ce nœud en préservant la chaîne de référence. Elle évite une nouvelle dépendance de service, mais l’équipe doit gérer elle-même la disponibilité, l’entretien de la machine et la séparation entre essais et travaux habituels. Si la même machine sert aux développements quotidiens, l’isolation des conditions et l’interprétation des écarts peuvent aussi devenir plus difficiles.
Un serveur Linux reste pertinent pour les tâches qui ne nécessitent pas les outils Apple. Il ne remplace toutefois pas un environnement macOS lorsque l’objectif de validation exige réellement Swift et ses outils sur macOS. Une machine virtuelle ou une configuration non Apple ne doit pas être présumée équivalente : la décision doit reposer sur les outils et tâches que le projet doit valider.
Si l’équipe ne dispose pas d’un environnement macOS indépendant, un Mac distant peut servir à isoler l’essai, préserver le nœud de référence et collecter des journaux comparables. La contrepartie est d’introduire un accès distant et une ressource supplémentaire à administrer ; une tâche qui tourne en continu ou exige des interfaces physiques peut justifier un Mac dédié plutôt qu’une location ponctuelle. Le choix doit donc suivre la durée d’utilisation, le niveau de contrôle requis et les responsabilités d’exploitation, pas la seule nouveauté de Swift 6.4.
Avant toute généralisation, exigez une chaîne de preuves courte mais complète : outil effectivement appelé, dépendances comparables, compilation des objectifs retenus, tests exécutés et répétition conforme aux règles de l’équipe. Lorsque le seul obstacle est l’absence d’un macOS isolé pour cette validation, évaluez si un Mac distant via NOVAKVM convient à l’essai ; conservez l’option d’un Mac dédié si le besoin devient permanent ou dépend de matériel local.
Questions fréquentes
Qu’est-ce qui change pour la compilation SwiftPM avec Swift 6.4 ?
La note de publication de Swift 6.4 indique que SwiftPM utilise désormais Swift Build par défaut. Cette évolution concerne les tâches exécutées par SwiftPM avec l’outil réellement sélectionné ; elle ne signifie pas que les projets Xcode ni leurs processus d’archivage basculent automatiquement. Vérifiez donc la commande et le contexte de chaque tâche avant de conclure que votre chaîne est concernée.
Comment vérifier que la CI macOS exécute bien Swift 6.4 ?
Dans la tâche elle-même, consignez la sortie de `swift --version`, le chemin renvoyé par `command -v swift` et, si la tâche passe par les outils en ligne de commande Apple, le résultat de `xcode-select -p`. Ces éléments doivent être capturés par le même travail que le build : une version installée sur l’hôte ne prouve pas qu’elle est celle appelée par le script.
Que vérifier si un paquet Swift ne compile plus après le changement ?
Repartez du même commit et des mêmes conditions de dépendances. Comparez l’outil et son chemin, l’état du fichier `Package.resolved`, les miroirs ou dépendances privées, puis le journal complet de `swift build`. Relancez ensuite le test concerné avec `swift test`. Sans reproduction et sans trace, il est impossible de distinguer un changement d’outil, un problème du projet ou une différence d’environnement.
Faut-il basculer immédiatement la CI de production vers Swift 6.4 ?
Non, pas sur la seule base de la publication. Commencez par une tâche isolée qui conserve le commit, les dépendances et les objectifs habituels. Faites-la accepter uniquement si les builds, les tests et les éléments de preuve répondent aux critères de l’équipe ; généralisez ensuite par étapes. Si un écart reste inexpliqué ou non reproductible, gardez la tâche de référence et différez la bascule.