Verknüpfen einer statischen Bibliothek mit einem iOS-Projekt in Xcode 4

76

Ich habe ein Projekt ( AQGridView), das zu einer statischen Bibliothek kompiliert wird, aber ich kann es scheinbar nicht zu meinem Projekt hinzufügen.

Durch Ziehen des Projekts in mein Projekt wird ein Arbeitsbereich erstellt. Wenn ich versuche, die libAQGridView.aDatei aus dem DerivedDataVerzeichnis zu verknüpfen, wird sie nicht als Bibliothek erkannt. Ich bin mir nicht sicher, was ich falsch mache.

Das ist das AQGridViewProjekt. Weiß jemand genau, wie man es in einem Xcode 4-Projekt verwendet?

Matt Hudson
quelle
1
Sie haben mich nach 29 Stimmen 2 Jahre später abgelehnt? Und obendrein macht die Aussage, die Sie gerade gemacht haben, keinen Sinn.
Matt Hudson
Kann nicht besser erklärt werden als hier: Verknüpfen statischer Bibliotheken
Subham93

Antworten:

94

Ich mache das wie folgt:

  1. Ziehen Sie das statische Bibliotheksprojekt hinein. Wenn Sie das statische Bibliotheksprojekt in Xcode geöffnet haben, schließen Sie es jetzt.
  2. Wählen Sie das Hauptprojekt im Projektnavigator (dem Projekt, zu dem ich die statische Bibliothek hinzufüge) und im Editor unter der Überschrift ZIELE in der linken Spalte das Ziel meines Hauptprojekts aus und navigieren Sie zur Registerkarte Phasen erstellen.
  3. Klicken Sie auf "+" für Zielabhängigkeiten und fügen Sie die Zielabhängigkeit des Bibliothekssymbols aus dem hinzugefügten statischen Bibliotheksprojekt hinzu.
  4. Klicken Sie auf das "+" für "Binär mit Bibliotheken verknüpfen" und fügen Sie das Bibliothekssymbol hinzu, das sich unter dem Ordner "Arbeitsbereich" befindet.
  5. Es kann auch erforderlich sein, einen Header-Suchpfad für die Header des statischen Bibliotheksprojekts einzugeben, wenn die Header auf diese Weise im statischen Bibliotheksprojekt selbst verknüpft sind.

Wenn Sie das statische Bibliotheksprojekt im Projektnavigator des Hauptprojekts nicht als unter dem Hauptprojekt verschachtelt sehen, ist der wahrscheinlichste Grund dafür, dass das Xcode-Projekt der statischen Bibliothek noch geöffnet ist. Beenden Sie Xcode und öffnen Sie das Hauptprojekt, in dem sich das verschachtelte statische Bibliotheksprojekt befindet, ohne das ursprüngliche statische Bibliotheksprojekt selbst zu öffnen. Sie sollten es als verschachteltes Projekt in Ihrem Hauptprojekt sehen.

Halle
quelle
17
Dies scheint zu funktionieren, aber aus irgendeinem Grund wird die Bibliothek nicht unter Zielabhängigkeiten angezeigt. Es wird unter Binär mit Bibliotheken verknüpfen angezeigt, jedoch nicht unter Zielabhängigkeiten. Ich kann nicht herausfinden, warum es nicht angezeigt wird.
Matt Hudson
2
Es stellt sich heraus, dass das Projekt verschachtelt sein muss. Dadurch wird die angezeigte Zielabhängigkeit behoben.
Matt Hudson
1
Das Hauptprojekt, das mit der Bibliothek verknüpft werden muss, und der Pfad zu dem Ordner, der die Header enthält (oder der Pfad zum Ordner enthält dann die gesamte Quelle zur Bibliothek, wenn Sie das Kontrollkästchen für die Rekursion aktivieren möchten).
Halle
1
Wohin soll die statische Bibliothek gezogen werden? Es gibt keine Panels in meinem Projekt, die ein gezogenes Objekt akzeptieren ...
zakdances
2
Sie ziehen keine statische Bibliothek, sondern das blaue Hauptsymbol des Xcode-Projekts der statischen Bibliothek im Projektnavigatorfenster oder das Finder-Symbol auf das blaue Hauptszenussymbol im Projektnavigatorfenster des Xcode-Projekts, zu dem Sie es hinzufügen.
Halle
15

