Xcode-Warnung: "Mehrere Build-Befehle für die Ausgabedatei"


494

Ich erhalte folgende Fehlermeldung:

[WARNUNG] Warnung: Mehrere Build-Befehle für die Ausgabedatei /Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png

[WARN] Warnung: Mehrere Build-Befehle für die Ausgabedatei /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

[WARNUNG] Warnung: Mehrere Build-Befehle für die Ausgabedatei /Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png

Aber ich habe Xcode überprüft und sehe überhaupt keine Duplikate solcher Dateien. Wie dieser Beitrag in den Apple Mailing-Listen sagt, gibt es keine Duplikate.

Antworten:


809

Wählen Sie im Projektnavigator Ihre Xcode-Projektdatei aus. Dies zeigt Ihnen die Projekteinstellungen sowie die Ziele im Projekt. Schauen Sie in der Erstellungsphase "Bundle-Ressourcen kopieren" nach. Sie sollten die fehlerhaften Dateien in dieser Liste zweimal finden. Löschen Sie die doppelte Referenz.

Xcode beschwert sich, dass Sie zweimal versuchen, dieselbe Datei mit Ihrer Anwendung zu bündeln.


1
Passiert mir, wenn ich einige Assets aus dem Build-Ordner gelöscht habe (mit Finder). Assets, die durch gleichnamige Assets ersetzt wurden, werden durch Ziehen in XCode mit den Optionen "Zum Ziel hinzufügen" gezogen. Es scheint, dass XCode nicht mehr synchron ist,
wenn

1
Ich wollte noch etwas hinzufügen. Wenn Sie irgendwie eine Menge doppelter Referenzen haben (wie ich), können Sie einfach auf "Einstellungen überprüfen" klicken und es werden automatisch doppelte Referenzen gelöscht. Viel einfacher als sie manuell zu suchen
Jon Mattingly

1
Ich hatte ein ähnliches Problem. Diese Antwort war die nächste. Die Datei <projName> .xcodeproj / project.pbxproj enthielt doppelte Einträge, obwohl das Projekt die Dateien nur einmal zeigte. Dies war ein Verschmelzungsproblem. Bearbeitung mit vi hat den Trick gemacht :) Danke, dass du mich in die richtige Richtung gezeigt
hast

11
Wenn Sie in der Phase "Bundle-Ressourcen kopieren" über eine große Anzahl duplizierter Dateien verfügen, können Sie unten auf dieser Seite auf "Einstellungen überprüfen" klicken. XCode fordert Sie zu den Duplikaten auf und entfernt alle Dateien, wenn Sie auf ". Änderungen vornehmen '. Verdammt viel schneller als einzeln nach ihnen zu suchen.
Yeti42

1
Ich hatte ein ähnliches Problem mit SpriteBuilder-Vorlagen, als ich das "Published-iOS" erneut zum Projekt hinzufügte. Es stellte sich heraus, dass es sich um eine "Ordnerreferenz" und nicht um eine Gruppe handeln soll, und dass der gesamte Ordner zu den "Copy Bundle Resources" hinzugefügt wurde. Selbst wenn die einzelne Ressource nicht in dieser Liste angezeigt wird, stellen Sie sicher, dass sie nicht aus einem Ordner hinzugefügt wird.
Samkass

127

Dies kann leicht verursacht werden, wenn Sie git-basierte Teilprojekte hinzufügen. Xcode ist nicht intelligent genug, um den Unterordner .git zu ignorieren, obwohl Sie ihn im Finder nicht sehen können. Daher ist es sehr verwirrend, dass mehrere Dateien mit den Namen "master" oder "exclude" (Standard-Git-Repo-Dateien) vorhanden sind. Gehen Sie mit Xcode4 zum Projekt (Stammverzeichnis des linken Baums), klicken Sie auf Ihr App-Ziel und erweitern Sie "Bundle-Ressourcen kopieren". Entfernen Sie dann alle Verweise auf .git. Sie sollten sie sowieso nicht in Ihre App einbinden müssen.


43
Ich habe eine Sekunde lang
herumgefummelt

2
Ich hatte mehrere Dateien mit demselben Namen (aber in verschiedenen Verzeichnissen) in meinem Xcode-Projekt. Aus Versehen hatte einer von beiden beide im Schritt "Bundle-Ressourcen kopieren", was dazu führen würde, dass einer von ihnen im resultierenden App-Bundle überschrieben wird. Entfernen Sie einfach einen von ihnen.
BastiBen

