Il comando Xcode / usr / bin / codesign non è riuscito con il codice di uscita 1: errSecInternalComponent


105

Sto cercando di aggiungere un nuovo profilo di provisioning al mio Xcode, per testare un'app sul dispositivo. Ecco i passaggi che ho seguito:

  1. Eliminati tutti i certificati e i profili di provisioning

  2. Crea / Aggiungi certificato di sviluppo IOS

  3. Aggiungi il mio dispositivo IOS online

  4. Crea profilo di provisioning IOS

  5. Aggiungi profilo di provisioning IOS

  6. App pulita

  7. Crea quindi esegui l'app

  8. Impostare la firma del codice e il profilo di fornitura nelle impostazioni di compilazione

  9. Molte ricerche su Google> senza successo

Ecco l'errore che ottengo:

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

1
L'errore deriva da una mancata corrispondenza nella configurazione del profilo di provisioning, nei certificati e nell'ID bundle. Assicurati che il tuo PP, ID bundle e certificati siano configurati correttamente in e assegnati correttamente in itunes connect e nell'app.
Alex Pelletier

1
Ho riscontrato questo problema passando da Xcode 11.2.1 a 11.3 durante la firma del codice dei framework creati da me. Non sono stati coinvolti profili di provisioning. La risposta di Mohit Man lo ha chiarito.
Daniel Zhang

Ciò accade se stai utilizzando SSH e il codice non è autorizzato ad accedere alla chiave privata nel portachiavi. Per verificarlo, trova la chiave nel Portachiavi, fai clic con il pulsante destro del mouse e seleziona "Ottieni informazioni", passa a "Controllo accessi" e verifica se l'app 'codesign' è nell'elenco "Consenti sempre l'accesso". Vedere questo commento github.com/electron-userland/electron-builder/issues/… Quello che ho fatto è stato eseguire gli script una volta dalla GUI e fare clic su "Consenti sempre" per l'accesso alla chiave, quindi ha iniziato a funzionare.
ArticIceJuice

Risposte:


241

Apri Accesso Portachiavi , quindi nel menu File seleziona Blocca tutti i portachiavi .

Quindi torna a Xcode, pulisci e ricostruisci. Ti chiederà di nuovo la password per sbloccare il portachiavi.

Dopo questo, supponendo che tu non abbia altri problemi di compilazione, avrà successo!


7
Incredibile che questo stupido blocco e sblocco aiuti! Grazie
Josip B.

8
Questa dovrebbe essere la risposta accettata. Molto più sensato di un riavvio!
yonix

3
Ha funzionato anche per me. Crea un apk per Android 30 secondi, crea un'app per iOS .. 2 ore.
Gabe

1
Seriamente WTF ?! Grazie!
Peter N Lewis,

1
@FredericP Per me avevo recentemente cambiato la mia password. Quindi c'è stata una certa interazione tra l'ultima volta che il portachiavi è stato sbloccato da xcode e la password utilizzata per farlo.
sherrellbc

77

Sembra un bug nel meccanismo di firma del codice, il riavvio del Mac dovrebbe risolvere il problema


caso diverso, ma messaggio di errore simile: il riavvio ha funzionato.
mikus

Quasi quattro anni dopo, e funziona ancora! Ho dimenticato la regola d'oro: "In caso di dubbio, riavvia!"
Alan

2
Se stai aspettando una soluzione meno distruttiva, vedi la risposta di Mohit Manhas di seguito
yonix

non mi ha aiutato
Anoop Vaidya

70

Ciò si verifica quando il portachiavi di accesso è bloccato. Per sbloccare il portachiavi di accesso, esegui:

security unlock-keychain login.keychain

Se il tuo portachiavi è protetto da password, specifica la password utilizzando l' -popzione.

Quindi prova di nuovo l'operazione di compilazione o di firma del codice. Il codice di errore in questione è descritto nei documenti di Apple come un errore interno, quindi è del tutto possibile che ciò accada anche in altri casi.


1
Sfortunatamente questa soluzione sembra del tutto circolare: l'esecuzione del comando precedente richiede di inserire la password, che è ovviamente un no-go in una sessione non interattiva (come quando si esegue tramite un agente CI come Jenkins).
Konrad Rudolph,

