Ungültige binäre iPhone-Anwendung

78

Ich versuche, eine Anwendung in den iPhone App Store hochzuladen, erhalte jedoch die folgende Fehlermeldung von iTunes Connect:

Die von Ihnen hochgeladene Binärdatei war ungültig. Die Signatur war ungültig oder nicht mit einem Apple-Einreichungszertifikat signiert.


Hinweis: Die Details der ursprünglichen Frage wurden entfernt, da diese Seite zu einem Repository für alle Informationen über mögliche Ursachen dieser bestimmten Fehlermeldung geworden ist.

Allgemeine Informationen zum Senden von iPhone-Anwendungen an den App Store finden Sie unter Schritte zum Hochladen einer iPhone-Anwendung in den AppStore .

Kristopher Johnson
quelle
machte eine Anleitung für diese: stackoverflow.com/questions/21853083/...
Blacksheep

Antworten:

35

Ich habe die Erfahrung gemacht, dass Xcode gelegentlich verwirrt ist, welches Signaturzertifikat verwendet werden soll. Ich habe mir angewöhnt, Xcode nach jeder Änderung der Codesignatureinstellungen (und einer sauberen Erstellung) zu beenden und neu zu starten, um dieses Problem zu umgehen.

Mark Bessey
quelle
1
Versuchte dies und hatte immer noch Probleme. Ich verwende Xcodes Build & Archive -> Upload to iTunes. Muss noch jemand einen weiteren Schritt machen?
Quantumpotato
Möglicherweise erhalten Sie bessere Diagnoseinformationen, wenn Sie das eigenständige App-Uploader-Programm verwenden.
Mark Bessey
22

Ich wollte nur erwähnen, dass auch ich das Problem mit Zip von der Kommandozeile hatte. Das Problem liegt in der Art und Weise, wie Symlinks standardmäßig behandelt werden. Verwenden von:

zip -y -r myapp.zip myapp.app

Dieses Problem wurde gelöst.

user188785
quelle
11

Ich hatte das gleiche Problem und löste es folgendermaßen:

Die Eigenschaftszertifikate wurden auf meinem Entwicklungscomputer installiert und mobileprovision.embedded wurde in das Distributionsarchiv aufgenommen. Nach ungefähr einer Stunde Googeln und Graben fand ich die Quelle des Fehlers. In Xcode hatte ich die Release-Konfiguration kopiert und eine neue Distributionskonfiguration erstellt und dann die Signaturidentität in mein Distributionszertifikat geändert. Obwohl es in der GUI aktualisiert wurde, wurde die Projektdatei nicht korrekt aktualisiert.

Wenn Sie auf denselben Fehler stoßen, suchen Sie in Ihrem Verzeichnis [ProjectName] .xcodeproj nach der Datei project.pbxproj und öffnen Sie sie in Ihrem bevorzugten Editor. Suchen Sie nach dem Abschnitt Distribution. Mein kaputter sah so aus:

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Developer: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Developer: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
};
name = Distribution;
};

Im zweiten Abschnitt sehen Sie, dass die Signaturidentität und das Bereitstellungsprofil falsch sind. Bearbeiten Sie es so, dass es mit dem ersten Abschnitt übereinstimmt, und erstellen Sie es neu. Der letzte sah so aus:

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Distribution: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “F00D3778-32B2-4550-9FCE-1A4090344400″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
};
name = Distribution;
};

Die Richtlinien wurden geändert, um die Unschuldigen zu schützen

Eddie
quelle
7

Gleiches Problem, andere Lösung.

In meinem Fall habe ich die Datei mit zip -r myapp.zip myapp.app Turns out komprimiert. Der Befehl zip hat das Bundle verschraubt. Durch Komprimieren aus dem Finder funktionierte es.

Jorge Bernal
quelle
Genau das gleiche ist mir vor ungefähr einem Monat passiert. Ärgerlich.
Jbrennan
Hatte gerade die gleiche Lösung funktionieren. Ich habe unten die Lösung von @ shirikodama ausprobiert und sie hat nicht funktioniert. Haben Sie einen Weg gefunden, in der Befehlszeile zu komprimieren?
Jesse Beder
3
Egal, ich habe ein cp -rund dann den Reißverschluss gemacht und es war der cp, der die Sym-Links in der App vermasselt hat. Es sollte sein cp -R, Sym-Links beizubehalten.
Jesse Beder
7

