2011-12-16 18 views
10

Sto provando ad accendere un certo portachiavi e chiudere un altro. Ho bisogno di questo perché le nostre identità aziendali & sono chiamate uguali.CLI: Passare portachiavi per firmare un xcodebuild

Al momento, eseguo un "security unlock-keychain" seguito da un "security default-keychain" per aprire il portachiavi corretto e fare un "security lock-keychain" sul portachiavi che non desidero usare.

Ma xcodebuild vede ancora le voci in entrambi i portachiavi e si arrende.

iPhone Distribution: Company name.: ambiguous (matches "iPhone Distribution: Company name." in /Users/user/Library/Keychains/login.keychain and "iPhone Distribution: Company name" in /Users/user/Library/Keychains/enterprise.keychain) 

Come si impedisce al sistema di trovare la voce nel portachiavi che blocco?

risposta

3

Soluzione: Ho messo tutte le cose relative all'appstore nel portachiavi di login e le cose aziendali in un file portachiavi separato.

Nel buildscript, io passare da quelli come segue:

# 1. Only activate the System and either the Appstore(=login) or Enterprise keychain. 
security list-keychains -s $KEYCHAIN_NAME $SYSTEM_KEYCHAIN 

# 2. Loop through App Schema's 
for APP_SCHEME in ${APP_SCHEMES[@]}; do 
    echo "--= Processing $APP_SCHEME =--" 
    xcodebuild -scheme "${APP_SCHEME}" archive 
done ### Looping through App Schema's 

# 3. Restore login & system keychains 
security list-keychains -s $APPSTORE_KEYCHAIN $ENTERPRISE_KEYCHAIN $SYSTEM_KEYCHAIN 
+0

Tuttavia, questa opzione è potenzialmente non desiderata in caso di build paralleli, quando le attività possono commutare il portachiavi in ​​modo non corretto contemporaneamente. Preferirei comunque l'opzione di script di PackageApplication per impostare il portachiavi preferito per la ricerca del certificato. – lef

0

Un'altra soluzione per Xcode versione 6 e sotto: specificare il certificato da SHA1 anziché in base al nome (ambiguo). Da "uomo codesign":

If identity consists of exactly forty hexadecimal digits, it is instead 
interpreted as the SHA-1 hash of the certificate part of the desired iden- 
tity. In this case, the identity's subject name is not considered. 

E da "help sicurezza find-certificato"

-Z Print SHA-1 hash of the certificate 

Sfortunatamente, questo metodo richiede utilizzando lo script PackageSign, che è stato deprecated in Xcode 7

+0

I suoni promettenti ... Ma non vedo come posso specificare uno SHA1 in xcode. Probabilmente dovrei fare la firma con una sceneggiatura. Comunque, grazie per il suggerimento. Scoprirò questo per vedere se può darci una mano. – P5ycH0

+1

@ P5ych0 Scusa, non l'ho visto fino ad ora. Sì, eseguiamo lo script di accesso, ad esempio con "xcrun -sdk iphoneos PackageApplication --sign --embed " –

+0

Ma come posso vedere nello script PackageApplication, ci sono snippet che controllano il parametro --sign per corrisponde a "Distribuzione iPhone", quindi l'utilizzo di SHA-1 non è fattibile a meno che questo script non sia stato violato. – lef

9

Si può dire Xcode quale portachiavi utilizzare:

xcodebuild "OTHER_CODE_SIGN_FLAGS=--keychain '$PATH_TO_KEYCHAIN'" 

Oppure, se si chiama codesign direttamente:

codesign --keychain "$PATH_TO_KEYCHAIN" 

Se si utilizza PackageApplication, non v'è un modo per impostare questo. Tuttavia, PackageApplication è uno script piuttosto semplice che può essere reimplementato se necessario (molto utile se si sta integrando con un sistema/script più grande).

+0

I suoni sono fantastici. Darò una prova. I portachiavi specificati devono essere caricati nell'applicazione portachiavi o la loro presenza nel file system è sufficiente? – P5ycH0

+0

Non penso che il portachiavi debba essere aggiunto all'applicazione portachiavi, ma non ne sono sicuro. –

Problemi correlati