it-swarm.com.de

Integrierte Binärdateien (andere Projekte) können nicht zu Projektabhängigkeiten in XCode hinzugefügt werden

Ich habe einen XCode-Arbeitsbereich, der mit XCode 6.0.1 erstellt wurde. Es besteht aus 2 (Swift) Bibliotheken und einer iOS-App (Swift), die von diesen 2 Bibliotheken abhängt. Ich hatte ein stabiles Setup, mit dem ich die iOS-App sowohl auf dem iPhone als auch auf den Simulatoren ausführen konnte: Die beiden Bibliotheksprojekte wurden als Embedded Binaries (siehe Bild) der App hinzugefügt.

Jetzt habe ich XCode 6.1. Vor kurzem habe ich den DerivedData-Ordner im ~/Library/Developer/Xcode-Ordner gelöscht, während XCode ausgeführt wurde. Danach funktionierte mein Arbeitsbereich nicht mehr - die iOS-App konnte nicht kompiliert werden und ich erhielt einen Linker-Fehler, der besagte, dass die Bibliotheksprojekte nicht gefunden werden könnten.

Ich habe versucht, das Problem zu lösen, indem ich meine beiden Bibliotheken aus Embedded Binaries des App-Projekts entfernte. Ich kann sie nicht wieder hinzufügen. Durch Klicken auf die Schaltfläche + unter Embedded Binaries in den Projekteinstellungen werden Workspace-Projekte korrekt angezeigt. Wenn Sie jedoch mein Bibliotheksprojekt auswählen und hinzufügen, werden diese nicht zur Liste der Embedded Binaries hinzugefügt. Ich habe den Linker-Fehler durch Erstellen eines neuen Arbeitsbereichs gelöst. Die App kompiliert aber wie sie die Bibliotheken verknüpft, ist mir ein Rätsel: Sie sind nicht in Embedded Binaries oder Linked Frameworks und Bibliotheken nicht im Frameworks-Suchpfad . Es scheint keinen Zusammenhang zwischen der App und den Bibliotheken zu geben, die sie benötigt (und offensichtlich beim Kompilieren vorhanden ist), es sei denn, Bibliotheksprojekte befinden sich im selben Arbeitsbereich.

Warum kann ich keine Bibliotheksprojekte zu Embedded Binaries hinzufügen? Ist es in XCode 6.1 normal, dass Abhängigkeitsprojekte nur kompiliert werden und in eine App eingebettet werden, ohne irgendwo aufgelistet oder verlinkt zu sein?

enter image description here

17
Rasto

Dies ist eine Zusammenfassung meiner Antwort auf die Frage Xcode fügt nach dem Löschen von "DerivedData" , nicht "Embedded Binary" hinzu. Weitere Informationen und Zusammenhänge finden Sie in der ursprünglichen Frage und Antwort :

  1. Entfernen Sie alle Framework-Projekte aus dem Arbeitsbereich
  2. Führe einen "Clean Build" durch und/oder entferne die "DerivedData"
  3. Fügen Sie das Projekt wieder in den Arbeitsbereich ein
  4. Erstellen Sie das Projekt (möglicherweise optional)
  5. Klicken Sie auf der Registerkarte Allgemein des App-Ziels unter "Verknüpfte Frameworks und Bibliotheken" auf das +, und wählen Sie das Framework aus.
  6. Im Simulator erstellen und ausführen (es sollten keine Probleme beim Erstellen oder Ausführen auftreten)
  7. Für das Gerät erstellen und ausführen (dies kann zu einem Absturz führen, da das Framework nicht ordnungsgemäß verknüpft ist. Ignorieren Sie diesen Absturz.)
  8. Klicken Sie auf das + unter "Embedded Binaries" , und wählen Sie das Framework aus. Dies sollte es zum Projekt hinzufügen (mögliches Duplikat unter "Verknüpfte Frameworks und Bibliotheken")
  9. Wiederholen Sie dies für alle erforderlichen Frameworks
  10. Sobald das Erstellen und Ausführen (auf dem Gerät) bestätigt wurde, können Sie alle doppelten (und/oder roten) Frameworks im Projektnavigator oder auf der Registerkarte Allgemein entfernen
