Errore Xcode 6.1 durante la creazione di IPA


140

Ho appena eseguito l'upgrade a Xcode 6.1 oggi e indovinate un po ': ora ho problemi a inviare build usando l'app desktop TestFlight. Ecco l'errore che ricevo mentre l'app inizia a creare l'IPA:

L'errore

errore: / usr / bin / codesign --force --preserve-metadata = identificatore, diritti, regole-risorse - firma 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tmp /QYFSJIvu7W/Payload/XX.app non riuscito con errore 1. Output: avviso: utilizzo di --preserve-metadata con l'opzione "regole-risorse" (obsoleto in Mac OS X> = 10.10)! Attenzione: --resource-rules è stato deprecato in Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: impossibile leggere le risorse

L '"Articolo di supporto" non ha idea di cosa stia succedendo.

Non sembra essere un problema TestFlight perché la stessa cosa accade in un ambiente CI come Jenkins usando xcrun o strumenti simili.

L'app non è stata aggiornata per mesi, quindi so che non dovrei aspettarmi aggiornamenti per risolverlo presto. Funzionava davvero bene per me e per i miei clienti, quindi non sono nemmeno molto interessato ad abbandonarlo per qualcos'altro.

Qualche idea su cosa sia questo errore e su come risolverlo sarebbe molto apprezzata.


4
Non sembra essere un problema PROVA Scelta dei colori, perché la stessa cosa accade in un ambiente CI utilizzando il comando xcrun in questo modo: xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>. Con Xcode 6.0.1, tutto ha funzionato bene.
Daniel Martín,

Risposte:


312

Vorrei sapere perché funziona, ma ecco una soluzione che ha funzionato per me:

Ho trovato la soluzione!

Fai clic sul tuo progetto> Obiettivi> Seleziona il tuo obiettivo> Impostazioni di costruzione>

Code Signing Resource Rules Path

e aggiungi :

$(SDKROOT)/ResourceRules.plist


7
Grazie! Francamente non mi interessa il motivo per cui funziona :) solo l'ultimo di ciò che Apple ha rotto sulla loro serie di rovesci negli ultimi due mesi. Comunque, grazie per aver segnalato la soluzione. (e un downvote per me per non aver verificato attentamente l'errore prima di pubblicare)
--afak Gezer,

10
CODE_SIGN_RESOURCE_RULES_PATH è il nome della variabile se stai modificando le tue impostazioni di xcodeproj attraverso uno script o una riga di comando. developer.apple.com/library/ios/recipes/…
roblocop,

5
Non riesco a vedere Code Signing Resource Rules Pathnelle mie Impostazioni build. Qualche idea?
Georg,

7
Assicurati di aver selezionato TUTTE e non le impostazioni BASE (la riga sotto "Generale, Funzionalità, Informazioni, Impostazioni di costruzione ecc.")
AS

Apparentemente questo farà rifiutare la tua app: stackoverflow.com/questions/26488077/…
Glenn Maynard

61

La seguente patch per PackageApplications l'ha risolto per me, ho rimosso le regole delle risorse poiché dice che è obsoleto il 10.10.

Testflight crea lavoro senza di essa. Costruisce anche Appstore.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
 % diff PackageApplication PackageApplicationFixed 
155,157c155,156
<     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<                          "--sign", $opt{sign},
<                          "--resource-rules=$destApp/ResourceRules.plist");
---
>     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
>                          "--sign", $opt{sign});

Rimosso il parametro obsoleto rogue da PackageApplication, e buildozer ora crea la mia app Python per iOS
Ian Ellis,

Ottima soluzione! Grazie mille :) L'impostazione sopra "Percorso regole regole firma codice" non ha risolto il mio problema ma questa risposta ha fatto, inoltre la correzione è ora globale in tutti i progetti :)
Pellet

@IanEllis: La prego di farmi sapere come hai rimosso il parametro "risorse-regole" da PackageApplication. Sarà di grande aiuto !!
Rashmi Ranjan mallick

8
Ecco un oneliner per correggere PackageApplication: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, risorse-regole (. * Segno}). * ResourceRules.plist "/ $ 1 / smg '" / Applicazioni / Xcode6.1.1.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / PackageApplication "(modifica il tuo percorso) E uno script completo per applicare questo: bitbucket.org/WeWantToKnow/xcode_scripts/raw/… da usare: xcode_fix_PackageApplicationResourceRules.sh
/Applications/Xcode6.1.1.app

Questa è la risposta corretta La risposta alle impostazioni di compilazione forza l'uso di un'API obsoleta.
Jameson,

10

Ho inviato un'e-mail al supporto TestFlight e ho ottenuto questa risposta:

Il nostro team sta attualmente esaminando questo problema con l'app TestFlight Desktop. Nel frattempo, utilizzare Xcode per creare il file IPA e quindi caricarlo utilizzando l'app desktop o il sito Web TestFlight.

La soluzione suggerita ha funzionato.


1
Per me ha funzionato solo per realizzare il .ipa con Xcode e caricarlo tramite l'app desktop.
livingtech,

@livingtech Sì, comunque ho anche avuto il temuto "Xcode che genera un nuovo profilo invece di scegliere quello che voglio" -bug :) Il caricamento con testflight ha funzionato perfettamente.
Helmesjo,

10

La risposta di Tim Gostony non funziona più dal rilascio di Xcode 7. Ora il processo di invio dell'App Store fallisce quando sono presenti le regole delle risorse. La soluzione è cancellare il percorso delle regole delle risorse per la firma del codice e sostituire xcrun con lo strumento xcodebuild:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

Il semplice Options.plist per l'esportazione di file ipa di distribuzione ad hoc è simile al seguente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>iCloudContainerEnvironment</key>
    <string>Production</string>
    <key>teamID</key>
    <string>[YOUR TEAM ID]</string>
    <key>method</key>
    <string>ad-hoc</string>
</dict>
</plist>

Esistono altre opzioni disponibili per questo file plist per bitcode, assottigliamento delle app, ecc. Ecco perché penso che lo strumento xcodebuild sia lo strumento giusto per esportare i file ipa per iOS 9 e versioni successive.

Maggiori dettagli sul plist di opzioni sono disponibili con il comando xcodebuild -help.


grazie Vladimir, mi stavo davvero confondendo su ciò che è in conflitto con gli invii di Xcode 7.
Kevin

come si sostituisce esattamente xcrun? Non riesco a vedere alcuna impostazione per questo nel plugin
Xen di


1

La risposta di Alistra funziona per me, ma non voglio cambiare uno script che non è mio (una futura versione di Xcode potrebbe cambiare questo file e la correzione andrà persa).

 diff PackageApplication PackageApplicationFixed 155,157c155,156
<-     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<-                          "--sign", $opt{sign},
<-                          "--resource-rules=$destApp/ResourceRules.plist");
---
->     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
->                          "--sign", $opt{sign});

Penso che la risposta di Vladimir Grigorov sia la migliore se si dispone di un archivio che utilizza:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

Nel mio caso, non ho l'archivio, perché modifico l'applicazione dopo averlo creato e devo cambiare l'ID pacchetto e il certificato di firma.

La soluzione che ho trovato è di chiamarmi codesignprima dell'uso PackageApplicatione chiedere PackageApplicationdi non firmare. Come questo :

replace :

 /usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>"

by :

/bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision"
/usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>"

Non dimenticare di incorporare il .mobileprovisionfile usando per accedere cp.


0

Come specificato in un'altra risposta , è anche possibile non specificare il certificato di distribuzione con cui firmare e verrà impacchettato correttamente. TestFlight dovrebbe aggiornare la propria app per farlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.