2013-06-01 21 views
7

Ho creato app iOS per> 2 anni e non ho mai riscontrato questo problema. Sto tentando di archiviare un'app per la distribuzione beta. La compilazione ha esito positivo, ma alla fine del processo, Xcode riporta "Archivio annullato".Archivio in Xcode 4.5 - Nessun errore, ma build annullato

enter image description here

I log di costruzione mostrano senza avvisi o errori di qualsiasi tipo.

enter image description here

A volte, pulendo/cartella di build di pulizia/pulire dati derivati, posso ottenere l'archivio per avere successo, ma sembra che ci sia alcun motivo ad esso. Qualcuno ha riscontrato questo problema? In questo caso non ho nemmeno niente da andare fino a un messaggio di errore.

+1

Mai visto o sentito parlare di esso. Stai facendo la cosa giusta pulendo il progetto, ecc. Prova a reinstallare il tuo xcode, potrebbe esserci un problema con xcode. So che è un dolore farlo ma potrebbe sbarazzarsi del problema una volta per tutte. Ma questa è l'ultima risorsa. –

+0

Hai mai funzionato? Sto avendo lo stesso identico problema. Il tuo progetto usa i cocoapodi? Mi chiedo se questo è il problema con il mio. Non c'è altro indizio su cosa c'è che non va :( – ConfusedNoob

+0

Ho pensato di reinstallare Xcode. Penso che dovrò provare, io uso CocoaPods, ma ho usato CocoaPods su più progetti in passato senza alcun problema –

risposta

31

Avete uno script di esecuzione personalizzato che esegue il dump della versione con agvtool? Ho trovato questo per causare questo comportamento esatto. Quasi il 100% di errori nell'archiviazione e un errore comune nella compilazione. La rimozione di questo ha risolto il problema per me.

+2

Wow, è andata così: stavo urlando il mio build # con uno script di esecuzione personalizzato usando AVGTool. Incredibile cattura! Il killer era che non c'era un feedback nei registri che ti dicesse che cosa sta cancellando la build.Grazie per la risposta! –

+0

aaaaahhhhhhhhhhh questo mi è costato ore, dopo aver automatizzato build e pacchetti ipa e tutte le cose fantasiose, l'avgtool stava uccidendo la sceneggiatura THX !!! –

12

Primo: +1 sulla risposta di ConfusedNoob, perché quello era il problema (che mi ha portato a numerosi esperimenti e infine questa soluzione.) Se la mia risposta ti aiuta, +1 anche a lui, perché il suo suggerimento era enorme!

(Inoltre, vedere la mia altra risposta, qui di seguito, che aggira agvtool del tutto. Alla fine ho optato-in per utilizzare che in tutti i miei progetti.)

ho pasticciano con esso un po 'e l'unica cosa Ho trovato che funziona in modo affidabile per risolverlo è quello di utilizzare agvtool come pre-azione negli schemi appropriati, piuttosto che come script di esecuzione nelle fasi di costruzione.

  • CMD-SHIFT-virgola per modificare schemi (XCode 6.x)
  • Twiddle aperti a seconda di quale schema si desidera che questo su. L'ho fatto su Run e Archive, ma probabilmente ne ho davvero bisogno solo su archivio.
  • Seleziona l'icona "+" e "Nuova azione script di esecuzione"
  • Aggiungi il tuo script agvtool. Se vi interessa, il mio è:

    cd ${PROJECT_DIR} ; xcrun agvtool next-version -all 
    

(NOTA: pre-azioni non è naturalmente eseguito in ${PROJECT_DIR}, quindi bisogna cd.)

Chiudere & salvare e il gioco è fatto .

Il problema è che agvtool modifica il file di progetto (inutilmente, poiché tutti i numeri di build che ci interessano sono altrove) e la modifica del file di progetto provoca la cancellazione della build.

+1 uno sulla domanda, anche - cripes, è stata dura!

+0

"cd $ {PROJECT_DIR}" buono! – Luke

+2

Non mi dispiace ma se aggiunto come script pre-azione nello schema 'Archive', sembra essere" archiviato "con la versione corrente e incrementato poi (stesso risultato come post-azione) in Xcode 7. –

+1

Inoltre ho notato che non avevo o esegui un'azione post-intervento per impedire l'avviso di cancellazione durante l'esecuzione dei test e devi selezionare "Fornisci impostazioni di costruzione da" e il mio framework. – Gujamin

1

Un'altra tecnica è saltare completamente lo agvtool. Basta aggiungere questo script di runtime alla fine delle fasi di compilazione (dopo aver copiato le risorse del bundle.)

  • Selezionare il progetto

Select your project

  • Selezionare costruire fasi e +

Select build phases and +

  • Aggiungere una nuova fase di Run Script

Add new run-script phase

  • Inserire lo script

Enter the script

Lo script, per un facile copia/incolla:

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
buildNumber=$(($buildNumber + 1)) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" 

Assicurati che il tuo script viene eseguito dopo le fasi di copia-fascio di build

1

Per me la fase carthage update accumulo stava causando il problema.

Verificare inoltre se si dispone di altre fasi di compilazione con script che modificano file o codice.