13
rjstelling

Ok, ich bin auf das gleiche Problem gestoßen wie Sie. Nach dem Löschen der abgeleiteten Daten konnte ich meine Binärdateien nicht erneut verknüpfen. Ich denke, der Grund ist, dass die abgeleiteten Daten darin liegen, wo die Binärdateien in Ihrem Projekt geschrieben und damit verknüpft werden. 

Was ich zu lösen tat, war, mein Framework als Build-Ziel auszuwählen. Nach dem Bau wurde das Rahmenziel von rot zu schwarz geändert. Ich kann in Ihrem Screenshot sehen, dass es rot ist, was bedeutet, dass es nicht in eine Binärdatei kompiliert und auf die Festplatte geschrieben wurde. 

Nachdem ich dies getan hatte, konnte ich das Framework erneut mit meinem Projekt verknüpfen, da es auf der Festplatte einen Verweis darauf gab. Hoffe das hilft!

5
Hobbes the Tige

So habe ich das Problem gelöst:

  1. Baue das Gerüst auf. 

  2. Öffnen Sie den Build-Ordner und ziehen Sie das erstellte Framework in das App-Projekt (damit der Pfad zu DerivedData verwendet wird).

  3. Fügen Sie das Framework der Liste der eingebetteten Frameworks hinzu.

  4. Führen Sie im Finder in der Xcodeproj-Datei der App einen Inhalt anzeigen aus, und öffnen Sie anschließend project.pbxproj in Ihrem bevorzugten Texteditor.

  5. Suchen Sie die Zeile mit dem langen DerivedData-Pfad. Ändern Sie es so, dass kein Name vorhanden ist, der Pfad der Name des Frameworks ist und der Quellbaum BUILT_PRODUCTS_DIR ist

Xcode sollte die Änderung feststellen und die Bibliothek im App-Projekt wird schwarz statt rot sein und wird nun ordnungsgemäß erstellt und ausgeführt.

1
Mark Lilback

Bereinigen Sie Ihre Projekte und erstellen Sie zuerst Ihren Rahmen. Danach können Sie es einbetten.

1
NumeroUno

Ich habe ein sehr ähnliches Problem und habe es letzte Nacht behoben. Ich beschloss, auf diesen Thread zurückzukommen und meinen Workaround anzubieten, da die Lösung von rjstelling oben meinem Fall nicht geholfen hat.

Ich habe einen Arbeitsbereich, der zwei Frameworks und eine Anwendung enthält. Die App nutzte beide Frameworks für eine Weile glücklich, bis ich von einem mysteriösen Compiler erfaßt wurde, bei dem sie beschloss, durch Hinzufügen eines Eigenschaftszugriffs auf eine Instanzvariable namens "Cube" eines Klassentyps, der in einem der Frameworks gefunden wurde, Zugriff zu erhalten zu "_cube" unmöglich (sich zu beklagen, wurde nicht erklärt, obwohl es zuvor in einer Setter-Methode gearbeitet hatte).

Lange Rede, kurz nach einem sauberen, irgendwie hat das Workspace/App-Projekt den Überblick über das eingebettete Framework meines iOS 8+ -Projekts verloren. Das Entfernen des eingebetteten Frameworks war der letzte Strohhalm in dieser Versagenslinie, sodass mein Projekt keine Frameworks mehr für die Einbettung auswählen konnte.

Durch das Zurücksetzen des Projekts und des Arbeitsbereichs auf eine frühere Version wurde das Voodoo nicht entfernt.

Am Ende fügte ich die einzubettenden Framework-Projekte (als Dateien) zum Haupt-App-Projekt hinzu und führte Zielabhängigkeiten in den Frameworks ein.

Ich konnte dann die Frameworks neu einbetten und verknüpfen.

Beim _cube-Ding musste ich einen Getter für die Eigenschaft angeben und @synthesize die Eigenschaft unter einem anderen Namen erstellen. Ich habe keine Erklärung für diese.