Questo è un buon punto: come dici tu, questo non è appropriato per una sessione non interattiva come un bot CI. È utile quando si eseguono build remote in una sessione della riga di comando (ad esempio, tramite ssh).
cbracken

3
Abbiamo avuto un problema simile su Jenkins e, oltre a quanto menzionato nel comando precedente, abbiamo dovuto passare la password come argomento al comando, quindi abbiamo eseguito "security unlock-keychain -p $ KeychainPassword <login-keychain>", dove puoi facilmente memorizzare KeychainPaasword su Jenkins in modo sicuro.
Mohit Tater

1
Non posso ringraziarti abbastanza per questo post. Ho passato alcuni giorni a cercare di capire perché codesignstava fallendo e questo è il comando magico che mi ha salvato !!!
Dimu4

32

Ha avuto lo stesso problema su High Sierra/ Xcode 9.4.1, tutti i tentativi di accesso sono terminatierrSecInternalComponent

    • Vai ad Accesso portachiavi
    • Vai al portachiavi di accesso
    • Seleziona la categoria "I miei certificati"
    • Trova il certificato con cui stai firmando ed espanderlo per vedere la chiave.
    • Fare doppio clic sulla chiave
    • Vai alla scheda "Controllo di accesso".
    • Aggiorna il controllo di accesso alla chiave in "Consenti a tutte le applicazioni di accedere a questo elemento"

In alternativa:

eseguire il comando codesign sul terminale Mac e "Consenti sempre" / usr / bin / codesign l'accesso alla chiave

  1. Se provi a firmare da ssh / CI devi anche eseguire

    security unlock-keychain login.keychain

    prima di provare a firmare l'app bundle


Puoi approfondire "aggiorna il controllo dell'accesso alla chiave in" Consenti a tutte le applicazioni di accedere a questo elemento "? Non ho idea di cosa significhi.
Jon McClung

2
@JonMcClung Apri l'accesso al portachiavi, vai al portachiavi di accesso - i miei certificati. Trova il certificato con cui stai firmando, espanderlo per vedere la chiave. Fai doppio clic sulla chiave e dovresti vedere la scheda "Controllo di accesso". Switch to allow is there
Equilibrium

5
@KonradRudolph security unlock-keychain -p <password> login.keychaindi CI.
Equilibrio

1
@KonradRudolph non è necessario fornire una password per il portachiavi di sblocco di sicurezza se hai consentito al codice di accedere a una chiave privata. È sufficiente lasciare una stringa vuota come password.
Kamil Szostakowski

1
@KonradRudolph probabilmente non è ancora l'ideale, ma potresti spostare il comando di sblocco in ~/.bash_profilemodo che il portachiavi si sblocchi all'avvio del client SSH ma non è necessario fare riferimento ad esso dal tuo script CI
sschilli

17

Ho riscontrato lo stesso problema, riavvio il mio macOS e funziona.

In Cina, abbiamo un detto tra gli sviluppatori:

Piccoli problemi, basta riavviare. Grandi problemi, dovrebbe reinstallare.

A volte, il detto di cui sopra ti aiuterà molto!


7
Abbiamo detto in America - "Non riavviare mai il vecchio hardware"
Brant

@Brant Perché hai questo detto? È interessante.
ifeegoo

Stavo solo scherzando, ma abbiamo avuto un problema simile e alla fine abbiamo fatto ricorso al riavvio di un vecchio server.
Brant

1
@ifeegoo I vecchi server possono avere problemi durante il riavvio (forse il sistema operativo si è aggiornato da solo? forse qualcuno ha rotto gli script di avvio?) o hanno bisogno di una procedura di avvio manuale di cui nessuno è a conoscenza. Non puoi saperlo prima di provarlo. Forse la bios rom era andata male. È solo una di quelle cose che non dovrebbero essere un problema in un ambiente adeguatamente tenuto, ma in realtà non lo sai prima di provare e preferiresti non provare.
Lassi Kinnunen

1
@LassiKinnunen Hai ragione, siamo sviluppatori mobili per Android e iOS, quindi questo tipo di situazione non si preoccupa dei server. I server sono davvero pericolosi, non è situabile.
ifeegoo

8

Nel caso in cui aiuti qualcun altro, ho riscontrato un errSecInternalComponenterrore con codesignperché lo stavo eseguendo su una sessione ssh sul mio computer macOS. L'esecuzione dello stesso comando da una finestra di terminale sulla macchina macOS stessa ha funzionato.

