Ich versuche, meinem Xcode ein neues Bereitstellungsprofil hinzuzufügen, um eine App auf dem Gerät zu testen. Hier sind die Schritte, denen ich gefolgt bin:
Löschte alle Zertifikate und Bereitstellungsprofile
Erstellen/Hinzufügen IOS Entwicklerzertifikat
Mein IOS Gerät online hinzufügen
Erstellen Sie IOS Provisioning Profile
IOS Bereitstellungsprofil hinzufügen
App reinigen
Erstellen Sie die App und führen Sie sie aus
Festlegen des Codesigning- und Provisioning-Profils in den Build-Einstellungen
Viel googeln> ohne Erfolge
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
Öffnen Sie Schlüsselbundzugriff und wählen Sie dann im Menü DateiAlle Schlüsselbunde sperren.
Gehen Sie dann zurück zu Xcode und bereinigen und neu erstellen. Sie werden erneut aufgefordert, Ihr Kennwort einzugeben, um den Schlüsselbund zu entsperren.
Vorausgesetzt, Sie haben keine weiteren Kompilierungsprobleme, wird dies erfolgreich sein!
Es scheint ein Fehler im Code-Signatur-Mechanismus zu sein, der durch einen Neustart des Mac behoben werden sollte
Dies tritt auf, wenn der Anmeldeschlüsselbund gesperrt ist. Führen Sie Folgendes aus, um den Anmeldeschlüsselbund zu entsperren:
security unlock-keychain login.keychain
Versuchen Sie dann den Build- oder Code-Signierungsvorgang erneut. Der fragliche Fehlercode ist in den Apple-Dokumenten beschrieben als interner Fehler, daher ist es durchaus möglich, dass dies auch in anderen Fällen auftritt.
Hatte das gleiche Problem auf High Sierra
/Xcode 9.4.1
, alle Anmeldeversuche endeten mit errSecInternalComponent
Alternative:
führen Sie den Befehl codesign auf dem Mac-Terminal aus und "Immer erlauben"/usr/bin/codesign den Zugriff auf den Schlüssel
Wenn Sie versuchen, von ssh/CI zu signieren, müssen Sie auch ausführen
security unlock-keychain login.keychain
bevor Sie versuchen, das App-Bundle zu signieren
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, sollte neu installieren.
Manchmal hilft dir das obige Sprichwort sehr!
Für den Fall, dass es jemand anderem hilft, ist bei errSecInternalComponent
ein Fehler mit codesign
aufgetreten, weil ich es über eine SSH-Sitzung auf meinem MacOS-Computer ausgeführt habe. Das Ausführen desselben Befehls über ein Terminalfenster auf dem MacOS-Computer selbst hat funktioniert.
Vermutlich liegt dies daran, dass codesign
über den Anmeldeschlüsselbund Zugriff auf den privaten Schlüssel benötigt.
Laufen security unlock-keychain login.keychain
(wie erklärt durch cbrackens Antwort ) aus derselben Sitzung sollte auch funktionieren.
Wenn Sie versuchen, über den 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üsselzugriffssteuerung auf "Allen Anwendungen erlauben, auf dieses Element zuzugreifen".
Vielen Dank an @Equilibrium und @Jon McClung
Ich rannte security unlock-keychain login.keychain
und mein Login Passwort haben 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.
Probieren Sie es einfach einmal mit dem Mac-Terminal aus, aber nicht über die SSH-Sitzung
security unlock-keychain login.keychain
Und wählen Sie im angezeigten Dialogfeld Immer zulassen. Und dann könnten Sie in der Remote-Sitzung xcodebuild.
Wie von @Equilibrium in einem der Kommentare hervorgehoben, wenn Sie sich in der Befehlszeile env befinden. Wie bei Jenkins (in meinem Fall) müssen Sie möglicherweise das Kennwort an den in den Lösungen erwähnten Befehl security-unlock übergeben.
Also, anstatt zu verwenden,
security unlock-keychain login.keychain
verwenden:
security unlock-keychain -p <login-keychain-password> <path-to-login-keychain>
dabei kann der Pfad zum Anmelde-Schlüsselbund $ HOME/Library/Keychains/login.keychain (mein Fall) oder einfach login.keychain lauten