web-dev-qa-db-fra.com

Erreur Xcode 6.1 lors de la construction de l'IPA

Je viens juste de passer à Xcode 6.1 aujourd'hui et devinez quoi: Je ne parviens pas à soumettre de versions à l'aide de l'application de bureau TestFlight. Voici l'erreur que je reçois lorsque l'application commence à créer l'IPA:

The error

error:/usr/bin/codesign --force --preserve-metadata = identifiant, droits d'accès, règles de ressource --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules =/tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist/tmp /QYFSJIvu7W/Payload/XX.app a échoué avec l'erreur 1. Résultat: Avertissement: utilisation de --preserve-metadata avec l'option "resource-rules" (obsolète sous Mac OS X> = 10.10)! Avertissement: --resource-rules est obsolète sous Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: impossible de lire les ressources

L'article de support n'a aucune idée de ce qui se passe.

Il ne semble pas que ce soit un problème avec TestFlight, car la même chose se produit dans un environnement de CI comme Jenkins utilisant xcrun ou des outils similaires.

L'application n'étant pas mise à jour depuis des mois, je sais que je ne devrais m'attendre à aucune mise à jour pour résoudre ce problème de si tôt. Auparavant, cela fonctionnait très bien pour moi et mes clients, je ne souhaite donc pas l'abandonner pour autre chose non plus.

Toute idée sur le sujet de cette erreur et sur la façon de la réparer serait très appréciée.

140
Şafak Gezer

Je voudrais savoir pourquoi cela fonctionne, mais voici un correctif cela a fonctionné pour moi:

Trouvé le correctif!

Cliquez sur votre projet> Cibles> Sélectionnez votre cible> Paramètres de construction>

Code Signing Resource Rules Path

et ajouter :

$(SDKROOT)/ResourceRules.plist

312
Tim

Le correctif suivant pour PackageApplications l'a corrigé pour moi, j'ai supprimé les règles de ressources car il est dit qu'il est obsolète le 10.10.

Testflight construit le travail sans cela. Appstore construit aussi.

/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});
60
Alistra

Le réponse de Tim Gostony ne fonctionne plus depuis la publication de Xcode 7. Le processus de soumission de l'App Store échoue désormais en présence de règles de ressources. La solution consiste à vider votre chemin des règles de ressources de signature de code et à remplacer xcrun par l'outil xcodebuild:

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

Le fichier Options.plist le plus simple pour exporter des fichiers ipa de distribution ad-hoc ressemble à ceci:

<?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>

Il existe d'autres options disponibles pour ce fichier plist concernant le bitcode, l'amincissement des applications, etc. C'est pourquoi je pense que l'outil xcodebuild est l'outil idéal pour exporter des fichiers ipa pour iOS 9 et versions ultérieures.

Plus de détails sur les options sont disponibles avec la commande xcodebuild -help.

10
Vladimir Grigorov

J'ai envoyé un courrier électronique au support technique de TestFlight et j'ai obtenu cette réponse:

Notre équipe étudie actuellement ce problème avec l'application TestFlight Desktop. En attendant, veuillez utiliser Xcode pour créer le fichier IPA puis le télécharger à l'aide de l'application de bureau ou du site Web TestFlight.

La solution de contournement suggérée a fonctionné.

10
Adam

Sur Yosemite w/XCode 6.4, même en utilisant le patch SDKROOT, l’attribution de code échoue. L'article suivant explique comment corriger le script XCode pour résoudre ce problème. Notez que cela corrige XCode, il est donc spécifique à la version, mais corrige le problème.

http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts

2
Gary Skiba

Les réponse de Alistra fonctionnent pour moi mais je ne souhaite pas modifier un script qui n'est pas le mien (une future version de Xcode pourrait modifier ce fichier et la correction sera perdue).

 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});

Je pense que réponse de Vladimir Grigorov est le meilleur si vous avez une archive utilisant:

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

Dans mon cas, je n'ai pas d'archive, car je modifie l'application après l'avoir créée et je dois changer l'identifiant du paquet et le certificat de signature.

La solution que j'ai trouvée est d'appeler codesign moi-même avant d'utiliser PackageApplication et de demander à PackageApplication de ne pas signer. Comme ça :

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>"

N'oubliez pas d'intégrer le .mobileprovision fichier en utilisant pour signer avec cp.

1
gbitaudeau

Comme spécifié dans autre réponse , vous pouvez également ne pas spécifier le certificat de distribution à signer et le package sera correctement emballé. TestFlight aurait besoin de mettre à jour leur application pour ce faire.

0
pr1001