Si la synchronisation des certificats fastlane match échoue, conservez d’abord le journal complet, repérez l’étape fautive, puis corrigez uniquement le dépôt, le déchiffrement, le trousseau ou le profil concerné. Ne révoquez pas tous les certificats avant d’avoir établi la cause. Cette méthode convient particulièrement après le transfert d’un projet vers un Mac distant, où le compte qui lance la compilation peut différer de celui utilisé lors des vérifications manuelles.
Ce guide s’adresse aux développeurs iOS indépendants qui n’ont pas de Mac local et configurent fastlane match sur un Mac distant.
Il s’adresse aussi aux petites équipes qui migrent leur compilation et voient une clé privée ou un profil devenir introuvable.
Enfin, il aide les responsables d’un Mac de compilation permanent à éviter la régénération ou la révocation inutile de matériel de signature.
Reconstituer l’échec à partir du journal
Ne commencez pas par modifier les certificats. Commencez par sauvegarder la sortie complète de la commande qui échoue, ainsi que la commande réellement lancée, le répertoire de travail et le contexte d’exécution. Masquez tout secret avant de partager ce journal. Un extrait isolé peut cacher le fait que fastlane a terminé la synchronisation avant que xcodebuild ne rencontre ensuite un problème de signature.
La distinction essentielle est celle entre ces étapes :
| Étape observée | Indice dans la sortie | Vérification prioritaire |
|---|---|---|
| Accès au dépôt | Échec de clonage, authentification ou lecture des fichiers | URL, identité SSH ou accès au dépôt |
| Déchiffrement | Dépôt récupéré, mais données chiffrées illisibles | Secret de déchiffrement et configuration de stockage |
| Installation | Synchronisation amorcée, mais certificat ou clé privée indisponible | Importation dans le trousseau du compte de compilation |
| Signature de la cible | Échec après la synchronisation, pendant la compilation ou l’archivage | Bundle ID, cible, profil et réglages de signature |
Cette séparation évite une erreur de diagnostic fréquente : attribuer à match un échec qui survient après son exécution. La documentation fastlane recommande de traiter les problèmes de signature à partir de l’erreur concrète et de vérifier le contexte de signature ; reportez-vous à son guide de dépannage de la signature de code et à sa liste des problèmes de signature courants.
Pour isoler la source, relancez la même tâche dans le même environnement après avoir noté les conditions initiales. Ne changez pas simultanément l’URL du dépôt, le secret, le trousseau et le profil : si le résultat change, vous ne saurez pas quel changement l’a corrigé. Si le journal s’arrête avant la récupération des fichiers, examinez l’accès au dépôt. S’il montre que les fichiers ont été récupérés, passez au déchiffrement. Si match termine, mais que la compilation échoue, vérifiez la signature de la cible plutôt que de relancer toute la synchronisation à l’aveugle.
Distinguer accès au dépôt et déchiffrement
Un Mac distant peut se trouver dans une situation différente de votre poste local, même si le projet et la commande sont identiques. Le dépôt peut être privé, l’identité SSH peut ne pas être chargée, ou le processus automatisé peut ne pas recevoir le même secret que votre terminal. Séparez donc deux questions : le Mac peut-il lire le dépôt, et fastlane peut-il déchiffrer son contenu ?
| Symptôme | Ce qu’il établit | Ce qu’il ne prouve pas |
|---|---|---|
| Le clonage échoue avant la lecture du contenu | L’accès au dépôt n’est pas établi | Que le secret de déchiffrement est erroné |
| Le clonage réussit et les fichiers sont présents | L’accès au dépôt fonctionne pour cette exécution | Que les fichiers peuvent être déchiffrés |
| fastlane signale une erreur de déchiffrement | La récupération a probablement progressé au-delà de l’accès initial | Que les certificats doivent être recréés |
Vérifiez d’abord l’URL de stockage, le mode configuré pour match et l’identité utilisée pour accéder au dépôt. Comparez la configuration attendue par le projet avec celle que charge réellement la tâche distante. Si l’authentification repose sur SSH, vérifiez que la clé correspondante est disponible pour le compte exécutant fastlane. Ne copiez pas une clé privée dans une commande, un fichier de configuration partagé ou une sortie de journal pour faciliter le diagnostic.
Si les fichiers arrivent, vérifiez ensuite que le secret de déchiffrement est présent dans l’environnement qui lance la tâche, et non seulement dans une session graphique ou un fichier chargé par votre shell interactif. La documentation fastlane précise les options de stockage de match et le rôle du mot de passe de déchiffrement. Suivez cette référence pour confirmer que votre exécution utilise les paramètres attendus. Ne publiez jamais la valeur d’un secret pour démontrer qu’il est configuré.
Procédure reproductible :
- Notez le mode de stockage et l’adresse du dépôt attendus par le projet.
- Lancez, depuis le compte prévu pour la compilation, un contrôle d’accès au dépôt qui ne révèle aucun secret.
- Vérifiez que l’environnement de la tâche fournit les variables nécessaires, sans afficher leur contenu.
- Exécutez match avec la configuration habituelle et conservez la sortie expurgée.
- Si le dépôt est lisible mais pas déchiffrable, corrigez le secret ou sa transmission avant de toucher aux certificats.
Pour gérer le transfert des secrets entre postes et tâches, vous pouvez également consulter les recommandations de protection des données. L’objectif n’est pas de rendre le secret visible pour le tester, mais de vérifier sa présence et son mode de transmission dans le contexte effectif.
Vérifier le trousseau et la clé privée du compte de compilation
La présence d’un fichier de certificat ne prouve pas que le trousseau contient une identité de signature utilisable. Pour signer, il faut que le certificat et sa clé privée correspondante soient disponibles dans le contexte qui exécute la compilation. Un contrôle effectué dans une session de bureau distant peut donc donner un résultat différent de celui obtenu par SSH ou par une tâche d’intégration continue.
Imaginez que match termine correctement dans un terminal graphique, mais qu’une tâche lancée en arrière-plan échoue en indiquant qu’aucune identité de signature n’est disponible. Réimporter immédiatement les certificats ne résout pas nécessairement le problème : la tâche peut simplement ne pas accéder au même trousseau, ou tourner sous un autre compte. Comparez d’abord l’utilisateur et l’environnement du processus qui échoue avec ceux de la session où la vérification semblait réussir.
Depuis l’environnement de compilation, examinez les identités de signature visibles et confirmez que l’identité attendue inclut bien une clé privée. Le contrôle doit être réalisé sous le compte qui lance le processus, pas seulement depuis votre propre session interactive. La documentation d’Apple explique la relation entre certificat de signature et clé privée. Si le certificat apparaît sans la clé correspondante, la présence du certificat seul ne suffit pas pour signer.
Contrôlez ensuite le mécanisme utilisé pour rendre le trousseau accessible à la tâche. Un processus non interactif peut ne pas hériter des mêmes paramètres de session qu’un terminal ouvert dans le bureau distant. Évitez de résoudre le problème en exportant une clé privée vers un emplacement non protégé ou en désactivant durablement les contrôles d’accès. Corrigez plutôt le contexte d’exécution ou l’accès au trousseau, puis répétez la vérification dans ce même contexte.
Une commande réussie dans votre session ne valide pas une tâche exécutée par un autre compte. Pour éviter un faux diagnostic, consignez l’utilisateur, le mode de lancement et le trousseau contrôlé, sans enregistrer de secret ni de clé privée.
Pour les contrôles de configuration Xcode lancés depuis la ligne de commande, vérifiez aussi quel outil est effectivement sélectionné et quel chemin est utilisé par la tâche. La référence des outils de ligne de commande Xcode décrit les commandes permettant de vérifier la sélection des outils. Faites le contrôle depuis l’environnement de compilation concerné, et non depuis une session différente dont la configuration pourrait diverger.
Faire correspondre le profil à la cible
Lorsque la synchronisation se termine, mais que la signature échoue, contrôlez le profil de provisionnement réellement sélectionné pour la cible qui échoue. Un profil peut être valide et néanmoins ne pas correspondre au Bundle ID, au type de signature ou au certificat utilisé par cette cible.
Procédez dans cet ordre :
- Relevez le Bundle ID effectif de la cible dans les réglages de construction, sans vous fier uniquement au nom du projet.
- Identifiez la cible mentionnée dans la première erreur de signature : application, extension ou autre composant.
- Vérifiez le type de distribution attendu par cette opération et le profil associé.
- Examinez le contenu du profil sélectionné et contrôlez qu’il correspond à la cible et au certificat nécessaires.
- Comparez enfin les réglages de signature appliqués par la configuration de construction avec le profil réellement disponible.
Cette vérification par cible est importante dans un projet contenant plusieurs identifiants d’application. Le réglage de l’application principale ne garantit pas que celui d’une extension soit correct. Une extension peut avoir son propre Bundle ID et nécessiter un profil distinct. Vérifiez donc chaque correspondance, au lieu de conclure que tous les composants sont signés parce que l’application principale est correctement configurée.
Apple documente les actions possibles pour modifier, télécharger ou supprimer un profil et les étapes de création d’un profil destiné à la distribution sur l’App Store. Utilisez ces procédures après avoir déterminé ce qui ne correspond pas. Une actualisation forcée ou une recréation n’est pas un diagnostic : si la mauvaise cible ou le mauvais type de signature est sélectionné, un profil renouvelé peut laisser la cause intacte.
Pour les problèmes qui concernent plusieurs réglages Xcode, distinguez les valeurs configurées dans le projet de celles appliquées par la tâche de compilation. Une surcharge de configuration peut sélectionner un profil différent de celui attendu. Si vous devez examiner la gestion globale de la signature plutôt qu’un seul profil, utilisez un guide consacré au dépannage de la signature Xcode et des profils de provisionnement comme point de départ, puis confrontez chaque réglage aux valeurs réellement utilisées par la cible fautive.
Appliquer un correctif sans multiplier les changements
Une fois l’étape défaillante identifiée, choisissez la réparation la moins destructive. Cette liste de décision aide à ne pas confondre un problème de transmission avec un problème de matériel de signature :
- Si le dépôt ne se clone pas, corrigez l’adresse, l’identité SSH ou les droits d’accès ; ne régénérez pas les certificats.
- Si le dépôt est lisible mais que le contenu ne se déchiffre pas, corrigez la disponibilité du secret et la configuration de match ; ne modifiez pas le profil sans preuve d’un problème de profil.
- Si match termine mais que l’identité est absente pour le processus, corrigez l’utilisateur ou l’accès au trousseau ; ne révoquez pas le certificat avant d’avoir vérifié la clé privée.
- Si l’identité est utilisable mais que la cible refuse le profil, corrigez d’abord le Bundle ID, la cible, le type de signature ou le profil effectivement sélectionné.
- Si l’étape qui échoue se trouve après match, diagnostiquez la compilation et la configuration Xcode plutôt que de traiter l’erreur comme un échec de synchronisation.
Dans chaque cas, ne modifiez qu’un élément, relancez la même commande et consignez le résultat. Cette méthode rend le correctif vérifiable et permet de revenir à la configuration précédente si le symptôme persiste. Avant une modification du profil ou d’un certificat, confirmez quelle cible en dépend et si d’autres tâches utilisent le même matériel de signature.
Il est également utile de distinguer l’option de lecture seule d’une opération destinée à modifier ou à renouveler le contenu géré par match. Pour vérifier une synchronisation sans vouloir créer de nouveaux éléments, ne choisissez pas une commande qui peut modifier l’état du stockage. Consultez la documentation officielle de match pour confirmer le mode approprié à votre configuration, puis assurez-vous que l’équipe partage les mêmes attentes avant d’exécuter une opération qui change les certificats.
Revalider la compilation et conserver une trace utile
Une réparation n’est confirmée que si la tâche réelle fonctionne, pas seulement si une commande isolée affiche une identité. Rejouez la séquence dans l’environnement qui posait problème et conservez une trace expurgée. Vérifiez dans cet ordre :
- La commande atteint le dépôt attendu et récupère les éléments nécessaires.
- Le déchiffrement aboutit avec la configuration disponible pour cette tâche.
- L’identité de signature attendue est visible sous le compte effectif et associée à sa clé privée.
- Le profil correspond au Bundle ID, à la cible et au mode de distribution.
- La compilation de la cible concernée réussit, puis l’archive contient les éléments attendus.
Si la compilation réussit, mais que l’archive échoue, revenez au premier message d’erreur pertinent de l’archivage. Ne déduisez pas que toutes les cibles sont correctement signées à partir de la seule application principale. Conservez les éléments utiles pour une prochaine migration : version de fastlane et de Xcode réellement utilisées, compte qui lance la tâche, mode de lancement, paramètres de stockage non sensibles, cible testée et résultat de la vérification.
Ces notes doivent être propres à votre environnement. Elles ne permettent pas de conclure que la même combinaison fonctionnera pour tous les projets : la configuration des cibles, des profils et du trousseau varie. Si vous devez déplacer un pipeline vers un Mac distant, distinguez les contrôles faits depuis le bureau distant de ceux réalisés par le processus de compilation et consignez les résultats séparément.
Questions fréquentes sur fastlane match
Que vérifier si fastlane match ne déchiffre pas les certificats sur un nouveau Mac ?
Commencez par établir que le dépôt a été cloné ; un échec d’accès au dépôt et un échec de déchiffrement ne demandent pas la même correction. Si les fichiers sont accessibles, contrôlez ensuite que le secret est fourni à l’environnement qui exécute fastlane. Vérifiez enfin le mode de stockage et la configuration du projet, sans exposer le secret ni régénérer les certificats par réflexe.
Comment retrouver une clé privée introuvable sur un Mac distant ?
Exécutez le contrôle depuis le compte et la tâche qui échouent, puis vérifiez que l’identité de signature est associée à une clé privée dans le trousseau accessible à ce processus. Un certificat présent sur le disque ou visible dans une autre session ne suffit pas. Comparez le lancement depuis le terminal, SSH et l’automatisation, sans déplacer la clé vers un emplacement non protégé.
Pourquoi le profil de provisionnement ne correspond-il pas au certificat ?
Le profil peut viser un Bundle ID ou une cible différente, ou être associé à un autre type de signature. Examinez le profil effectivement sélectionné par Xcode et comparez son contenu aux réglages de la cible qui échoue. Pour un projet avec des extensions, vérifiez chaque identifiant séparément ; ne supposez pas que le profil de l’application principale couvre les autres composants.
Pourquoi fastlane échoue-t-il depuis SSH ou une tâche automatisée alors qu’il fonctionne dans le bureau distant ?
Les deux exécutions peuvent employer un utilisateur, un trousseau ou des variables d’environnement différents. Vérifiez le compte effectif et l’accès au trousseau dans le processus qui construit réellement l’application. Si l’identité fonctionne dans la session graphique mais pas dans la tâche automatisée, corrigez d’abord ce contexte plutôt que de remplacer les certificats ou de créer un profil supplémentaire.
Un Mac local offre un environnement directement accessible, mais il mobilise votre propre matériel et peut devenir une dépendance du pipeline ; un service de compilation abstrait peut réduire la maintenance locale, mais ne résout pas automatiquement les particularités de votre trousseau ou de vos cibles. Un Mac distant ajoute ses propres exigences : accès réseau, gestion des secrets et vérification du compte qui lance la tâche. Si vos builds locaux sont fiables mais que la signature échoue de façon répétée après migration, commencez par valider un environnement distant avec les mêmes contrôles et une trace reproductible.
Si vous avez besoin d’un Mac accessible à distance pour tester votre chaîne de compilation sans acheter immédiatement une machine dédiée, vous pouvez examiner les options de Mac mini sur MangoVM. Pour une charge lourde et constante ou un besoin de périphériques physiques locaux, conserver ou acheter un Mac local peut rester plus adapté ; pour une migration, des tests ou une compilation distante, comparez cette contrainte avec votre fréquence de publication avant de choisir.
Questions fréquentes
Que vérifier si fastlane match ne déchiffre pas les certificats sur un nouveau Mac ?
Commencez par vérifier que le dépôt a bien été cloné. Si les fichiers chiffrés sont présents, contrôlez ensuite que le secret de déchiffrement est disponible dans l’environnement qui exécute réellement fastlane, sans l’afficher dans les journaux. Vérifiez aussi le mode de stockage et la configuration utilisés par le projet avant de régénérer des certificats.
Comment retrouver une clé privée introuvable sur un Mac distant ?
Dans la session et sous le compte utilisés pour la compilation, vérifiez si l’identité de signature apparaît dans le trousseau et si elle est associée à une clé privée. La présence d’un fichier de certificat ne prouve pas que la clé est importée. Comparez l’accès depuis le terminal interactif avec celui du processus automatisé.
Pourquoi le profil de provisionnement ne correspond-il pas au certificat ?
Contrôlez le Bundle ID, la cible Xcode, le type de signature et le certificat associé au profil réellement sélectionné. Un profil valide pour l’application principale ne l’est pas nécessairement pour une extension. Consultez son contenu et les réglages de construction avant de le modifier ou de le recréer.
Pourquoi fastlane échoue-t-il depuis SSH ou une tâche CI alors qu’il fonctionne dans le bureau distant ?
Le terminal interactif et une tâche non interactive peuvent utiliser des comptes, des variables d’environnement ou un trousseau différents. Exécutez les vérifications depuis le même compte et le même contexte que la compilation, sans supposer que l’accès observé dans une session graphique sera identique à celui du processus automatisé.
Stabilisez la signature de vos builds iOS sur un Mac dédié
Avec MangoVM, utilisez un Mac mini Apple Silicon physique dédié pour vérifier la synchronisation des certificats dans un environnement maîtrisé et reproductible.