Xcode-Menü> Ansicht> Dienstprogramme> Dateiinspektor

Wählen Sie die statische Bibliotheksdatei aus und setzen Sie 'Dateityp' als 'Mach-O-Objektcode' unter 'Identität und Typ'.

Kazuki Sakamoto
quelle
Wow, was für eine seltsame Lösung, aber total für mich funktioniert. Vielen Dank! Mein Anwendungsfall war das Kopieren einer .astatischen Bibliothek in einen FrameworksBuild und das Verknüpfen mit dieser Bibliothek , wodurch nach einer gewissen Neuordnung meines Projekts Bibliotheksfehler "Bild nicht gefunden" ausgelöst wurden. Dank des oben Gesagten nicht mehr.
Markus Amalthea Magnuson
5

Arbeitsbereiche sollen dies einfacher machen, aber ich weiß nicht, dass sie es tun. So erstelle ich einen Arbeitsbereich, füge mein Hauptprojekt hinzu und füge mein Bibliotheksprojekt hinzu. Gehen Sie dann in die Erstellungsphasen des Hauptprojekts und fügen Sie die Bibliothek im Abschnitt "Binärdatei mit Bibliotheken verknüpfen" hinzu und fügen Sie die Bibliothek hinzu. Das sollte alles sein, was nötig ist, zumindest ist das meine Lektüre, aber es ist nicht so. Ich gehe in die Xcode-Einstellungen und dann in den Bereich Quellbäume. Fügen Sie einen Quellbaum hinzu, der auf die Header Ihrer statischen Bibliothek verweist, kehren Sie dann zu den Build-Einstellungen für Ihr Projekt und dann zum Schlüssel für Header-Suchpfade zurück und geben Sie dort $ {foo} ein, wobei "foo" das ist, was Sie als Quellbaum bezeichnet haben .

Das funktioniert bei mir, obwohl ich nicht weiß, ob dies der beste oder einfachste Weg ist.

Joey Gibson
quelle
Wenn Sie die neueste Version von XCode haben, ist dies definitiv der richtige Weg. Viel einfacher als das Durchsuchen von Projektinternalen und das Erstellen von Verzeichnissen.
Zakdances
5

Suchen Sie Ihre .a-Datei im Finder und ziehen Sie sie in Ihr Projekt.

Wählen Sie "Elemente in den Ordner der Zielgruppe kopieren (falls erforderlich)" und fügen Sie Ihre Kopfzeilen zu Ihrem Projekt hinzu.

Jetzt sollte XCode 4 automatisch für Sie mit diesem Framework verknüpft werden.

So sollte die Bibliothek in Ihrem Projekt aussehen:

Richard J. Ross III
quelle
1
Ich habe genau das getan, aber es erkennt es nicht als Bibliothek. Das Symbol zeigt nur eine Seite anstelle der Bibliotheksanzeige.
Matt Hudson
Natürlich nicht. Es soll nicht wie ein Framework aussehen. Das bedeutet nicht, dass es nicht verknüpft ist.
Richard J. Ross III
Frameworks haben das gelbe Symbol, das weiße Symbol, das aussieht, als hätte das Römische Reich es gebaut, ist die Bibliothek :)
Matt Hudson
3

Befolgen Sie die Dokumentation von Apple .

In Kürze:

  1. Verknüpfen Sie Ihr Ziel mit der Bibliothek.
  2. Fügen Sie unter den Build-Einstellungen des Ziels -ObjC'Andere Linker-Flags' ( OTHER_LDFLAGS) hinzu.

Außerdem musste ich die Bibliothek zum Schema meines Hauptprojekts hinzufügen, da die Bibliothek in den Abhängigkeiten des Ziels nicht sichtbar war.

Corin
quelle
0

Die Antwort der Halle funktioniert für mich mit einem Zusatz:

  1. Überprüfen Sie in den Build-Einstellungen des statischen Bibliotheksprojekts den Wert für den Ordnerpfad für private (oder öffentliche) Header und kopieren Sie ihn.
  2. Fügen Sie dem Client-Projekt einen kopierten Wert hinzu. Erstellen Sie den Header-Suchpfad oder den Benutzer-Header-Suchpfad, je nachdem, welche Include- Direktive Sie verwenden
IZIordanov
quelle