2011-09-13 17 views
8

Ho appena saputo della possibilità di utilizzare OTHER_CODE_SIGN_FLAGS per specificare il portachiavi che include il certificato necessario per la creazione e la firma di un'app. Ma sfortunatamente non riesco a farlo funzionare.OTHER_CODE_SIGN_FLAGS flag portachiavi ignorato?

Il mio script simile a questa:

#!/bin/bash 
TARGET="MyProject" 
CONFIGURATION="Release" 
SDK="iphoneos" 
IDENTITY="iPhone Developer: John Doe (XX22RR22O)" 
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain" 
PASSWORD="" 

security unlock-keychain -p ${PASSWORD} ${KEYCHAIN} 
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}" 

Ma che non riesce:

Check dependencies 
[BEROR]Code Sign error: The identity 'iPhone Developer: John Doe (XX22RR22O)' doesn't match any valid certificate/private key pair in the default keychain 

Ma se posso passare al portachiavi prima funziona, ma che non è utilizzabile su un build server in cui multipla le build possono accadere simultaneamente:

#!/bin/bash 
TARGET="MyProject" 
CONFIGURATION="Release" 
SDK="iphoneos" 
IDENTITY="iPhone Developer: John Doe (XX22RR22O)" 
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain" 
PASSWORD="" 

security unlock-keychain -p ${PASSWORD} ${KEYCHAIN} 
security default-keychain -s ${KEYCHAIN} 
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}" 

Spero che voi ragazzi potete aiutare -Morten

risposta

3

La risposta è l'aggiornamento: Xcode 4.3 rispetta il flag OTHER_CODE_SIGN_FLAGS durante il passo di costruzione Check dependencies.

+0

Grazie e scusa per il ritardo :) – mbogh

1

Mi sono imbattuto nello stesso problema durante il tentativo di configurare CI per i nostri progetti iOS. Ho finito per aggiornare lo script Perl PackageApplication per supportare il passaggio di un'opzione portachiavi. Località:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication 

sto ancora in attesa di qualche chiarimento delle licenze da parte di Apple in modo che possa pubblicare il mio script aggiornato a GitHub.

+0

Sembra interessante, per favore fatemelo sapere quando si sa di più. – mbogh

+0

Sei mai riuscito a pubblicare questo? – atreat

0

Nessuno di questi funziona davvero, a meno che non si disponga delle più semplici versioni di script. Come ha detto @Tyler, PackageApplication non supporta la specifica del portachiavi e alcune versioni di xcode richiedono che non vi siano certificati duplicati tra i portachiavi quando controllano le dipendenze.

Non perdere tempo, basta chiamare Apple e chiedere loro di rinominare uno dei tuoi certificati (in realtà rinomineranno la tua azienda aggiungendo un suffisso --- e dovrai semplicemente rigenerare i certificati e aggiornare i tuoi profili).

3

Ho scoperto che se non avessi aggiunto il portachiavi all'elenco di ricerca portachiavi, xcodebuild non avrebbe rispettato l'impostazione OTHER_CODE_SIGN_FLAG --keychain. Ho dovuto aggiungere questo codice:

// Early in the script 
ORIGINAL_KEYCHAINS=`security list-keychains -d user` 

// After I create my keychain, add it to the list 
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS} "${KEYCHAIN_NAME}" 

// On cleanup 
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS} 

Inutile dire che ho perso ore a capirlo.

Anche di aiuto, assicurandosi che il portachiavi rimane aperto per la lunghezza della tua build. Come advised here:

security -v set-keychain-settings -lut 7200 ${KEYCHAIN_NAME} 
+0

Questo è super utile, ma ho trovato che l'elenco dei portachiavi utente in "ORIGINAL_KEYCHAINS" conteneva apostrofi per ognuno; l'esecuzione di tale variabile tramite codice come 'CLEAN_KEYCHAINS =" $ {ORIGINAL_KEYCHAINS // \ "}" '(sostituisce tutti gli apostrofi con niente) durante la pulizia ha funzionato in modo impeccabile. – Luke