Xcode-Befehl / usr / bin / Codesign fehlgeschlagen mit Exit-Code 1: errSecInternalComponent

104

Ich versuche, meinem Xcode ein neues Bereitstellungsprofil hinzuzufügen, um eine App auf dem Gerät zu testen. Hier sind die Schritte, die ich befolgt habe:

  1. Alle Zertifikate und Bereitstellungsprofile gelöscht

  2. Erstellen / Hinzufügen eines IOS-Entwicklungszertifikats

  3. Fügen Sie mein IOS-Gerät online hinzu

  4. Erstellen Sie ein IOS-Bereitstellungsprofil

  5. Fügen Sie das IOS-Bereitstellungsprofil hinzu

  6. App reinigen

  7. Erstellen und dann App ausführen

  8. Festlegen des Codesignierungs- und Bereitstellungsprofils in den Build-Einstellungen

  9. Viel googeln> ohne Erfolg

Hier ist der Fehler, den ich bekomme:

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
quelle
1
Der Fehler ist auf eine Nichtübereinstimmung im Setup des Bereitstellungsprofils sowie in den Zertifikaten und der Bundle-ID zurückzuführen. Stellen Sie sicher, dass Ihre PP, Bundle-ID und Zertifikate in iTunes Connect und in der App korrekt eingerichtet und zugewiesen sind.
Alex Pelletier
1
Ich habe dieses Problem beim Übergang von Xcode 11.2.1 auf 11.3 beim Signieren von von mir erstellten Frameworks festgestellt. Es waren keine Bereitstellungsprofile beteiligt. Die Antwort von Mohit Man hat es geklärt.
Daniel Zhang
Dies geschieht, wenn Sie SSH verwenden und Codesign keinen Zugriff auf den privaten Schlüssel im Schlüsselbund hat. Um dies zu überprüfen, suchen Sie den Schlüssel im Schlüsselbund, klicken Sie mit der rechten Maustaste und wählen Sie "Informationen abrufen", wechseln Sie zu "Zugriffskontrolle" und prüfen Sie, ob die App "Codesign" in der Liste "Zugriff immer zulassen" enthalten ist. Siehe diesen Kommentar. Github.com/electron-userland/electron-builder/issues/… Ich habe die Skripte einmal über die GUI ausgeführt und auf "Immer zulassen" für den Schlüsselzugriff geklickt. Dann hat es funktioniert.
ArticIceJuice

Antworten:

239

Öffnen Sie den Schlüsselbundzugriff und wählen Sie im Menü Datei die Option Alle Schlüsselanhänger sperren .

Gehen Sie dann zurück zu Xcode und reinigen und neu erstellen. Sie werden erneut aufgefordert, Ihr Passwort einzugeben, um den Schlüsselbund zu entsperren.

Vorausgesetzt, Sie haben keine anderen Kompilierungsprobleme, wird dies erfolgreich sein!

Mohit Manhas
quelle
7
Unglaublich, dass dieses alberne Sperren und Entsperren hilft! Vielen Dank
Josip B.
8
Dies sollte die akzeptierte Antwort sein. Viel vernünftiger als ein Neustart!
Yonix
3
Hat auch für mich gearbeitet. Erstellen Sie eine apk für Android 30 Sekunden, erstellen Sie eine App für iOS .. 2hs.
Gabe
1
Ernsthaft WTF?! Vielen Dank!
Peter N Lewis
1
@FredericP Für mich hatte ich kürzlich mein Passwort geändert. Es gab also ein gewisses Zusammenspiel zwischen dem letzten Entsperren des Schlüsselbunds durch xcode und dem dafür verwendeten Passwort.
Sherellbc
77

Es scheint ein Fehler im Code-Signatur-Mechanismus zu sein. Ein Neustart Ihres Mac sollte das Problem lösen

Sigabrt
quelle
anderer Fall, aber ähnliche Fehlermeldung - Neustart funktioniert.
Mikus
Fast vier Jahre später, und es funktioniert immer noch! Ich habe die Goldene Regel vergessen - "Wenn Sie Zweifel haben, starten Sie neu!"
Alan
2
Wenn Sie auf eine weniger zerstörerische Lösung warten, lesen Sie die Antwort von Mohit Manhas weiter unten
yonix
hat mir nicht geholfen
Anoop Vaidya
70

