2012-07-17 9 views
8

Sto tentando di semplificare il processo di compilazione-> archivio-> invio per la pubblicazione di app iOS. Abbiamo più di 50 app mobili con un framework quasi identico, ma con diverse impostazioni grafiche e di configurazione.Creazione batch e archivio di app iOS tramite Terminal

Normalmente caricherò ciascun progetto in xcode 4.2 e build-> archive-> invierò il solito modo con la GUI xcode, ma ora ci sono più di 50 app e questo processo è molto faticoso ogni volta che inviamo un aggiornamento .

Detto questo, sto cercando di accelerare questo processo utilizzando una funzione shell. Ho fatto un sacco di ricerca e ha scoperto che xcodebuild (Si veda la risposta di Reid) dovrebbe funzionare, tuttavia l'opzione di archivio non funziona come ottengo il seguente errore:

unsupported build action 'archive' 

Così ho scritto il seguente:

# $1 should be a date like: 2012-07-17 
# $2 should be a time like: 10.31AM 
# $mybase will be the current directory at the time the function was called 
# so make sure to cd into the folder containing the xcode project folders first 

function xcodeArchive { 
    mkdir ~/Library/Developer/Xcode/Archives/$1 
    mybase=$PWD 
    for x in `ls` 
    do 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products 
     mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications 
     cd $mybase/$x 
     xcodebuild 
     #read -p "Press [Enter] to continue" 
     cd $mybase/$x 
     cp $x/$x-Info.plist ~/Library/Developer/Xcode/Archives/$1/$x/Info.plist 
     cp -r build/Release-iphoneos/$x.app.dSYM ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs/$x.app.dSYM 
     cp -r build/Release-iphoneos/$x.app ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications/$x.app 
     cd ~/Library/Developer/Xcode/Archives/$1/ 
     mv $x $x\ $1\ $2.xcarchive 
     cd $mybase 
    done 
} 
export -f xcodeArchive 

Inserisco questo nel mio .bash_profile e tutto funziona correttamente come mi aspetterei, tranne che non sto copiando il file "Info.plist" corretto e non riesco a capire dove copiarlo o come generarlo. Quindi ora sono bloccato.

Xcode riconoscerà gli archivi, ma li elenca sotto "Schema sconosciuto" e "Archivio senza nome" nell'organizzatore.

Qualsiasi aiuto per ora per ottenere il corretto Info.plist è molto apprezzato.

Accolgo anche raccomandazioni su come migliorare lo script e/o un modo più efficiente di compilare in batch + archiviare queste app iOS.

Nota:

  • non sono in grado di aggiornare al di là di Xcode 4.2, trattandosi di (se ho capito bene) OS X 10.7 e versioni successive che io non sono in grado di ottenere ancora (computer aziendale) .

  • Sono ancora un principiante di shell/bash, quindi mi scuso per qualsiasi brutto codice/pratica sopra.

  • Inoltre, questo è per la presentazione ufficiale dell'app, non per ad hoc o qualcosa del genere.

Grazie ancora per il vostro aiuto.

risposta

1

OK Ho trovato una soluzione che funzionerà. Dopo aver fatto molte più ricerche e un sacco di ipotesi e controllo, ho scoperto che posso ancora usare l'opzione "archive" con xcodebuild, devo solo specificare uno spazio di lavoro e uno schema e apparentemente non lo stavo facendo correttamente prima come ora lavori.

Quindi, per chi cerca una soluzione simile (a progetti archivio lotto Xcode), qui è la mia funzione:

# $mybase will be the current directory at the time the function was called 
# so make sure to cd into the folder containing the xcode project folders first 

function xcodeArchive { 
    mybase=$PWD 
    for x in `ls` 
    do 
     cd $mybase/$x 
     xcodebuild -workspace $x.xcodeproj/project.xcworkspace -scheme $x archive 
     cd $mybase 
    done 
} 
export -f xcodeArchive 
13

Ho avuto lo stesso problema con il comando archive, e abbiamo trovato questo domanda tramite Google.Sarebbe riuscire con questo comando build:

xcodebuild -verbose -project $ProductName.xcodeproj -target $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

Eppure, sarebbe avere successo con questo comando build:

xcodebuild -verbose -project $ProductName.xcodeproj -scheme $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

L'unica differenza è che specifica lo schema in luogo del bersaglio per costruire. Se c'è un motivo ragionevole per questo comportamento, mi farebbe piacere ascoltarlo.

Sto eseguendo XCode 4.5.1 su Mac OS X 10.7.5

+1

In effetti, quello era anche il mio punto di vista. Non ho ancora trovato una spiegazione per questo, ma la mia ipotesi è che è proprio come quel programma è stato progettato per l'esecuzione, che richiede uno schema ... ma questo non spiega perché il messaggio di errore restituito è così vago ... – mason81

+1

@ mason81 Ciò che è particolarmente confuso mentre ti confondi, è che il comando top (l'errore) funziona bene se stai semplicemente costruendo, non tentando di archiviare quella build per l'invio del negozio. – Tal

+1

oh questo è davvero confuso (e stranamente interessante). Non l'ho provato per scopi non di archiviazione, ma ho appena provato e hai ragione, ha funzionato bene ... Che strano! – mason81

Problemi correlati