Ich bin auf dasselbe Problem gestoßen, als ich meine eigene statische Bibliothek entwickelt habe, und obwohl Colins Antwort sehr hilfreich war, musste ich sie ein wenig ändern, um konsistent und einfach zu funktionieren, wenn Projekte unter Xcode 4 unter Verwendung eines Arbeitsbereichs ausgeführt und archiviert wurden.
Das Besondere an meiner Methode ist, dass Sie für alle Build-Konfigurationen einen einzelnen Benutzer-Headerpfad verwenden können.
Meine Methode ist wie folgt:
Erstellen Sie einen Arbeitsbereich
- Gehen Sie unter Xcode 4 zu Datei, Neu, Arbeitsbereich.
- Aus dem Finder können Sie dann die .xcodeproj-Projekte sowohl für die statische Bibliothek, die Sie verwenden möchten, als auch für die neue App, die Sie erstellen und die die Bibliothek verwendet, ziehen. Weitere Informationen zum Einrichten von Arbeitsbereichen finden Sie in den Apple-Dokumenten: https://developer.apple.com/library/content/featuredarticles/XcodeConcepts/Concept-Workspace.html
Projekteinstellungen für statische Bibliotheken
- Stellen Sie sicher, dass alle Header der statischen Bibliothek so eingestellt sind, dass sie nach "Öffentlich" kopiert werden. Dies erfolgt unter den Einstellungen für das statische Bibliotheksziel> Build-Phasen. Stellen Sie in der Phase "Header kopieren" sicher, dass sich alle Ihre Header im Abschnitt "Öffentlich" befinden.
- Gehen Sie als Nächstes zu Build Settings, suchen Sie nach "Public Headers Folder Path" und geben Sie einen Pfad für Ihre Bibliothek ein. Ich wähle dies:
include / LibraryName
Ich habe dies aus der Verwendung mit RestKit übernommen und festgestellt, dass es mit all meinen statischen Bibliotheken am besten funktioniert. Dadurch wird Xcode angewiesen, alle Header, die wir in Schritt 1 in den Abschnitt "Öffentliche" Header verschoben haben, in den hier angegebenen Ordner zu kopieren, der sich beim Erstellen im Ordner "Abgeleitete Daten" befindet. Wie bei RestKit verwende ich gerne einen einzelnen "Include" -Ordner, um jede statische Bibliothek zu enthalten, die ich in einem Projekt verwende.
Ich mag es auch nicht, hier Makros zu verwenden, da wir später einen einzelnen Benutzer-Header-Suchpfad verwenden können, wenn wir das Projekt mithilfe der statischen Bibliothek konfigurieren.
- Suchen Sie nach "Installation überspringen" und stellen Sie sicher, dass dies auf JA gesetzt ist.
Einstellungen für das Projekt mithilfe der statischen Bibliothek
- Fügen Sie die statische Bibliothek als Framework unter Build Phases> Link Binary With Libraries hinzu und fügen Sie die Datei libLibraryName.a für die gewünschte statische Bibliothek hinzu.
- Stellen Sie als Nächstes sicher, dass das Projekt so eingestellt ist, dass es nach Benutzersuchpfaden sucht. Dies erfolgt unter Build-Einstellungen> Immer nach Benutzerpfaden suchen und stellen Sie sicher, dass YES festgelegt ist.
Suchen Sie im selben Bereich nach Suchpfaden für Benutzerkopfzeilen und fügen Sie Folgendes hinzu:
"$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / include"
Dadurch wird Xcode angewiesen, im Zwischen-Build-Ordner, den Xcode während des Build-Prozesses erstellt, nach statischen Bibliotheken zu suchen. Hier haben wir den Ordner "include", den wir für unsere statischen Bibliotheksspeicherorte verwenden, die wir in Schritt 2 für die Projekteinstellungen der statischen Bibliothek eingerichtet haben. Dies ist der wichtigste Schritt, damit Xcode Ihre statischen Bibliotheken korrekt findet.
Konfigurieren Sie den Arbeitsbereich
Hier möchten wir den Arbeitsbereich so konfigurieren, dass er beim Erstellen unserer App die statische Bibliothek erstellt. Dies erfolgt durch Bearbeiten des für unsere App verwendeten Schemas.
- Stellen Sie sicher, dass Sie das Schema ausgewählt haben, mit dem Ihre Anwendung erstellt wird.
- Wählen Sie in der Dropdown-Liste Schema die Option Schema bearbeiten.
- Wählen Sie links oben in der Liste die Option Erstellen. Fügen Sie ein neues Ziel hinzu, indem Sie das + im mittleren Bereich drücken.
- Die statische Bibliothek sollte für die Bibliothek angezeigt werden, die Sie verknüpfen möchten. Wählen Sie die statische iOS-Bibliothek.
- Klicken Sie auf Ausführen und Archivieren. Dadurch wird das Schema angewiesen, die Bibliotheken für die statische Bibliothek zu kompilieren, wenn Sie Ihre App erstellen.
- Ziehen Sie die statische Bibliothek über Ihr Anwendungsziel. Dadurch werden die statischen Bibliotheken vor Ihrem Anwendungsziel kompiliert.
Starten Sie die Verwendung der Bibliothek
Jetzt sollten Sie in der Lage sein, Ihre statische Bibliothek mit zu importieren
import <LibraryName/LibraryName.h>
Diese Methode umgeht den Aufwand, unterschiedliche Benutzer-Header-Pfade für unterschiedliche Konfigurationen zu haben, sodass Sie keine Probleme beim Kompilieren für Archive haben sollten.
Warum funktioniert das?
Es hängt alles von diesem Weg ab:
"$(PROJECT_TEMP_DIR)/../UninstalledProducts/include"
Da wir unsere statische Bibliothek für die Verwendung von "Installation überspringen" konfigurieren, werden die kompilierten Dateien in den Ordner "UninstalledProjects" im temporären Erstellungsverzeichnis verschoben. Unser Pfad hier wird auch in den Ordner "include" aufgelöst, den wir für unsere statische Bibliothek eingerichtet und für unseren Suchpfad für Benutzer-Header verwendet haben. Die beiden, die zusammenarbeiten, lassen Xcode wissen, wo sich unsere Bibliothek während des Kompilierungsprozesses befindet. Da dieses temporäre Build-Verzeichnis sowohl für Debug- als auch für Release-Konfigurationen vorhanden ist, benötigen Sie nur einen einzigen Pfad für Xcode, um nach statischen Bibliotheken zu suchen.