La commande Xcode / usr / bin / codesign a échoué avec le code de sortie 1: errSecInternalComponent

105

J'essaie d'ajouter un nouveau profil d'approvisionnement à mon Xcode, pour tester une application sur l'appareil. Voici les étapes que j'ai suivies:

  1. Suppression de tous les certificats et profils d'approvisionnement

  2. Créer / ajouter un certificat de développement IOS

  3. Ajouter mon appareil IOS en ligne

  4. Créer un profil d'approvisionnement IOS

  5. Ajouter un profil d'approvisionnement IOS

  6. Nettoyer l'application

  7. Construire puis exécuter l'application

  8. Définir la signature de code et le profil d'approvisionnement dans les paramètres de construction

  9. Beaucoup de googlages> sans succès

Voici l'erreur que j'obtiens:

CSSM_SignData returned: 800108E6
/Users/alexpelletier/Library/Developer/Xcode/DerivedData/MyExpense-efnqzvoqwngzcmazaotyalepiice/Build/Products/Debug-iphoneos/MyExpense.app:     errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1
Alex Pelletier
la source
1
L'erreur provient d'une non-concordance dans la configuration du profil d'approvisionnement, les certificats et l'ID du bundle. Assurez-vous que votre PP, votre identifiant de bundle et vos certificats sont correctement configurés dans le et correctement attribués dans iTunes Connect et dans l'application.
Alex Pelletier
1
J'ai rencontré ce problème en passant de Xcode 11.2.1 à 11.3 lors de la signature de code des frameworks construits par moi. Aucun profil d'approvisionnement n'était impliqué. La réponse de Mohit Man l'a éclairci.
Daniel Zhang
Cela se produit si vous utilisez SSH et que la signature de code n'est pas autorisée à accéder à la clé privée dans le trousseau. Pour vérifier cela, recherchez la clé dans le trousseau, faites un clic droit et sélectionnez «Obtenir des informations», passez à «Contrôle d'accès» et voyez si l'application «codesign» est dans la liste «Toujours autoriser l'accès». Voir ce commentaire github.com/electron-userland/electron-builder/issues/... Ce que j'ai fait est d' exécuter les scripts une fois à partir de l'interface graphique et de cliquer sur "Toujours autoriser" pour l'accès par clé, puis cela a commencé à fonctionner.
ArticIceJuice le

Réponses:

241

Ouvrez Keychain Access , puis dans le menu File , sélectionnez Lock All Keychains .

Revenez ensuite à Xcode et nettoyez et reconstruisez. Il vous demandera à nouveau votre mot de passe pour déverrouiller le trousseau.

Après cela, en supposant que vous n'ayez aucun autre problème de compilation, cela réussira!

Mohit Manhas
la source
7
Incroyable que ce verrouillage et déverrouillage idiot aide! Merci
Josip B.
8
Cela devrait être la réponse acceptée. Beaucoup plus sain d'esprit qu'un redémarrage!
yonix
3
A travaillé pour moi aussi. Créez un apk pour Android 30 secondes, créez une application pour iOS .. 2 heures.
Gabe
1
Sérieusement WTF?! Merci!
Peter N Lewis
1
@FredericP Pour moi, j'avais récemment changé mon mot de passe. Il y a donc eu une interaction entre la dernière fois que le trousseau a été déverrouillé par xcode et le mot de passe utilisé pour le faire.
sherrellbc
77

Cela semble être un bogue dans le mécanisme de signature de code, le redémarrage de votre mac devrait résoudre le problème

sigabrt
la source
cas différent, mais message d'erreur similaire - redémarrage a fonctionné.
mikus
Près de quatre ans plus tard, et ça marche toujours! J'ai oublié la règle d'or - "En cas de doute, redémarrez!"
Alan
2
Si vous attendez une solution moins destructrice, voir la réponse de Mohit Manhas ci
yonix
ne m'a pas aidé
Anoop Vaidya
70

Cela se produit lorsque le trousseau de connexion est verrouillé. Pour déverrouiller le trousseau de connexion, exécutez:

security unlock-keychain login.keychain

Si votre trousseau est protégé par mot de passe, spécifiez le mot de passe à l'aide de l' -poption.

Ensuite, essayez à nouveau l'opération de génération ou de signature de code. Le code d'erreur en question est décrit dans la documentation d'Apple comme une erreur interne, il est donc tout à fait possible que cela se produise également dans d'autres cas.

