web-dev-qa-db-de.com

Xcode 4-Projekt: Dienstprogramm zum Aufräumen der pbxproj-Datei?

Ich habe ein Xcode 4-Projekt mit 2 Zielen, eines für das iPhone und eines für das iPad. Wenn ich auf das iPad-Ziel klicke und versuche, auf Einstellungen erstellen zu gehen, stürzt Xcode 4 ab:

Stieß auf mehrere Behauptungen. Die erste Behauptung lautete: ASSERTION FAILURE in /SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-269/Xcode3Sources/XcodeIDE/Frameworks/DevToolsBase/pbxcore/FileTypes/../PBXFileType.m:594 Null

Offensichtlich hat die pbxproj-Datei irgendwo eine schlechte Referenz - wahrscheinlich verursacht durch die vielen manuellen Zusammenführungen, zu denen ich durch git gezwungen wurde. Gibt es eine Möglichkeit, die pbxproj-Datei zu bereinigen, damit sie wieder ordnungsgemäß funktioniert, oder festzustellen, welche Zeile das Problem verursacht? Ich würde es wirklich wirklich vorziehen, das Projekt nicht von Grund auf neu erstellen zu müssen.

22
memmons

Ich habe die Methode von Gorbster ohne Erfolg ausprobiert (obwohl sie in der Vergangenheit ähnliche Probleme für mich gelöst hat).

Ich ging in meine project.pbxproj-Datei (innerhalb des .xcodeproj-Pakets für das Projekt) und fand zwei Zeilen, die etwas verdächtig aussahen. Beide waren:

53A45F8F138FE6F40077017F /* (null) in Resources */ = {isa = PBXBuildFile; };

Ich habe die Zeilen gelöscht und voilà: Ich kann wieder auf meine Build-Einstellungen für dieses Ziel zugreifen.

Keine Ahnung, wie sie überhaupt reingekommen sind. Ich würde etwas mit einer fehlerhaften Zusammenführung unter SVN zu tun haben.

21
Ben Mosher

Ich bin heute Morgen auf dasselbe Problem gestoßen, nachdem ich die Fusion eines Kollegen gezogen habe.

Ich konnte dies folgendermaßen beheben:

  1. Schließen Sie Xcode
  2. Öffnen Sie das Paket .xcodeproj im Finder
  3. Löschen Sie die Datei project.xcworkspace file/package
  4. Öffnen Sie den Ordner xcuserdata und löschen Sie Ihren benutzerspezifischen Ordner .xcuserdatad .
  5. Öffnen Sie Xcode und das Projekt erneut

Ich habe einige geringfügige Benutzervorgaben verloren (Datei- und Registerkartenverlauf usw.), kann jetzt jedoch problemlos auf alle (9) meiner Ziele klicken. Es stellte sich heraus, dass mein Kollege eine frühere Version von Xcode verwendet hatte, aber ich bin mir nicht sicher, ob dies zum Absturz von IDE beigetragen hat.

15
gorbster

Ben Mosher fand die Lösung. Und ja, es liegt am SVN-Merge-Problem.

Da wir im Team mit SVN arbeiten, tritt der Fehler häufig auf. Deshalb habe ich ein Bash-Skript geschrieben:

#!/bin/bash
sed "/(null) in/d" project.pbxproj > tmp_project.pbxproj
mv tmp_project.pbxproj project.pbxproj
9
Martin Magakian

Versuchen Sie die folgenden Schritte, während Ihr XCode geschlossen ist.

  1. Wechseln Sie zu Ihrer {YOUR_PROJECT} .xcodeproj Datei im Finder.

  2. Klicken Sie mit der rechten Maustaste auf die Datei {YOUR_PROJECT} .xcodeproj .

  3. Wählen Sie Paketinhalt anzeigen ..., um den Inhalt in einem anderen Finder-Bildschirm anzuzeigen.

  4. Öffnen Sie die Datei project.pbxproj und suchen Sie nach allen Zeilen mit der Zeichenfolge " (null) in "

  5. Löschen Sie alle Zeilen mit (null) in ... ohne Bedenken .... sicher löschen.

  6. Speichern Sie Ihre Datei.

Öffnen Sie nun Ihr Projekt mit XCode und versuchen Sie, die Registerkarte Build Settings zu öffnen ... hoffentlich ist Ihr Problem gelöst.

Danke, Mohamed.

6
Mohamed A.Karim

Klicken Sie mit der rechten Maustaste auf Ihre .xcodeproj-Datei und wählen Sie "Paketinhalt anzeigen".

Öffnen Sie dann die Datei project.pbxproj mit TextEdit und duplizieren Sie sie.

Speichern Sie doppelte Dateien überall mit demselben Namen und derselben Erweiterung. (project.pbxproj)

Und durch die alte Datei ersetzen.

0
Batu

Falls Sie auch versucht haben, die (Null-) Referenzzeilen zu entfernen und den benutzerspezifischen .xcuserdatad -Ordner zu löschen, und diese nicht funktionierten, finden Sie hier eine mögliche Lösung. Zu Ihrer Information ... Dies wurde auf Xcode 7.3.1 erlebt.

Hier ist das Szenario, mit dem ich konfrontiert war:

Ich habe dieses Problem festgestellt, das durch "Doppelzweige" in einem Git-Repository ausgelöst wurde ... (dh ein Zweig BRANCH_A ist ein Entwicklungszweig mit einigen Funktionen, die nicht zur Veröffentlichung anstehen, und ein anderer Zweig mit denselben Commits, außer den neuen Funktionen.) Nennen Sie es BRANCH_B).

Der Workflow für die Entwicklung sieht folgendermaßen aus: Beginnen Sie mit BRANCH_B, erstellen Sie einen Festschreibungszweig CHANGE_C, nehmen Sie Änderungen und Festschreibungen vor, checken Sie BRANCH_A aus, erstellen Sie einen Festschreibungszweig und wählen Sie dann die Änderungen aus CHANGE_C aus. BRANCH_A verfolgt BRANCH_B mit seinen zusätzlichen Feature-Dateien auf diese Weise.

In meinem Fall (aus irgendeinem Grund wurde die Projektdatei für BRANCH_B beschädigt, als auf Änderungen von Mitarbeitern von der von BRANCH_B überwachten Remote-Site aus zurückgegriffen wurde).

In diesem Fall besteht die Lösung darin, eine Kopie der Projektdatei für BRANCH_A zu speichern (die fehlerfrei ist und kompiliert wird), dann BRANCH_B auszuchecken und die Projektdatei durch die Kopie zu ersetzen.

Zunächst wird es nicht kompiliert, bis alle Verweise auf die Feature-Dateien (aus BRANCH_A) aus Target's Build Phases> Compile Sources entfernt wurden.

Funktioniert super.

0
vmanjz