Ich hatte das gleiche Problem und nachdem ich mehrere Dinge ausprobiert hatte, entfernte ich die .plist-Berechtigungen aus den Codesignatur-Berechtigungen (ließ es einfach leer) und es wurde einwandfrei erstellt und ENDLICH hochgeladen.

Viel Glück alle :-D

Signal2
quelle
Ich kann nicht glauben, dass dies das Problem behoben hat. Es ist besonders lächerlich, da die Berechtigungsdatei in der Provisioning Portal-Dokumentation so explizit ist.
Devlord
6

Ein weiterer Datenpunkt: Für eine Weile ging meine App durch. Jetzt habe ich Unterstützung für In-App-Käufe hinzugefügt und plötzlich schlägt dies mit dem Problem "Ungültige binäre / ungültige Signatur" fehl. Bei sorgfältiger Prüfung stellte ich fest, dass der Wert der Anwendungskennung in der Berechtigungsplist-Datei deaktiviert war.

Dies hat höchstwahrscheinlich damit zu tun, dass ich das Bereitstellungsprofil von einem Platzhalter-Profil durch ein App-spezifisches Profil ersetzt habe (erforderlich für In-App-Käufe). Die falsche App-ID wurde unter dem alten Profil qualifiziert. Es stimmte nicht mit der App-ID in der info.plist überein, aber anscheinend hat iTunes das vergeben.

Um es noch einmal zusammenzufassen:

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.*

ist OK, während

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.foo

verursacht "Ungültige Binärdatei".

Seva Alekseyev
quelle
5

Siehe diesen Link für die Lösung:

http://greghaygood.com/2010/09/04/invalid-binary-message-from-itunesconnect

Die kurze Antwort lautet: "Schließlich habe ich meine info.plist überprüft und etwas entdeckt. Ich habe CFBundleIconFiles gemäß den neuen Richtlinien hinzugefügt, aber es gab einen leeren Eintrag in der Array-Liste. Ich habe diesen entfernt und erneut gesendet, und es war schließlich." akzeptiert!"

Simon
quelle
5

Ich hatte auch das gleiche Problem, als ich beim Erstellen bemerkte, dass die Bereitstellung nicht im Build hinzugefügt wurde.

Die Lösung für mich bestand darin, den Build auf das iPhone-Gerät so einzustellen, wie ich normalerweise den Simulator verwende, aber dann wird das Bereitstellungsprofil nicht enthalten ...

Dies könnte ein Noob-Fehler sein. Normalerweise können Sie kein Gerät erstellen, aber wenn Sie es für die Verteilung tun, können Sie es.

Eric
quelle
4

Nachdem ich die Schritte mehrmals wiederholt hatte, konnte ich meine App endlich hochladen.

Ich weiß nicht genau, was das Problem behoben hat, aber vor dem erfolgreichen Versuch habe ich Xcode und Firefox geschlossen und neu gestartet. Ich denke, eine dieser Apps hatte einen schlechten Juju.

Kristopher Johnson
quelle
Ich habe alles gefunden, aber Safari kann die Ursache für die meisten Probleme sein, weshalb sie es vermutlich durch den App Uploader ersetzt haben. Ich habe oft dieses Problem beim Herunterladen von Zertifikaten / Profilen aus dem Provisioning Portabl, wenn Safari
Anthony Main
4

Hier ist ein Problem, auf das ich gestoßen bin: Ich habe die Binärdatei vor dem Hochladen zu Subversion hinzugefügt. Das Vergleichen / Zippen der Binärdatei umfasste dann die versteckten .svn-Verzeichnisse, die die Codesignatur durcheinander brachten.

Aaron
quelle
4

Ich habe verschiedene Dinge ausprobiert, nachdem ich verschiedene Beiträge gelesen hatte, einschließlich der oben genannten. Was für mich endlich funktionierte, war ganz von vorne zu beginnen! Ich habe jedes mit meiner App verknüpfte Zertifikat und Bereitstellungsprofil gelöscht.