cbracken
la source
1
Malheureusement, cette solution semble entièrement circulaire: exécuter la commande ci-dessus vous oblige à entrer le mot de passe, ce qui est évidemment interdit dans une session non interactive (comme lors de son exécution via un agent CI tel que Jenkins).
Konrad Rudolph
C'est un bon point - comme vous le dites, ce n'est pas approprié pour une session non interactive telle qu'un bot CI. C'est utile lors de l'exécution de builds distants dans une session de ligne de commande (par exemple via ssh).
cbracken
3
Nous avons eu un problème similaire sur Jenkins, et en plus de ce qui est mentionné dans la commande ci-dessus, nous avons dû passer le mot de passe comme argument à la commande, nous avons donc fait "security unlock-keychain -p $ KeychainPassword <login-keychain>", où vous pouvez facilement stocker KeychainPaasword sur Jenkins en toute sécurité.
Mohit Tater
1
Je ne peux pas vous remercier assez pour ce post. J'ai passé quelques jours à essayer de comprendre pourquoi codesignéchouait et c'est la commande magique qui m'a sauvé !!!
Dimu4
32

Eu le même problème sur High Sierra/ Xcode 9.4.1, toutes les tentatives de connexion se sont terminées parerrSecInternalComponent

    • Accéder à l'accès au trousseau
    • Accédez au trousseau de connexion
    • Sélectionnez la catégorie "Mes certificats"
    • Recherchez le certificat avec lequel vous signez et développez-le pour voir la clé.
    • Double-cliquez sur la clé
    • Allez dans l'onglet "Contrôle d'accès".
    • Mettez à jour le contrôle d'accès par clé sur "Autoriser toutes les applications à accéder à cet élément"

Alternativement:

exécuter la commande codesign sur le terminal mac et "Toujours autoriser" / usr / bin / codesign l'accès à la clé

  1. Si vous essayez de vous connecter à partir de ssh / CI, vous devez également exécuter

    security unlock-keychain login.keychain

    avant d'essayer de signer le bundle d'applications

Équilibre
la source
Pouvez-vous élaborer sur "mettre à jour le contrôle d'accès par clé pour" Autoriser toutes les applications à accéder à cet élément "? Je n'ai aucune idée de ce que cela signifie même.
Jon McClung
2
@JonMcClung Ouvrez l'accès au trousseau, accédez au trousseau de connexion - mes certificats. Recherchez le certificat avec lequel vous signez, développez-le pour voir la clé. Double-cliquez sur la clé et vous devriez voir l'onglet "Contrôle d'accès". Switch to allow is there
Equilibrium
5
@KonradRudolph security unlock-keychain -p <password> login.keychainde CI.
Equilibrium
1
@KonradRudolph il n'est pas nécessaire de fournir un mot de passe pour le trousseau de déverrouillage de sécurité si vous avez autorisé le code d'accès à accéder à une clé privée. Il suffit de laisser une chaîne vide comme mot de passe.
Kamil Szostakowski
1
@KonradRudolph n'est probablement pas encore idéal, mais vous pouvez déplacer cette commande de déverrouillage ~/.bash_profilepour que le trousseau se déverrouille au démarrage du client SSH, mais vous n'avez pas besoin d'y faire référence à partir de votre script CI
sschilli
17

J'ai rencontré le même problème, je redémarre mon macOS, et ça marche.

En Chine, nous avons un dicton entre développeurs:

Petits problèmes, il suffit de redémarrer, de gros problèmes devraient réinstaller.

Parfois, le dicton ci-dessus vous aidera grandement!

