2011-10-30 9 views
15

Infine ... dopo un paio d'anni di sorveglianza e un mese di partecipazione, ho la possibilità di farti una domanda personale.come ottenere XCode per aggiungere data e ora di costruzione al file Info.plist

Il mio capo non si fida di me (o di alcun processo) per incrementare un numero di build, vuole anche avere una data di costruzione & di tempo scaduta nell'app. Mi piacerebbe inserire questo nel solito file Info.plist.

Ho trovato questa domanda correlata:

Build information in iOS Application (date/time app was built)

e sulla base delle risposte lì, sono andato in Editor schema e ha aggiunto lo script di seguito nella sezione "Post-Azione" della fase di costruzione:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    defaults write "${infoplist%.plist}" BuildDate "${builddate}" 
fi 

in Xcode, la mia finestra Schema Editor si presenta così:

Sfortunatamente, BuildDate non viene mai scritto in Info.plist.

Cambiare "$ {builddate}" in "$ builddate" non funziona. Ho aggiunto questa riga alla sceneggiatura:

echo "build date is $builddate" > /tmp/result.txt 

e la data è apparsa perfettamente nel file scritto. Scrivere stringhe nel file Info.plist dallo script precedente funziona perfettamente bene, abbastanza fastidiosamente.

Quindi, riassunto, come ottenere la data da aggiungere al file Info.plist?

+0

io non ho avuto alcun problema con il tuo script come post azione, tranne che finisce per invalidere la firma. Sembra funzionare bene come build-phase invece di una post-azione, che ha anche il vantaggio di lavorare sia se si condividono spazi di lavoro o meno. Funziona anche meglio di una pre-azione poiché una pre-azione verrebbe svuotata dalle modifiche apportate al file info.plist reale che causano una sovrascrittura in fase di compilazione. – smparkes

risposta

4

Il codice nella risposta di Michael è errato o non è più aggiornato. La versione seguente corregge un errore nella sintassi dell'insieme e supporta anche percorsi di compilazione con spazi al loro interno.

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

Nota: Questa modifica è stata presentata come una modifica, ma fu rifiutato e io ancora non hanno abbastanza reputazione per inviare un commento per la sua risposta ...

2

Sto utilizzando il codice esatto, ma all'interno dell'azione pre-azione anziché dopo l'azione, e il file info.plist all'interno del prodotto costruito riporta correttamente la data di costruzione. In altre parole, devi personalizzare il tuo info.plist prima del copiandolo nel prodotto costruito, il che mi sembra ragionevole.

A proposito, grazie per il suggerimento, è abbastanza intelligente e utile.

+0

Se si esegue questa operazione in una pre-azione e quindi si aggiorna effettivamente info.plist, le modifiche verranno scaricate nell'aggiornamento. Potrebbe non avere importanza, dal momento che info.plist non viene aggiornato più di tanto. – smparkes

5

Ahhhh, ho dovuto spendere altri 30 minuti (in cima alle 2 ore avevo già sprecato) e guardato le risposte per questo domanda prima di inviare il mio:

Insert Subversion revision number in Xcode

Questo script di post-action fa il trucco e funziona per me:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

Come si può vedere, si sta facendo un po 'di hack lì (l'aggiunta, se non esiste, impostandola subito dopo).

Se qualcuno può suggerire una soluzione usando il metodo "default write" sopra (che penso possa essere meglio supportato di "PlistBuddy"), sarei felice di scoprirlo (e ovviamente accetterò e userò anche questa risposta superiore).