112

Die Antwort darauf ist eigentlich ganz einfach.

Suchen Sie in Ihrem Xcode-Projekt nach den Dateien, die die Warnung auslösen, und löschen Sie einfach eine davon.

Xcode zeigt nur eine Referenz dieser Datei in den Suchergebnissen an, aber hören Sie hier nicht auf, sondern löschen Sie sie. (Es ist besser, eine Sicherungskopie Ihrer Projektdatei zu erstellen, bevor Sie sie löschen.)

Erstellen Sie nun das Projekt erneut. Die Warnung sollte jetzt verschwinden. (Diese Antwort gilt für eine frühere Version von xcode)


Die Dateien werden jedoch nicht mehr in den Gruppen und Dateien von XCode angezeigt. Was ist damit los?
Tejaswi Yerukalapudi

1
Wenn Sie weiterhin Probleme damit haben, entfernen Sie einfach alle Dateien von Xcode (löschen Sie sie nicht auf der Festplatte). Ziehen Sie sie dann alle wieder hinein. Wenn Sie danach immer noch Probleme haben, haben Sie tatsächlich einige Ressourcen mit demselben Namen (möglicherweise in verschiedenen Ordnern) - suchen und umbenennen / löschen. Die Xcode-Ausgabe wird in einen flachen Ordner verschoben, sodass die Verzeichnisstruktur ignoriert wird.
n13

52

Dies ist kein Xcode-Fehler, obwohl die Warnmeldung nicht hilfreich genug ist, um die wahre Ursache zu beschreiben.

Diese Fehlermeldung tritt auf, wenn Ihr Projekt mehrere Dateien mit demselben Namen enthält. Sie müssen nur die Dateien mit doppelten Namen löschen oder umbenennen, und das Problem ist behoben.


1
Ja, das ist die richtige Antwort. Und die Situation kann leicht eintreten, wenn Sie Ressourcendateien haben, z. B. PNGs mit demselben Namen, aber in separaten Verzeichnissen in Ihrem Dateisystem. Während des Erstellungsprozesses werden alle in ein Verzeichnis kopiert, nämlich in das App-Bundle.
Brynjar

@Brynjar Gibt es eine Möglichkeit, Bilder mit demselben Namen zuzulassen? oder um zu verhindern, dass die Bilder gebündelt werden?
Andy

Eigentlich habe ich herausgefunden, dass Sie Ordnerreferenzen erstellen können, um die Bündelung zu vermeiden.
Andy

Hier ist eine Möglichkeit, Dateien mit doppeltem Namen zu finden, unabhängig vom Verzeichnis find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sort. Dies hat mein Problem jedoch nicht gelöst
William Entriken

26

Dies geschieht, wenn Sie zwei Dateien mit demselben Namen im Projekt haben. Obwohl sich Dateien beim Kompilieren des Projekts in XCode in Gruppen befinden, befinden sich alle Dateien im selben Verzeichnis. Mit anderen Worten, wenn Sie /group1/image.jpg und /group2/image.jpg haben, enthält das kompilierte Projekt nur eine der beiden image.jpg-Dateien.


17

Wie bereits erwähnt, tritt dieses Problem auf, wenn Sie mehrere Dateien mit demselben Namen, jedoch in verschiedenen Gruppen (gelbe Ordner) im Projektnavigator haben. In meinem Fall war dies beabsichtigt, da ich mehrere Unterverzeichnisse mit jeweils einer "Vorschau.jpg" hatte, die ich in das App-Bundle kopieren wollte:

Gruppenreferenzen

In dieser Situation müssen Sie sicherstellen, dass Xcode die Verzeichnisreferenz (blaues Ordnersymbol) erkennt , nicht nur die Gruppen.

Entfernen Sie die fehlerhaften Dateien und wählen Sie "Referenz entfernen" (damit wir sie nicht vollständig löschen):

Gruppenreferenzen entfernen


Fügen Sie sie erneut zum Projekt hinzu, indem Sie sie zurück in den Projektnavigator ziehen. Wählen Sie im angezeigten Dialogfeld "Ordnerreferenzen für hinzugefügte Ordner erstellen":

als Ordnerreferenzen hinzufügen