Dies tritt auf, wenn der Anmeldeschlüsselbund gesperrt ist. Führen Sie Folgendes aus, um den Login-Schlüsselbund zu entsperren:

security unlock-keychain login.keychain

Wenn Ihr Schlüsselbund passwortgeschützt ist, geben Sie das Passwort mit der -pOption an.

Versuchen Sie dann den Build- oder Codesignaturvorgang erneut. Der betreffende Fehlercode wird in den Apple-Dokumenten als interner Fehler beschrieben, sodass dies durchaus auch in anderen Fällen möglich ist.

cbracken
quelle
1
Leider scheint diese Lösung völlig zirkulär zu sein: Um den obigen Befehl auszuführen, müssen Sie das Kennwort eingeben, was in einer nicht interaktiven Sitzung offensichtlich ein No-Go ist (wie bei der Ausführung über einen CI-Agenten wie Jenkins).
Konrad Rudolph
Das ist ein guter Punkt - wie Sie sagen, ist dies nicht für eine nicht interaktive Sitzung wie einen CI-Bot geeignet. Dies ist nützlich, wenn Remote-Builds in einer Befehlszeilensitzung ausgeführt werden (z. B. über ssh).
Cbracken
3
Wir hatten ein ähnliches Problem mit Jenkins, und zusätzlich zu dem, was im obigen Befehl erwähnt wird, mussten wir das Passwort als Argument an den Befehl übergeben, damit wir "security backup-keychain -p $ KeychainPassword <login-keychain>" durchführen konnten. Hier können Sie KeychainPaasword einfach und sicher auf Jenkins speichern.
Mohit Tater
1
Ich kann dir nicht genug für diesen Beitrag danken. Ich habe ein paar Tage damit verbracht herauszufinden, warum codesignes fehlgeschlagen ist und dies ist der magische Befehl, der mich gerettet hat !!!
Dimu4
32

Hatte das gleiche Problem am High Sierra/ Xcode 9.4.1, endeten alle Anmeldeversuche miterrSecInternalComponent

    • Gehen Sie zu Schlüsselbundzugriff
    • Gehen Sie zum Login-Schlüsselbund
    • Wählen Sie die Kategorie "Meine Zertifikate"
    • Suchen Sie das Zertifikat, mit dem Sie signieren, und erweitern Sie es, um den Schlüssel anzuzeigen.
    • Doppelklicken Sie auf den Schlüssel
    • Gehen Sie zur Registerkarte "Zugriffskontrolle".
    • Aktualisieren Sie die Schlüsselzugriffskontrolle auf "Allen Anwendungen erlauben, auf dieses Element zuzugreifen".

Alternative:

Führen Sie den Befehl Codesign auf dem Mac-Terminal aus und "Immer zulassen" / usr / bin / Codesign-Zugriff auf den Schlüssel

  1. Wenn Sie versuchen, von ssh / CI zu signieren, müssen Sie ebenfalls ausführen

    security unlock-keychain login.keychain

    bevor Sie versuchen, das App-Bundle zu signieren

Gleichgewicht
quelle
Können Sie näher auf "Aktualisieren der Schlüsselzugriffskontrolle auf" Allen Anwendungen den Zugriff auf dieses Element erlauben "näher eingehen? Ich habe keine Ahnung, was das überhaupt bedeutet.
Jon McClung
2
@ JonMcClung Öffnen Sie den Schlüsselbundzugriff und gehen Sie zum Anmeldeschlüsselbund - meine Zertifikate. Suchen Sie das Zertifikat, mit dem Sie signieren, und erweitern Sie es, um den Schlüssel anzuzeigen. Doppelklicken Sie auf die Taste und Sie sollten die Registerkarte "Zugriffskontrolle" sehen. Schalter zu erlauben ist da
Gleichgewicht
5
@KonradRudolph security unlock-keychain -p <password> login.keychainvon CI.
Gleichgewicht
1
@KonradRudolph Es ist nicht erforderlich, ein Kennwort für den Sicherheits-Unlock-Schlüsselbund anzugeben, wenn Sie Codesign den Zugriff auf einen privaten Schlüssel gestattet haben. Es reicht aus, eine leere Zeichenfolge als Passwort zu hinterlassen.
Kamil Szostakowski
1
@KonradRudolph wahrscheinlich immer noch nicht ideal, aber Sie könnten diesen Entsperrbefehl ~/.bash_profileso verschieben, dass der Schlüsselbund beim Start des SSH-Clients entsperrt wird, aber Sie brauchen keinen Verweis aus Ihrem CI-Skript darauf
sschilli
17

