Xcode 6.1-Fehler beim Erstellen von IPA

140

Habe heute ein Upgrade auf Xcode 6.1 durchgeführt und weißt du was? Jetzt habe ich Probleme beim Senden von Builds mit der TestFlight-Desktop-App. Hier ist der Fehler, den ich bekomme, wenn die App mit dem Erstellen des IPA beginnt:

Der Fehler

Fehler: / usr / bin / Codesign --force --preserve-metadata = Bezeichner, Berechtigungen, Ressourcenregeln --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tmp /QYFSJIvu7W/Payload/XX.app ist mit Fehler 1 fehlgeschlagen. Ausgabe: Warnung: Verwendung von --preserve-metadata mit der Option "Ressourcenregeln" (veraltet in Mac OS X> = 10.10)! Warnung: --resource-rules ist in Mac OS X> = 10.10 veraltet! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: Ressourcen können nicht gelesen werden

Der "Support-Artikel" hat keine Ahnung, was los ist.

Es scheint kein TestFlight-Problem zu sein, da in einer CI-Umgebung wie Jenkins mit xcrun oder ähnlichen Tools dasselbe passiert.

Die App wurde monatelang nicht aktualisiert, daher weiß ich, dass ich nicht damit rechnen sollte, dass Updates dies bald beheben. Früher hat es für mich und meine Kunden sehr gut funktioniert, daher bin ich auch nicht wirklich daran interessiert, es für etwas anderes aufzugeben.

Alle Ideen, worum es bei diesem Fehler geht und wie er behoben werden kann, sind sehr willkommen.

Şafak Gezer
quelle
4
Es scheint kein TestFlight-Problem zu sein, da in einer CI-Umgebung mit dem folgenden Befehl xcrun dasselbe passiert : xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>. Mit Xcode 6.0.1 hat alles gut funktioniert.
Daniel Martín

Antworten:

312

Ich wünschte, ich wüsste, warum es funktioniert, aber hier ist ein Fix , der für mich funktioniert hat:

Habe das Update gefunden!

Klicken Sie auf Ihr Projekt> Ziele> Wählen Sie Ihr Ziel> Build-Einstellungen>

Code Signing Resource Rules Path

und hinzufügen:

$(SDKROOT)/ResourceRules.plist

Tim
quelle
7
Vielen Dank! Ehrlich gesagt ist es mir egal, warum es funktioniert :) Nur das Neueste, was Apple in den letzten Monaten bei seiner großen Serie von Misserfolgen gebrochen hat. Wie auch immer, danke, dass Sie auf die Lösung hingewiesen haben. (und eine Ablehnung für mich, weil ich den Fehler vor dem Posten nicht gründlich nachgeschlagen habe)
Şafak Gezer
10
CODE_SIGN_RESOURCE_RULES_PATH ist der Variablenname, wenn Sie Ihre xcodeproj-Einstellungen über ein Skript oder eine Befehlszeile bearbeiten. developer.apple.com/library/ios/recipes/…
roblocop
5
Ich kann Code Signing Resource Rules Pathin meinen Build-Einstellungen nichts sehen . Irgendeine Idee?
Georg
7
Stellen Sie sicher, dass Sie ALLE und nicht GRUNDLEGENDE Einstellungen ausgewählt haben (Die Zeile unter "Allgemein, Funktionen, Informationen, Build-Einstellungen usw.")
AS
Anscheinend wird Ihre App dadurch abgelehnt: stackoverflow.com/questions/26488077/…
Glenn Maynard
61

Der folgende Patch für PackageApplications hat das Problem für mich behoben. Ich habe Ressourcenregeln entfernt, da es besagt, dass es am 10.10 veraltet ist.

Testflight Builds funktionieren ohne sie. Appstore baut auch.

