webentwicklung-frage-antwort-db.com.de

Xcode 6.1-Fehler beim Erstellen von IPA

Ich 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, während die App mit dem Aufbau des IPA beginnt:

The error

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 schlug mit Fehler 1 fehl. Ausgabe: Warnung: Verwendung von --preserve-metadata mit der Option "resource-rules" (veraltet in Mac OS X> = 10.10)! Warnung: --Ressourcenregeln sind 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 das Gleiche in einer CI-Umgebung wie Jenkins unter Verwendung von xcrun oder ähnlichen Tools geschieht.

Die App wurde monatelang nicht aktualisiert, daher sollte ich nicht damit rechnen, dass dies bald behoben wird. 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.

Für Ideen, worum es bei diesem Fehler geht und wie er behoben werden kann, wäre ich sehr dankbar.

140
Şafak Gezer

Ich wünschte ich wüsste warum es funktioniert, aber hier ist ein Fix das hat bei mir funktioniert:

Fand das Update!

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

Code Signing Resource Rules Path

und füge hinzu:

$(SDKROOT)/ResourceRules.plist

312
Tim

Der folgende Patch für PackageApplications hat es für mich behoben. Ich habe Ressourcenregeln entfernt, da er laut 10.10 veraltet ist.

Testflight Builds funktionieren auch ohne. 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});
60
Alistra

Das answer 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 der Codesignaturressourcenregeln 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 IPA-Dateien für die Ad-hoc-Verteilung 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 zur Verfügung, die Bitcode, App-Ausdünnung usw. betreffen. Aus diesem Grund ist das Tool xcodebuild meiner Meinung nach das richtige Tool zum Exportieren von IPA-Dateien für iOS 9 und höher.

Weitere Informationen zu Optionen plist erhalten Sie mit dem Befehl xcodebuild -help.

10

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

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

Die vorgeschlagene Problemumgehung hat funktioniert.

10
Adam

Auf Yosemite w/XCode 6.4 schlägt die Codesignierung auch mit dem SDKROOT-Patch fehl. Der folgende Artikel beschreibt, wie Sie das XCode-Skript patchen können, um dies zu umgehen. Beachten Sie, dass hiermit XCode gepatcht wird. Dies ist versionsspezifisch, behebt jedoch das Problem.

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

2
Gary Skiba

Das 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 Antwort von Vladimir Grigorov ist das Beste, wenn Sie ein Archiv haben, das 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, ist, codesign selbst anzurufen, bevor PackageApplication verwendet wird, und PackageApplication zu bitten, nicht zu signieren. 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>"

Vergiss nicht, das .mobileprovision Datei zum Signieren mit cp.

1
gbitaudeau

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

0
pr1001