Durch das Archivieren eines Projekts in Xcode wird fälschlicherweise ein Paket mit mehreren Anwendungen erstellt

170

Durch die Archivierung meines Projekts in Xcode wird ein Paket mit mehreren Anwendungen erstellt, anstatt mein Hauptziel für die Veröffentlichung zu bündeln, was ich möchte. Wenn ich mein Archiv in Organizer validiere, wird folgende Meldung angezeigt:

"[Projektname] enthält keine Einzelbündelanwendung oder mehrere Produkte. Bitte wählen Sie ein anderes Archiv aus oder passen Sie Ihr Schema an, um eine Einzelbündelanwendung zu erstellen."

Es hört sich so an, als ob es einige Einstellungen im Schema gibt, die angepasst werden müssen, aber ich kann nicht herausfinden, warum andere Ziele aufgenommen werden.

Ich benutze übrigens Xcode 4.0.

Jared Friedman
quelle

Antworten:

251

OK, beantworte meine eigene Frage. Es stellt sich heraus, dass es sich um ein Problem mit abhängigen Projekten in XCode 4 handelt. Wenn Ihnen dies passiert, gehen Sie die Build-Einstellungen für alle abhängigen Projekte (z. B. statische Bibliotheken) durch und stellen Sie sicher, dass die Option "Installation überspringen" unter "Bereitstellung" aktiviert ist zu JA.

Weitere Details hier: http://flakasoft.com/developer-tips/xcode-4-bug-solution-for-archiving-build-with-static-library/