/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});
Alistra
quelle
Der veraltete veraltete Parameter aus PackageApplication wurde entfernt, und Buildozer erstellt jetzt meine Python-App für iOS
Ian Ellis,
Großartige Lösung! Vielen Dank :) Die obige Einstellung "Code Signing Resource Rules Path" hat mein Problem nicht behoben, aber diese Antwort hat es geschafft. Außerdem ist die Korrektur jetzt für alle Projekte global :)
Pellet
@IanEllis: Könnten Sie mir bitte mitteilen, wie Sie den Parameter "Ressourcenregeln" aus PackageApplication entfernt haben. Es wird eine große Hilfe sein !!
Rashmi Ranjan Mallick
8
Hier ist ein Oneliner zum Korrigieren der Paketanwendung: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, Ressourcenregeln (. * Sign}). * ResourceRules.plist "/ $ 1 / smg '" / Anwendungen / Xcode6.1.1.app / Inhalt / Entwickler / Plattformen / iPhoneOS.platform / Entwickler / usr / bin / PackageApplication "(passen Sie Ihren Pfad an) Und ein vollständiges Skript, um dies anzuwenden: bitbucket.org/WeWantToKnow/xcode_scripts/raw/… zu verwenden: xcode_fix_PackageApplicationResourceRules.sh /Applications/Xcode6.1.1.app
Kaffee bricht
Dies ist die richtige Antwort. Die Antwort auf die Build-Einstellung erzwingt die Verwendung einer veralteten API.
Jameson
10

Ich habe eine E-Mail an den TestFlight-Support gesendet und folgende Antwort erhalten:

Unser Team untersucht dieses Problem derzeit mit der TestFlight Desktop-App. Verwenden Sie in der Zwischenzeit Xcode, um die IPA-Datei zu erstellen, und laden Sie sie dann mit der Desktop-App oder der TestFlight-Website hoch.

Die vorgeschlagene Problemumgehung hat funktioniert.

Adam
quelle
1
Es hat bei mir funktioniert, einfach die .ipa mit Xcode zu erstellen und über die Desktop-App hochzuladen.
Livingtech
@livingtech Ja, aber ich habe auch den gefürchteten "Xcode, der ein neues Profil generiert, anstatt das zu wählen, das ich möchte" -Bug :) Das Hochladen mit Testflight hat direkt hervorragend funktioniert.
Helmesjo
10

Die Antwort von Tim Gostony funktioniert seit der Veröffentlichung von Xcode 7 nicht mehr. Jetzt schlägt der App Store-Übermittlungsprozess fehl, wenn Ressourcenregeln vorhanden sind. Die Lösung besteht darin, den Pfad für die Codesignatur-Ressourcenregeln zu löschen und xcrun durch das xcodebuild-Tool zu ersetzen:

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

Die einfachste Options.plist zum Exportieren von Adpa-Distributions-IPA-Dateien sieht folgendermaßen aus:

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

Für diese Plist-Datei stehen weitere Optionen in Bezug auf Bitcode, App-Ausdünnung usw. zur Verfügung. Aus diesem Grund denke ich, dass das xcodebuild-Tool das richtige Tool zum Exportieren von ipa-Dateien für iOS 9 und höher ist.

Weitere Details zu Optionen plist finden Sie mit dem Befehl xcodebuild -help.

Vladimir Grigorov
quelle
danke Vladimir, ich war wirklich verwirrt darüber, wie es mit Xcode 7-Einsendungen in Konflikt steht.
Kevin
Wie genau ersetzen Sie xcrun? Ich kann keine Einstellungen dafür im Jenkins Xcode Plugin sehen :(
Hlung
2

Unter Yosemite mit XCode 6.4 schlägt die Codesignierung auch mit dem SDKROOT-Patch fehl. Im folgenden Artikel wird erläutert, wie Sie das XCode-Skript patchen, um dies zu umgehen. Beachten Sie, dass hiermit XCode gepatcht wird, es ist also versionsspezifisch, behebt jedoch das Problem.

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

GrumpyGary
quelle
1

Die Antwort von Alistra funktioniert für mich, aber ich möchte kein Skript ändern, das nicht von mir stammt (eine zukünftige Xcode-Version könnte diese Datei ändern und die Korrektur geht verloren).

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

Ich denke, die Antwort von Vladimir Grigorov ist die beste, wenn Sie ein Archiv haben, das Folgendes verwendet:

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

In meinem Fall habe ich das Archiv nicht, da ich die Anwendung nach dem Erstellen ändere und die Bundle-ID und das Signaturzertifikat ändern muss.

Die Lösung, die ich gefunden habe, besteht darin, codesignmich vorher anzurufen PackageApplicationund zu bitten PackageApplication, nicht zu unterschreiben. So was :

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

Vergessen Sie nicht, die .mobileprovisionDatei zum Signieren mit einzubetten cp.

gbitaudeau
quelle
0

Wie in einer anderen Antwort angegeben , können Sie auch nicht das Verteilungszertifikat angeben, mit dem signiert werden soll, und es wird korrekt verpackt. TestFlight müsste dazu seine App aktualisieren.

pr1001
quelle