Beachten Sie, dass die Dateien jetzt im Projektnavigator ein blaues Ordnersymbol haben:

Ordnerreferenzen


Wenn Sie jetzt im Abschnitt "Bundle-Ressourcen kopieren" der Erstellungsphasen des Ziels nachsehen, werden Sie feststellen, dass für den gesamten Ordner ein einzelner Eintrag vorhanden ist und nicht für jedes Element im Verzeichnis Einträge. Der Compiler wird sich nicht über mehrere Build-Befehle für diese Dateien beschweren.


15

Dies ist kein Fehler. Xcode-Assistenten können Ihnen helfen. Wählen Sie das Ziel links im Projektnavigator aus. Klicken Sie unten in den Einstellungen auf "Einstellungen überprüfen". Xcode überprüft die Einstellungen und entfernt nach Möglichkeit Duplikate.


14

Eine andere Version dieser Situation kann auftreten, wenn sich in der Erstellungsphase der Header Duplikate befinden.

um dies zu beheben ...

  1. Gehen Sie zu Ihrem Projektziel
  2. wählen Build Phases
  3. Wählen Sie die HeadersErstellungsphase
  4. Geben Sie den in der Warnung angegebenen Namen ein
  5. Beachten Sie die zwei (oder mehr) Elemente
  6. Finde die +|-Kästchen in der unteren linken Ecke
  7. Wählen Sie eines der Elemente aus und klicken Sie auf die -Schaltfläche

7

In meinem Fall wurde das Problem durch den gleichen Namen von Ziel und Ordner innerhalb einer Gruppe verursacht.

Benennen Sie einfach die in Konflikt stehende Datei oder den Ordner um, um das Problem zu beheben.


6

Ich habe dafür eine ziemlich einfache Lösung gefunden:

  1. Wählen Sie im Projektnavigator die Datei aus, die das Problem verursacht
  2. Deaktivieren Sie die Zielmitgliedschaft im Dateiinspektor
  3. Erstellen Sie das Projekt
  4. Überprüfen Sie die Zielmitgliedschaft für die Datei erneut

Die Warnung ist weg! Überprüfen Sie dieses Bild als Referenz.

Geben Sie hier die Bildbeschreibung ein


5

Ich bin mir ziemlich sicher, dass dies durch einen XCode 4-Fehler verursacht werden kann, zumindest in den Fällen, in denen ich darauf gestoßen bin.

Dies geschieht, wenn Sie dem Projekt mehrere sprachabhängige Dateien gleichzeitig hinzufügen. Ich habe das herausgefunden, indem ich mir die Git-Unterschiede angesehen habe. Ich habe nichts im Commit getan, als einige neue lokalisierte NIB-Dateien hinzuzufügen. Rückblickend auf den Unterschied in der Datei project.pbxproj wurden jedoch eine Reihe neuer doppelter Verweise für Dateien angezeigt, die bereits zuvor im Projekt enthalten waren. Die Dateien, die es auch tat, schienen mir zufällig.

Ich habe genau dasselbe Verhalten mehrmals reproduziert.

Das Löschen dieser Dateien aus dem Projekt behebt das Problem nicht, da nur die ursprüngliche Referenz gelöscht und die Duplikate belassen werden. Die einzige Möglichkeit, dies zu beheben, besteht darin, ein Commit zurückzugehen und von vorne zu beginnen oder die Projektdatei von Hand zu bearbeiten. Dies ist eine sehr gute Möglichkeit, sie noch weiter zu vermasseln, da es schwierig ist zu sagen, welche Duplikate entfernt werden müssen und Sie dies tun müssen an einer Menge verschiedener Orte.

Xcode 4 ist nur eine große Enttäuschung für mich.


Sieht so aus, als wäre dies in XCode 4.2 behoben. In früheren Versionen können Sie diesen Fehler vermeiden, indem Sie zuerst die Datei, für die Sie Lokalisierungen hinzufügen möchten, in eine eigene "Gruppe" (virtueller Ordner im Projekt) einfügen. Sobald Sie mit dem Hinzufügen von Lokalisierungen fertig sind, können Sie diese wieder an ihren ursprünglichen Ort zurücksetzen und die von Ihnen erstellte temporäre Gruppe löschen.
Steve