Jared Friedman
quelle
1
Sie, mein Herr, sind mein Held! Ich hätte das nicht so leicht gefunden: P
Andrew Natoli
6
Es wurde in "JA" geändert ... immer noch fehlgeschlagen. :(
Joe D'Andrea
8
Die Installation überspringen muss nur in der statischen Bibliothek auf Ja gesetzt werden, nicht in Ihrem Projekt oder Ziel. Dieser Blog-Beitrag zur Ad-hoc-Verteilung gilt gleichermaßen für App Store-Builds und enthält einen Abschnitt zum Überspringen der Installation
jj0b
8
Bei einigen Bibliotheken (wie CorePlot) müssen Sie auch den Abschnitt "Header kopieren" in ihrer Erstellungsphase ändern. Schauen Sie sich also auch Ryans Antwort an.
Tim Swast
2
Ich muss auch alle Header-Dateien (der statischen Bibliothek) in das Ziel "Build-Phasen" verschieben, in "Header kopieren" habe ich sie von "Öffentlich" in "Projekt" verschoben.
Hlung
151

Zwei Dinge mussten in den Unterprojekten behoben werden, um dieses Problem zu beheben:

  1. Wie Jared feststellte, setzen Sie unter "Build-Einstellungen" die Option "Installation überspringen" auf "Ja".
  2. Untersuchen Sie unter Build-Phasen den Abschnitt Header kopieren. Wenn Header-Dateien als privat oder öffentlich aufgeführt sind, ziehen Sie sie in den Abschnitt Projekt.
Ryan Grimm
quelle
7
Ich liebe dich wirklich, Alter! : D
Arielcamus
5
Ich habe alle Einstellungen für "Installation überspringen" korrigiert, aber was mir fehlte, war der Abschnitt "Header kopieren". Danke!
Thomas Einwaller
2
Ich benutze three20. In diesem Projekt sind Header-Dateien als privat oder öffentlich aufgeführt. Wenn ich sie jedoch in den Projektabschnitt verschiebe, wird sie nicht kompiliert. Irgendein Vorschlag?
Brise
19
Verwenden Sie Three20 nicht mehr, auch wenn Sie dieses Xcode-Problem behoben haben. Ich meine es ganz ernst!
Adam Eberbach
2
Wenn Sie wie wir zahlreiche Bibliotheksprojekte haben und Schwierigkeiten haben, herauszufinden, welche Skip-Installation der Bibliothek auf Nein gesetzt ist oder welche Header-Dateien das Problem verursachen, versuchen Sie Folgendes: Wählen Sie das Archiv aus und klicken Sie auf die Schaltfläche Verteilen. Wählen Sie die Option "Gebaute Produkte speichern". Klicken Sie auf Weiter und Speichern. Durchsuchen Sie das erstellte Verzeichnis im Finder. Das Unterverzeichnis 'Bibliotheken' identifiziert die Bibliotheken, die Sie benötigen, um die Installation überspringen auf Ja zu setzen. Das usr / local / include identifiziert die Header-Dateien des Täters, die Sie benötigen, um von "Öffentlich" zu "Projekt" zu wechseln.
Sunil Gowda
10

Ich habe Folgendes getan, damit es für mich funktioniert:

  1. Für die statische Bibliothek von Three20 habe ich Cocoapods verwendet , um die Dateien in das Hauptprojekt aufzunehmen. Dadurch wurden alle Probleme beseitigt, die Three20 mir bereitete (und sie sind viele ...). Übrigens habe ich versucht, Three20 durch Nimbus zu ersetzen . Aber Nimbus Es fehlten einige der Funktionen, für die mein Projekt three20 verwendete. Daher war Nimbus nicht hilfreich.
  2. Setzen Sie die Sprunginstallation unter Build-Einstellungen für alle anderen Unterprojekte / statischen Bibliotheken auf Ja und schalten Sie die Kopierheader in den Build-Phasen von öffentlich auf Projekt um
  3. Am wichtigsten ist: Unter den Unterbibliotheken habe ich in den Erstellungsphasen sichergestellt, dass das Ziel für das Kopieren von Dateien von Absolute pathnach geändert wurde products directory.

und das war es!

Tipp: Um eine Vorstellung von den fehlerhaften Dateien zu erhalten, die dazu führen, dass Ihr Archiv eine Archivdatei anstelle einer IPA erstellt, gehen Sie folgendermaßen vor:

  1. Wählen Sie das Archiv aus und klicken Sie auf die Schaltfläche Verteilen.
  2. Wählen Sie die Option "Gebaute Produkte speichern".
  3. Klicken Sie auf Weiter und Speichern.
  4. Durchsuchen Sie das erstellte Verzeichnis im Finder.
  5. Das Unterverzeichnis 'Bibliotheken' identifiziert die Bibliotheken, die Sie benötigen, um die Installation überspringen auf Ja zu setzen.
  6. In einigen Fällen usr/local/includewerden die Header-Dateien des Täters identifiziert, die Sie vom öffentlichen zum Projekt verschieben müssen, oder die Dateien, die Sie vom absoluten Pfad zum Produktverzeichnis ändern müssen. Dieses Verzeichnis (dh usr / local / include) hängt jedoch von der Struktur Ihres Unterbibliotheksverzeichnisses ab
Abbood
quelle
Ich würde Ihnen 10 Sterne geben, die Anzahl der Lösungen, die ich gelesen habe, bis ich die gefunden habe, die geholfen hat. Ich habe einfach auf die Dateien geklickt, die ich in Schritt 6 gefunden habe, und sie im Zielmitgliedschaftsbereich von öffentlich bis projekt markiert, ohne dass etwas erforderlich ist.
Cristi Băluță
froh, dass ich helfen konnte! Der Grund, warum ich es geschrieben habe, war, dass b / ci
durchgemacht hat,
Kann jemand bitte Schritt 6 erklären? Ich verstehe nicht, was "usr / local / include identifiziert die Täter-Header-Dateien" bedeutet und wo / wie ich diese Dateien überprüfen soll
Andrei F
@ CristiBăluță Wie genau haben Sie die Dateien gefunden und wo in den Einstellungen / Menüs? Ich habe das gleiche Problem mit XCode 11.2.1 und ich habe nicht viel Erfahrung mit xcode. Danke dir.
Andrei F
Was ich gefunden habe ist, dass / usr / local / include ein Ordner im Archiv ist (zusammen mit dem Bibliotheksordner), aber mein generisches Archiv hat keinen davon
Andrei F
1

Ich hatte eine Phase zum Erstellen von Kopierdateien, die ich vergessen hatte (einige Schriftarten wurden in ~ / Library / Fonts kopiert). Nach dem Entfernen dieser Erstellungsphase hat es gut funktioniert.

Wenn keine der oben genannten Antworten das Problem behebt, empfehle ich, das Archiv in den Finder zu exportieren und einen Blick darauf zu werfen, was sich außerhalb des .app-Bundles befindet.

Bearbeiten: siehe https://github.com/RestKit/RestKit/wiki/Xcode-4-Archiving-Issue:--'Does-not-contain-a-single-bundle '

auco
quelle
0

Ich hatte auch das gleiche Problem "[Projektname] enthält keine Einzelbündelanwendung oder enthält mehrere Produkte. Bitte wählen Sie ein anderes Archiv aus oder passen Sie Ihr Schema an, um eine Einzelbündelanwendung zu erstellen." nach dem Upgrade auf xcode5.

Das Problem war, dass einige Felder in meinen Build-Einstellungen für 'Release' leer waren. Ich denke, xcode4 hat automatisch auf die Debug-Einstellung umgeschaltet.

anwyays - mein Fix bestand darin, alle leeren "Release" -Einstellungen zu finden und auf die Debug-Einstellung zu setzen. Insbesondere war es die Dateieinstellung Info.plist.

Roocell
quelle