2013-04-18 11 views
7

Domanda - versione corta:Perché gli script della fase di compilazione non vengono eseguiti durante la creazione di un IPA dalla riga di comando?

Perché non sarà la mia costruzione phase scripts essere eseguito durante la creazione di un'IPA dalla riga di comando? Quando eseguo xcodebuild per creare un IPA, gli script di fase di costruzione predefiniti non vengono eseguiti. Perché?


Domanda - lunga versione:

Ho uno spazio di lavoro con uno schema che voglio creare un'IPA fuori da linea di comando.

Questo funziona bene tranne che per una cosa; Ho due script nelle fasi di compilazione del target che viene utilizzato per inserire la versione dell'app corretta (CFBundleShortVersionString) e il numero di revisione svn corretto (CFBundleVersion). Questi agli script funzionano bene quando si esegue l'archiviazione da xcode, ma per qualche motivo non vengono eseguiti durante l'archiviazione dalla riga di comando. Innanzitutto perché?

Qui ci sono gli script che stanno lavorando (se forma l'archiviazione xCode) enter image description here enter image description here

Quando l'archiviazione e la creazione dell'IPA dalla riga di comando che faccio (l'essenziale)

# Building 
xcodebuild ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release clean build 

# Creating IPA 
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${PROJECT_BUILD_DIR}/${APPLICATION_NAME}.app" -o "${IPA_OUTPUT_PATH}/${APPLICATION_NAME}.ipa" 

Funziona e crea un IPA ma nessuno degli script di fase di costruzione viene eseguito lasciando intatti sia il numero di revisione che il numero di versione.

Tutti i suggerimenti sono apprezzati!

AGGIORNAMENTO A CAUSA DI RISPOSTA di BDASH

Invece di fare una generazione pulita faccio una installazione come

xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 

sarà infatti eseguito lo script predefinito (si può vedere nel numero di versione del progetto) senza errori durante l'installazione. Tuttavia l'IPA creato avrà una dimensione di ~ 300 byte (invece di ~ 10 MB) e non può essere installato su un dispositivo.

Costruire l'applicazione prima dell'installazione, cioè

# Building 
xcodebuild clean build ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 
# Installing 
xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 

e quindi creando IPA comporterà un IPA con script di versione eseguito e di formato corretto MA non è possibile installare su un dispositivo. Cercando di metterlo su un dispositivo verrà visualizzato un messaggio di errore che indica
"Il programma" MyApp "non è stato installato sul dispositivo iPhone" My Device "perché si è verificato un errore sconosciuto."

+0

Suppongo che se si sta costruendo dalla riga di comando, 'xcodebuild' presuppone anche che si stia eseguendo lo script da soli. Sembra un bug per me. –

+0

Alla fine hai finalmente trovato una soluzione? – fatuhoku

risposta

2

Si è selezionato "Esegui script solo durante l'installazione" per almeno una delle fasi dello script. Questa fase non verrà eseguita quando si utilizza l'azione build su xcodebuild, solo se si utilizza l'azione install.

+0

Aggiornato la mia domanda dal risultato della risposta. – Groot

+0

Quando si utilizza l'azione 'install', il prodotto costruito viene installato nella directory specificata dall'impostazione di configurazione' DSTROOT'. Il valore predefinito è '/ tmp/ProjectName.dst' a meno che non lo si sovrascriva sulla riga di comando' xcodebuild'. Questo non ha molto a che fare con la tua domanda come inizialmente chiesto però. – bdash

+0

Grazie per il tuo aiuto bdash! Sto sovrascrivendo la directory dalla riga di comando avendo sia la 'build' che 'install' messi nella stessa directory. Hai ragione che questo devia un po 'dalla domanda originale, ma resta il fatto che il primo om script non viene eseguito. – Groot

Problemi correlati