Dies ist kein Fehler. Dies liegt daran, dass Ihr Projekt mehr als eine Datei mit demselben Namen enthält.
Todd Hopkinson

1
Wenn Sie eine Datei lokalisieren, sollten Sie für jede Lokalisierung denselben Dateinamen haben, außer in verschiedenen Verzeichnissen. Dies war in der Tat ein Fehler.
Steve

4

Dies geschieht, weil ur "no.png" "d.png" und "n.png" in Ressourcen dupliziert werden. Suchen Sie einfach nach gelöschten Dateien löschen und löschen.


3

Der Fehler scheint aufzutreten, wenn Sie mehr als eine Referenz derselben Datei haben. Ich hatte 2 gleichnamige Dateien und bekam diesen Fehler. Wenn ich einen von ihnen lösche, verschwindet der Fehler.


2

Noch eine Variation zu diesem Thema. Ich hatte die gleiche Nachricht erhalten, keine der zuvor vorgeschlagenen Lösungen löste das Problem (ich hatte definitiv nur eine Kopie der fehlerhaften Datei zum Beispiel).

Meine Lösung bestand darin, die Datei project.pbxproj in einem Texteditor zu bearbeiten (nachdem ich XCode beendet und die Datei natürlich gesichert hatte) und alle Verweise auf die fehlerhafte Datei zu entfernen. Nachdem ich XCode erneut gestartet hatte, fügte ich die Datei manuell wieder in das Projekt ein und alles war in Ordnung.

(Mein Verdacht ist, dass mir dieses Problem aufgrund eines Handbuchs passiert ist, dh: Nicht-XCode, Zusammenführen der Projektdatei.)


1

Öffnen Sie den Ordner "Frameworks" in Ihrem Projekt und stellen Sie sicher, dass sich nur Frameworks darin befinden. Ich habe versehentlich den gesamten Entwicklerordner hinzugefügt!


1

Ich hatte vor Minuten das gleiche Problem. Ich habe erwähnt, dass das Ändern des Bereitstellungsziels mein Problem behoben hat.


1

Für mich wurde das Ziel> Build-Einstellungen> Verpackung> Produktname auf den gleichen Wert gesetzt wie ein anderer Wert, auf den in einer .plist-Datei verwiesen wird, die für meine App benutzerdefiniert war. Aufgrund unseres Erstellungsprozesses werden möglicherweise doppelte Dateien erstellt.


1
Das war das Problem für mich, danke!
Leon

0

Swift 3 : (aber auch die älteren Versionen) Es passiert, wenn ich Assets mit Duplikaten habe. Benennen Sie einfach die Dateien mit diesem Problem um und alles läuft gut.

Dies kann auch passieren, wenn Sie ein Assets.xcassetsDuplikat erstellt und die Duplikate mit neuen Namen umbenannt haben. Nach einiger Zeit haben Sie es vergessen und entfernt, um die Ordnerreferenzen hinzuzufügen, aber dieses kehrt zum Problem der Duplikatdateien zurück.


0

Ein einfacher Weg ist,

  • Gehen Sie zum App-Ziel
  • Gehen Sie zu Phasen erstellen
  • Ausgabedateien
  • Löschen Sie den Pfad der ausgegebenen Dateien und erstellen Sie das Projekt. Es wird erfolgreich ausgeführt.

0

Der Schlüssel war zu tun pod deintegrateund zu rm *.workspacearchivieren! Was für eine Zeitverschwendung !


0

React-Native-Benutzer. gehe zu Datei -> Arbeitsbereichseinstellungen -> Build-System -> ändere es in Legacy-Build-System. und es sollte jetzt gut bauen. React-Native ist noch nicht mit dem neuen Dateisystem kompatibel.


0

Kommentieren use_frameworks! in PodFile hat für mich gearbeitet.

#use_frameworks!

Hinweis: Dies geschah unter XCode 10.1, Pod-Version 1.8.4


-1

Obwohl ich mir sicher bin, dass es einen besseren Weg gibt, dauerte das Nuking nur weniger als 60 Sekunden und war das einzige, was ich finden konnte, dass es funktionierte.

  1. Ziehen Sie das Repo in den Papierkorb.
  2. Klonen Sie Ihr Repo erneut.
  3. Richten Sie Ihr Repo mit korrekter Fernverfolgung ein. git remote add <url.git>, odergit remote set-url <url.git>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.