Ich habe ein neues Entwicklungszertifikat und ein neues Vertriebszertifikat neu erstellt. Ich habe das Zwischenzertifikat erneut heruntergeladen. Dann habe ich sowohl das Entwicklungsprofil als auch das Verteilungsprofil neu erstellt.

Nach der Installation der drei Zertifikate (diesmal stellte ich fest, dass die Distribution sowohl private als auch öffentliche Schlüssel hatte) und der beiden Bereitstellungsprofile (mein Distributionsprofil wurde nicht als ohne gültiges Zertifikat gekennzeichnet!) Funktionierte alles.

Nachdem ich mich entschieden hatte, alles zu widerrufen und von vorne zu beginnen, dauerte es nur etwa 5 Minuten, um das neue Material zu erstellen und neu zu installieren.

Troy Sartain
quelle
4

Ich hatte ein ähnliches Problem, aber in Monotouch. Ich habe festgestellt, dass in meinem Release-Profil Entwicklerzertifikate verwendet wurden. Es sollte so aussehen: Geben Sie hier die Bildbeschreibung ein

Ian Vink
quelle
3

Es scheint, dass dieses Problem viele Ursachen hat. Hier ist die Lösung für meine:

Dies gilt für alle Personen, die mehreren Entwicklungsteams angehören (z. B. Ihre eigenen Apps und Ihre Unternehmen).

Wenn Sie den Build mit einem Satz von Anmeldeinformationen erstellen und mit einem anderen erneut signieren (z. B. für die Ad-hoc- / Appstore-Verteilung), müssen Sie sicherstellen, dass der Build ursprünglich mit Anmeldeinformationen erstellt und signiert wurde, die demselben iOS-Entwicklungsteam gehören wie das Zu den Anmeldeinformationen für die Verteilung, mit denen Sie erneut signieren, gehören .

Erstellen Sie also nicht mit den Anmeldeinformationen von "Indy Dev Inc" und versuchen Sie dann, mit den Anmeldeinformationen von "Company Inc" bereitzustellen. Stellen Sie sicher, dass Sie sowohl "Company Inc" -Entwickler als auch Verteilungsanmeldeinformationen einrichten und verwenden.

Ich habe weitere Informationen dazu in meinem Blog veröffentlicht: http://omegadelta.net/2011/06/09/fiendish-ios-code-signing-invalid-binary-issue/