Ich habe das gleiche Problem festgestellt, ich starte mein macOS neu und es funktioniert.

In China haben wir ein Sprichwort zwischen Entwicklern:

Kleine Probleme, einfach neu starten. Große Probleme sollten neu installiert werden.

Manchmal hilft Ihnen das obige Sprichwort sehr!

ifeegoo
quelle
7
Wir haben in Amerika gesagt - "Niemals alte Hardware neu starten"
Brant
@Brant Warum hast du dieses Sprichwort? Es ist interessant.
Ifeegoo
Nur ein Scherz - aber wir hatten ein ähnliches Problem und haben schließlich nur einen alten Server neu gestartet.
Brant
1
@ifeegoo Alte Server können Probleme beim Booten haben (vielleicht hat sich das Betriebssystem selbst aktualisiert? Vielleicht hat jemand die Boot-Skripte kaputt gemacht?) oder benötigen ein manuelles Startverfahren, von dem niemand weiß, wer verfügbar ist. Sie können es nicht wissen, bevor Sie es versuchen. Vielleicht war das BIOS-Rom schlecht geworden. Es ist nur eines dieser Dinge, die in einer ordnungsgemäß gepflegten Umgebung kein Problem sein sollten, aber Sie wissen es nicht wirklich, bevor Sie es versuchen, und Sie möchten es lieber nicht versuchen.
Lassi Kinnunen
1
@LassiKinnunen Sie haben Recht, wir sind mobile Entwickler für Android und iOS, daher kümmert sich diese Art von Situation nicht um die Server. Die Server sind wirklich gefährlich, sie sind nicht situierbar.
Ifeegoo
8

Falls es jemand anderem hilft, ist ein errSecInternalComponentFehler aufgetreten, codesignweil ich ihn über eine SSH-Sitzung auf meinem MacOS-Computer ausgeführt habe. Das Ausführen des gleichen Befehls über ein Terminalfenster auf dem MacOS-Computer selbst hat funktioniert.

Vermutlich liegt dies daran, dass codesignder Zugriff auf den privaten Schlüssel über den Anmeldeschlüsselbund erforderlich ist.

Das Ausführen security unlock-keychain login.keychain(wie in der Antwort von cbracken erläutert ) aus derselben Sitzung sollte ebenfalls funktionieren.

Jamesdlin
quelle
Dies ist sehr seltsam, selbst das Ausführen des Befehls zum Entsperren des Schlüsselbunds scheint stillschweigend fehlzuschlagen, da das Codesign immer noch nicht funktioniert. Das Ausführen derselben Befehle über den Remotedesktop (anstelle von SSH) funktioniert jedoch einwandfrei.
Max
2

Wenn Sie versuchen, vom Befehl ssh run zu signieren:

security unlock-keychain login.keychain

bevor Sie versuchen, das App-Bundle zu signieren

oder von der Benutzeroberfläche

Aktualisieren Sie die Schlüsselzugriffskontrolle auf "Allen Anwendungen erlauben, auf dieses Element zuzugreifen".

Danke an @Equilibrium und @Jon McClung

Stas S.
quelle
2

Ich hatte das gleiche Problem. Das Problem liegt in der Codesignatur der App.

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

Geben Sie hier die Bildbeschreibung ein

sahiljain
quelle
2

Ich bin gelaufen security unlock-keychain login.keychainund mein Login-Passwort hat nicht funktioniert. Also habe ich neu gestartet und dann einfach Xcode erneut ausgeführt und es hat funktioniert. Das Ausführen des Befehls funktioniert ebenfalls. Seltsames Problem.

