2013-10-04 8 views
6

Sto integrando la firma del codice nelle nostre build e ho creato un portachiavi personalizzato che è contenuto nell'albero del codice sorgente e utilizzato per firmare il codice (è copiato in ~/Library/Keychains prima di essere utilizzato, quindi è in una posizione ben nota).Codesign dice "nessuna identità trovata" ma l'identità è sul portachiavi

Tuttavia, quando si tenta di firmare ottengo un errore:

$ /usr/bin/codesign --sign='Mac Developer: John Doe (AA1AAA1AAA)' \ 
    --keychain=~/Library/Keychains/xxx.keychain \ 
    dist/64/gmake/release/bin/libmylib.dylib 

Mac Developer: John Doe (AA1AAA1AAA): no identity found 

Tuttavia:

$ security find-identity -p codesigning ~/Library/Keychains/xxx.keychain 

Policy: Code Signing 
    Matching identities 
    1) 49F2FBE79899DF18A9638AC6B1302E2EB6E079AD "Mac Developer: John Doe (AA1AAA1AAA)" 
    1 identities found 

    Valid identities only 
    1) 49F2FBE79899DF18A9638AC6B1302E2EB6E079AD "Mac Developer: John Doe (AA1AAA1AAA)" 

Quindi non capisco perché codesign non è in grado di trovare l'identità.

Qualcuno può suggerire una soluzione?

Nota che ho anche provato con l'identità SHA-1, con lo stesso risultato.

risposta

8

Alcuni dei messaggi di errore di codesign sono meno chiari. Il problema qui è che codesign non è riuscito a trovare il portachiavi e ciò è causato dall'uso di --keychain=~/path. Questo è interpretato come un singolo argomento e non viene eseguita alcuna espansione tilde. Se si modifica il comando per utilizzare argomenti separati, dovrebbe funzionare come previsto:

codesign --sign 'Mac Developer: John Doe (AA1AAA1AAA)' \ 
    --keychain ~/Library/Keychains/xxx.keychain \ 
    dist/64/gmake/release/bin/libmylib.dylib 
+0

Interessante; Non ho pensato che la shell non si espandesse '~' se specificassi gli argomenti in questo modo. Proverò a testare domani e tornerò da te, comunque penso che tu sia sul vincitore. – trojanfoe

+0

Sì, questa è la risposta, tuttavia ora sto ottenendo "L'interazione dell'utente non è consentita" nonostante il fatto che l'ho sbloccata con 'security unlock-keychain'. Ora so che la sequenza funzionerà con 'login.keychain' (lo faccio spesso) tuttavia non sembra funzionare quando si utilizza un portachiavi non standard. Odio essere un * vampiro di aiuto * ma hai qualche suggerimento? – trojanfoe

+0

Posso pensare a un paio di possibilità. Uno è che il portachiavi non è stato configurato per consentire sempre l'accesso tramite codice alla chiave privata, in modo che il sistema desideri richiedere all'utente di consentire l'accesso. Puoi impostarlo tramite Accesso Portachiavi facendo doppio clic sulla chiave privata e aggiungendo il codice sotto il controllo di accesso (o consenti tutte le app). L'altro è che il timeout di sblocco del portachiavi predefinito di 5 minuti è troppo breve se lo sblocco si verifica all'inizio del processo di compilazione. Puoi controllare questo tramite le impostazioni del portachiavi per estendere o rimuovere il timeout. –