William Denniss
quelle
Ich habe mit Apple-Ingenieuren (letzte Woche bei WWDC) bestätigt, dass es möglich ist, eine Binärdatei, die von einem völlig anderen Entwickler mit einem anderen Bereitstellungsprofil erstellt wurde, erneut zu signieren. Leider habe ich auch Probleme mit dieser Aufgabe ... :(
livingtech
2

Ich hatte das gleiche Problem. Ich war bereit, das Handtuch für dieses Problem zu werfen, aber ich fand es heraus, als ich meinen Code mit Murky eincheckte. Ich überfliege immer die Unterschiede in den Dateien, die sich vor dem Einchecken geändert haben. Dabei habe ich festgestellt, dass sich die Datei project.pbxproj geändert hat .... und im Abschnitt Distribution den Eintrag für „PROVISIONING_PROFILE [sdk = iphoneos *] War leer.

Das Beenden und Neustarten von Xcode hat bei mir nicht funktioniert. Stattdessen habe ich sowohl meine Projekt- als auch meine Zieleinstellungen aufgerufen und die Codesignatur geändert, um mein Verteilungsprofil direkt auszuwählen, anstatt mich auf die automatische Auswahlfunktion zu verlassen. Dadurch wurde die Datei project.pbxproj mit den richtigen Werten gefüllt, obwohl die automatische Auswahlfunktion angeblich genau das Profil ausgewählt hat, das ich manuell ausgewählt habe.

Ich brauche ein Bier...

NorthStar7
quelle
2

Nachdem wir alle anderen hier aufgeführten Korrekturen ausprobiert hatten, haben wir eine TSI bei Apple protokolliert. Nachdem wir alle Schritte im Technischen Hinweis TN2250 ausgeführt haben, wurde unser Problem verursacht, weil eine versiegelte Ressource fehlte oder ungültig war. In unserem Fall war es ._.DS_Store.

Das "... " wird als Apple Double-Datei bezeichnet und ist das Ergebnis des Kopierens des Xcode Project-Ordners * entpackt * auf ein Dateisystem, das die Ressourcengabeln von HFS + (die für Codesignaturen verwendet werden) nicht ordnungsgemäß unterstützt, auf und zurück. Diese zusätzlichen "... " Dateien resultieren und verursachen einen Fehler bei der Überprüfung der Codesignatur.

Um die problematischen Apple Double-Dateien aus Ihrem Xcode-Projektordner zu entfernen, führen Sie den Befehl dot_clean im Ordner Ihres Xcode-Projekts aus, erstellen Sie einen sauberen Build und durchsuchen Sie Ihre Übermittlung erneut und versuchen Sie es erneut.

dot_clean /the/path/to/xcode/project

Hinweis: Sie können den Projektordner einfach in das Terminal ziehen, um den Pfad automatisch zu füllen

Beim Ausführen des Befehls wird keine Meldung angezeigt, aber beim Erstellen des Projekts wird möglicherweise beim nächsten Erstellen eine Warnung zu der Datei angezeigt. Sie können dies ignorieren, die App wird validiert und erfolgreich gesendet.

Dave Anderson
quelle
1

Das Problem wurde behoben, indem die Datei myProject.xcodeproj bereinigt wurde (Rechtsklick, Paket öffnen). Das Paket enthielt Dateien vom Mitentwickler. Nach dem Löschen dieser Dateien wurde das Problem behoben

Frank
quelle
1

Für das, was es wert ist, möchte ich hinzufügen, was dieses Problem für mich behoben hat. Ich hatte ein ? (Fragezeichen) in meinem App-Titel, der den Fehler verursacht hat.

Stephen J.
quelle
1

Ich habe eine ungültige Binärdatei erhalten, wenn die App keine Remote-Push-Benachrichtigung verwendet, aber den Code zum Registrieren von Push und die Rückrufdelegierten zum Registrieren / Empfangen von Remote-Benachrichtigungen unkommentiert gelassen, auch wenn der Code nicht verwendet wird.

Dies ist neu. Meine letzte Einreichung letzte Woche war in Ordnung. Diese Woche wird eine ungültige Binärdatei zurückgegeben. Zum Glück gibt es eine E-Mail, die den Fehler erklärt.

honcheng
quelle
1

Ich hatte ein ähnliches Problem, aber ich verwende keine Berechtigungen.plist. Nach einem Dutzend fehlgeschlagener Uploads überprüfte ich jedoch meine info.plist und entdeckte etwas. Mein CFBundleIconFiles-Array hatte einen leeren Eintrag. Ich habe das entfernt und erneut eingereicht, und es wurde endlich akzeptiert!

Ernsthaft, wie schwer wäre es für Apple, solche Validierungsfehler aufzudecken?

Bearbeiten: Es ist nicht sofort offensichtlich, wo sich die CFBundleIconFiles befinden, da sie einen anderen Namen verwenden. Klicken Sie in der Projektinfo-Ansicht bei gedrückter Strg-Taste auf "Raw Keys / Values ​​anzeigen" und wählen Sie diese aus. Anschließend werden die Verweise auf CFBundleWhatever angezeigt. Im Fall dieses Editors versuchte er, eine nicht vorhandene Datei [email protected] zu verwenden.

Greg Haygood
quelle
0

Meine zwei Cent:

Laden Sie die neueste Version des Application Loader herunter. Ich habe gerade aktualisiert und erhalte jetzt eine andere Fehlermeldung.

Ross
quelle
0

Ich habe gerade diesen Ärger (wieder) durchgemacht, aber dieses Mal stellte ich fest, dass mein Distributionsprofil den Status "Ungültig" hatte. Wenn Sie der Meinung sind, dass alles andere in Ordnung ist, überprüfen Sie den Status im Portal und erneuern Sie alles, was sich nicht im aktiven Zustand befindet, und laden Sie es erneut herunter.

Woodmantech
quelle
0

Ich habe nach einem App-Upload eine ungültige Binärdatei erhalten, ohne dass per E-Mail nachverfolgt wurde, warum dies fehlgeschlagen ist. Ich habe versucht, ein paar Dinge gleichzeitig zu tun, und ich bin mir nicht sicher, welche der folgenden Lösungen dies tatsächlich behoben hat:

  1. Macbook Pro neu gestartet
  2. Der Quellcode für mein Projekt wurde von einem NTFS-Laufwerk auf ein HFS + -Laufwerk verschoben und neu kompiliert.
Andrew Garrison
quelle
0

Ich hatte ein Problem mit diesem und dem 4.3 GM SDK. Eine unserer Apps würde es nach dem Upload nicht mehr schaffen. Es stellte sich heraus, dass es sich um ein Problem mit dem Bereitstellungsprofil handelte. Ich habe das App Store-Profil neu generiert und es hat gut funktioniert.

logancautrell
quelle
0

Meine Lösung bestand darin, eine neue App-ID zu erstellen. Ich bin mir nicht sicher, warum das Problem behoben wurde, aber ich vermute, dass die Bundle-IDs möglicherweise nicht übereinstimmen. Durch das Erstellen der neuen App-ID musste ich sicherstellen, dass meine App und iTunes dasselbe erwarteten.

Praveen
quelle
0

Eine andere Lösung:

Für mich hat das einfache Setzen der 'Release'-Zertifikate unter' Code Signing 'das Problem behoben. Sie wurden ursprünglich auf "Kein Codezeichen" gesetzt.

RSH1
quelle
0

Für mich wurde das Problem durch erneutes Speichern eines PNG-Bildes mit der Option ohne Interlaced gelöst. In früheren Versionen war Interlaced-PNG zulässig, aber Sie wissen, dass diese Bilder die ungültige Binärdatei verursachen können.

Meine Apple-Nachricht: Korrupte Symboldatei - Die Symboldatei [email protected] scheint beschädigt zu sein. Ihr Symbol darf keine Interlaced-PNG-Datei sein.

Sie können sehen, ob das PNG mit dem Befehl "Datei" im Terminal interlaced ist: Eva-Madrazos-MacBook-Pro-2: GQ 7-Integrationsanzeigen Eva $ file * .png Default.png: PNG-Bilddaten, 320 x 480, 8-Bit / Farbe RGB, nicht interlaced

Viel Glück, Eva

Eva Madrazo
quelle
0

Ich möchte auf die Möglichkeit hinweisen, Apple eine E-Mail zu senden und sie zu bitten, ihre Protokolle zu überprüfen. Ich habe genau das getan, nachdem ich zuerst eine Menge Dinge ausprobiert hatte. Es war notwendig, sie nach fast vier Wochen daran zu erinnern, aber schließlich antworteten sie und wiesen auf die genaue Stelle des Problems hin.

Das Problem in meinem Fall war, dass ich zuvor andere App-Symbole ausprobiert hatte und ein Verweis auf das alte Bild immer noch in 'CFBundleIcons' blieb. Ich habe die Drag & Drop-Funktion verwendet, um das Symbol festzulegen, aber ich habe nicht bemerkt, dass der alte Inhalt nicht vollständig gelöscht wurde, bevor die neue Referenz hinzugefügt wurde.

Um die fehlerhafte Referenz zu sehen, mussten die Pfeile erweitert werden, um jedes einzelne Unterelement in der Plist-Datei anzuzeigen. Ein Tipp ist, mit der rechten Maustaste in die Datei zu klicken und die Option zum Anzeigen des Rohinhalts auszuwählen. Auf diese Weise müssen Sie nichts erweitern.

Vanja
quelle
0

Ich habe alle anderen vorgeschlagenen Lösungen ausprobiert, aber nichts hat geholfen.

Am Ende habe ich ein neues Xcode-Projekt erstellt und meinen gesamten Code und meine Ressourcen darin kopiert. Das hat den Trick gemacht und meine App wurde in die Überprüfungswarteschlange gestellt.

Ich kann auch Apples technische Hinweise zur Codesignatur zum Debuggen / Überprüfen empfehlen .

Eloff
quelle
0

uuid ist nicht erlaubt. Ich habe es behoben, indem ich alle [[UIDevice currentDevice] uniqueIdentifier] entfernt habe.

TK189
quelle