ifeegoo
la source
7
Nous avons dit en Amérique - `` Ne jamais redémarrer l'ancien matériel ''
Brant
@Brant Pourquoi avez-vous ce dicton? C'est intéressant.
ifeegoo
Je plaisante - mais nous avons eu un problème similaire et avons finalement simplement recouru au redémarrage d'un ancien serveur.
Brant
1
@ifeegoo Les anciens serveurs peuvent avoir des problèmes lors du démarrage de la sauvegarde (peut-être que le système d'exploitation s'est mis à jour lui-même? peut-être que quelqu'un a cassé les scripts de démarrage?) ou ont besoin d'une procédure de démarrage manuelle dont personne n'est au courant. Vous ne pouvez pas savoir avant de l'essayer. Peut-être que la rom bios avait mal tourné. C'est juste une de ces choses qui ne devraient pas être un problème dans un environnement bien entretenu, mais vous ne savez pas vraiment avant d'essayer et vous préférez ne pas essayer.
Lassi Kinnunen
1
@LassiKinnunen Vous avez raison, nous sommes des développeurs mobiles pour Android et iOS, donc ce genre de situation ne se soucie pas des serveurs. Les serveurs sont vraiment dangereux, ce n'est pas situable.
ifeegoo
8

Au cas où cela aiderait quelqu'un d'autre, j'ai rencontré une errSecInternalComponenterreur avec codesignparce que je l'exécutais sur une session ssh sur ma machine macOS. L'exécution de la même commande à partir d'une fenêtre de terminal sur la machine macOS elle-même fonctionnait.

C'est probablement parce qu'il a codesignbesoin d'accéder à la clé privée à partir du trousseau de connexion.

L'exécution security unlock-keychain login.keychain(comme expliqué par la réponse de cbracken ) à partir de la même session devrait également fonctionner.

Jamesdlin
la source
C'est très étrange, même l'exécution de la commande de déverrouillage du trousseau semble échouer silencieusement car le code ne fonctionne toujours pas. Mais exécuter les mêmes commandes en utilisant le bureau à distance (au lieu de SSH) fonctionne bien.
Max
2

Si vous essayez de vous connecter à partir de la commande ssh run:

security unlock-keychain login.keychain

avant d'essayer de signer le bundle d'applications

ou depuis l'interface utilisateur

Mettez à jour le contrôle d'accès par clé sur "Autoriser toutes les applications à accéder à cet élément"

Merci à @Equilibrium et @Jon McClung

Stas S
la source
2

J'ai eu le même problème J'ai découvert que le problème était lié à la signature du code de l'application.

Opened the developer account and accepted the updated agreement and it worked.  

entrez la description de l'image ici

Sahiljain
la source
2

J'ai couru security unlock-keychain login.keychainet mon mot de passe de connexion n'a pas fonctionné. J'ai donc redémarré, puis j'ai à nouveau exécuté Xcode et cela a fonctionné. L'exécution de la commande fonctionne également. Problème étrange.

sunapi386
la source
2

Comme indiqué par @Equilibrium dans l'un des commentaires, si vous êtes en ligne de commande env. comme Jenkins (mon cas), vous devrez peut-être passer le mot de passe à la commande security-unlock mentionnée dans les solutions.

Donc au lieu d'utiliser,

security unlock-keychain login.keychain

utilisation:

security unlock-keychain -p <login-keychain-password> <path-to-login-keychain>

où le trousseau de chemin d'accès peut être $ HOME / Library / Keychains / login.keychain (mon cas) ou simplement login.keychain

Mohit Tater
la source
Votre réponse est basée sur la réponse @equilibrium, mais je vais la concevoir. Sur Bamboo CI, j'ai aidé à commander security unlock-keychain -p {account-password} login.keychain
A.Kant
2

pour tous ceux qui ont rencontré ce problème de jenkins et ssh:

possibilité élevée que vous n'ayez pas autorisé l'accès à la clé privée dans le trousseau, j'ai essayé mais je ne sais pas pourquoi tout cela ne fonctionne pas:

  1. importation de sécurité fichier .p12 avec -A ou -T / usr / bin / codesign
  2. sécurité set-key-partition-list -S apple-tool:, apple:, codesign: -s -k # {password} # {keychainPath}
  3. changez tous les profils de provisioning en [UUID] .mobileprovision et copiez-les dans '~ / Library / MobileDevice / Provisioning \ Profiles' sur le serveur jenkins
  4. nettoyer les données dérivées et redémarrer le serveur jenkins
  5. assurez-vous que le trousseau par défaut est le trousseau de connexion et déverrouillez-le.

finalement résolu par:

1.ssh [utilisateur] @ [jenkinsServerIP] -L 5900: localhost: 5900, connectez-vous au serveur jenkins

2. ouvrez «vnc: // localhost»

cela lancera un écran distant, si votre serveur jenkins le permet ...

puis ouvrez keychain.app pour accorder l'accès de / usr / bin / codesign à la clé privée

bonne chance

Xi Zhang
la source
1

Essayez-le simplement une fois en utilisant le terminal mac mais pas depuis la session ssh

security unlock-keychain login.keychain

Et choisissez toujours autoriser dans la boîte de dialogue qui s'affiche. Et puis vous pouvez xcodebuild dans la session à distance.

Félix
la source
1

Un clic droit sur la clé privée associée au certificat de signature de code dans le trousseau, puis en cliquant sur `` autoriser toutes les applications '' au lieu de compter sur une invite l'a corrigé pour moi, car la construction se faisait via ssh.

Pastille
la source
0

J'ai dû:

1) supprimer le certificat associé au projet

2) Revenez au Xcode et révoquez le certificat d'application

3) Le Xcode nécessite un nouveau certificat

4) Verrouiller tous les KeyChain

5) Nettoyez le projet

6) Reconstruire

C'est tout. J'espère que cela aide n'importe qui.

Andres Felipe
la source
0

Les méthodes ci-dessus me sont inutiles.

Je l'ai résolu par:

  1. Ouvrez l'accès au trousseau.
  2. Cliquez sur Menu de connexion.
  3. Supprimez tous les certificats personnels.
  4. Nettoyez le projet.
  5. Reconstruire.

C'est tout. J'espère que cela aide n'importe qui.

yerwoo_gmail
la source