sunapi386
quelle
2

Wie von @Equilibrium in einem der Kommentare hervorgehoben, wenn Sie sich in der Befehlszeile env befinden. Wie bei Jenkins (mein Fall) müssen Sie möglicherweise das Kennwort an den in den Lösungen genannten Befehl zum Entsperren der Sicherheit übergeben .

Also anstatt zu benutzen,

security unlock-keychain login.keychain

verwenden:

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

Dabei kann der Schlüsselbund für die Anmeldung $ HOME / Library / Keychains / login.keychain (mein Fall) oder einfach login.keychain sein

Mohit Tater
quelle
Ihre Antwort basiert auf der Antwort von @equilibrium, aber ich werde sie mir vorstellen. Auf Bamboo CI half mir, Befehl Sicherheit entsperren-Schlüsselbund -p {Konto-Passwort} login.keychain
A.Kant
2

für alle, die auf dieses Problem von Jenkins und SSH gestoßen sind:

hohe Wahrscheinlichkeit, dass Sie keinen Zugriff auf den privaten Schlüssel im Schlüsselbund gewährt haben, ich habe versucht, aber nicht sicher, warum all diese nicht funktionieren:

  1. Sicherheitsimport .p12-Datei mit -A oder -T / usr / bin / Codesign
  2. Sicherheitsset-Schlüssel-Partitionsliste -S Apple-Tool :, Apple :, Codesign: -s -k # {Passwort} # {Schlüsselbundpfad}
  3. Ändern Sie alle Bereitstellungsprofile in [UUID] .mobileprovision und kopieren Sie sie auf dem Jenkins-Server in '~ / Library / MobileDevice / Provisioning \ Profiles'
  4. Bereinigen Sie abgeleitete Daten und starten Sie den Jenkins-Server neu
  5. Stellen Sie sicher, dass der Standardschlüsselbund der Anmeldeschlüsselbund ist, und entsperren Sie ihn.

endgültig gelöst durch:

1.ssh [Benutzer] @ [jenkinsServerIP] -L 5900: localhost: 5900, melden Sie sich beim jenkins-Server an

2.open 'vnc: // localhost'

Dadurch wird ein Remote-Bildschirm gestartet, wenn Ihr Jenkins-Server dies zulässt ...

Öffnen Sie dann keychain.app, um den Zugriff von / usr / bin / Codesign auf den privaten Schlüssel zu gewähren

Viel Glück

Xi Zhang
quelle
1

Probieren Sie es einfach einmal mit dem Mac-Terminal aus, aber nicht aus der SSH-Sitzung

security unlock-keychain login.keychain

Und wählen Sie im angeforderten Dialogfeld immer zulassen. Und dann könnten Sie xcodebuild in der Remote-Sitzung.

Felix
quelle
1

Klicken Sie mit der rechten Maustaste auf den privaten Schlüssel, der dem Codesignierungszertifikat im Schlüsselbund zugeordnet ist, und klicken Sie dann auf "Alle Anwendungen zulassen", anstatt sich auf eine Eingabeaufforderung zu verlassen, die für mich behoben wurde, da der Build über ssh erfolgte.

Pellet
quelle
0

Ich musste:

1) Löschen Sie das dem Projekt zugeordnete Zertifikat

2) Kehren Sie zum Xcode zurück und widerrufen Sie das App-Zertifikat

3) Für den Xcode ist ein neues Zertifikat erforderlich

4) Sperren Sie alle KeyChain

5) Reinigen Sie das Projekt

6) Wiederaufbau

Das ist es. Hoffe es hilft jedem.

Andres Felipe
quelle
0

Die oben genannten Methoden sind für mich nutzlos.

Ich habe es gelöst durch:

  1. Öffnen Sie den Schlüsselbundzugriff.
  2. Klicken Sie auf Anmeldemenü.
  3. Entfernen Sie alle persönlichen Zertifikate.
  4. Reinigen Sie das Projekt.
  5. Wiederaufbauen.

Das ist es. Hoffe es hilft jedem.

yerwoo_gmail
quelle