Presumibilmente ciò è dovuto codesignal fatto che è necessario accedere alla chiave privata dal portachiavi di accesso.

Anche l'esecuzione security unlock-keychain login.keychain(come spiegato dalla risposta di cbracken ) dalla stessa sessione dovrebbe funzionare.


Questo è molto strano, anche l'esecuzione del comando di sblocco del portachiavi sembra fallire silenziosamente perché il codice non funziona ancora. Ma eseguire gli stessi comandi utilizzando il desktop remoto (invece di SSH) funziona bene.
Max

2

Se si tenta di firmare dal comando ssh run:

security unlock-keychain login.keychain

prima di provare a firmare l'app bundle

o dall'interfaccia utente

Aggiorna il controllo di accesso alla chiave in "Consenti a tutte le applicazioni di accedere a questo elemento"

Grazie a @Equilibrium e @Jon McClung


2

Ho avuto lo stesso problema Ho scoperto che il problema è con la firma del codice dell'app.

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

inserisci qui la descrizione dell'immagine


2

Ho eseguito security unlock-keychain login.keychaine la mia password di accesso non ha funzionato. Quindi ho riavviato, quindi ho eseguito di nuovo Xcode e ha funzionato. Anche l'esecuzione del comando funziona. Strano problema.


2

Come sottolineato da @Equilibrium in uno dei commenti, se sei nella riga di comando env. come Jenkins (il mio caso), potresti dover passare la password al comando di sblocco della sicurezza menzionato nelle soluzioni.

Quindi, invece di usare,

security unlock-keychain login.keychain

uso:

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

dove il portachiavi del percorso per l'accesso può essere $ HOME / Library / Keychains / login.keychain (il mio caso) o semplicemente login.keychain


La tua risposta è basata sulla risposta @equilibrium, ma la concepirò. Su Bamboo CI ho aiutato a comandare security unlock-keychain -p {account-password} login.keychain
A.Kant

2

per chiunque abbia riscontrato questo problema da jenkins e ssh:

alta possibilità che tu non abbia concesso l'accesso alla chiave privata nel portachiavi, ho provato ma non sono sicuro perché tutti questi non funzionino:

  1. sicurezza importare il file .p12 con -A o -T / usr / bin / codesign
  2. security set-key-partition-list -S apple-tool:, apple:, codesign: -s -k # {password} # {keychainPath}
  3. modificare tutti i profili di provisioning in [UUID] .mobileprovision e copiarli in "~ / Library / MobileDevice / Provisioning \ Profiles" sul server jenkins
  4. pulire i dati derivati ​​e riavviare il server jenkins
  5. assicurati che il portachiavi predefinito sia portachiavi di accesso e sbloccalo.

finalmente risolto da:

1.ssh [user] @ [jenkinsServerIP] -L 5900: localhost: 5900, accedi al server jenkins

2.open "vnc: // localhost"

questo avvierà una schermata remota, se il tuo server jenkins lo consente ...

quindi apri keychain.app per concedere l'accesso di / usr / bin / codesign alla chiave privata

in bocca al lupo


1

Provalo una volta utilizzando il terminale Mac ma non dalla sessione ssh

security unlock-keychain login.keychain

E scegli sempre consenti nella finestra di dialogo visualizzata. E poi potresti xcodebuild nella sessione remota.


1

Facendo clic con il pulsante destro del mouse sulla chiave privata associata al certificato di firma del codice nel portachiavi, quindi facendo clic su "consenti tutte le applicazioni" invece di fare affidamento su un prompt, l'ho risolto per me, poiché la compilazione stava avvenendo tramite ssh.


0

Dovevo:

1) elimina il certificato associato al progetto

2) Torna all'Xcode e revoca il certificato dell'app

3) L'Xcode richiede un nuovo certificato

4) Blocca tutti i KeyChain

5) Pulisci il progetto

6) Ricostruisci

Questo è tutto. Spero che aiuti chiunque.


0

I metodi di cui sopra sono inutili per me.

L'ho risolto da:

  1. Apri l'accesso al portachiavi.
  2. Fare clic sul menu di accesso.
  3. Rimuovi tutti i certificati personali.
  4. Pulisci il progetto.
  5. Ricostruire.

Questo è tutto. Spero che aiuti chiunque.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.