2011-01-11 11 views
41

Ich habe einige Objective-C-Klassen, die ich derzeit sowohl in einer Cocoa-Anwendung (Mac OS X) als auch in einer Cocoa-Touch-Anwendung (iOS) verwende. Derzeit, wenn ich diese Klassen aktualisiere, muss ich diese aktualisierten .h und .m Dateien in beide Projekte kopieren. Kein großer Deal, aber ich werde sie in vielen anderen Projekten verwenden.Wie wird eine statische Objective-C-Bibliothek erstellt?

Also möchte ich diese Klassen in eine statische Objective-C-Bibliothek erstellen. Und verlinke diese Bibliothek dann in allen anderen Projekten.

Gibt es eine Möglichkeit, eine statische Bibliothek so zu erstellen, dass sie sowohl mit Cocoa als auch mit Cocoa-Touch-Anwendungen funktioniert?

Ich habe versucht, nur eine Cocoa statische Bibliothek mit diesen Klassen zu erstellen, aber ich bekomme verschiedene Fehler, wenn ich versuche, gegen diese Bibliothek in meiner Cocoa-Anwendung zu verknüpfen, und ich bin sicher, dass sie von der Tatsache kommen, dass ich mach es nicht richtig.

Also, wie baue ich eine Objective-C statische Bibliothek die richtig Weg? Muss ich eine statische Cocoa-Touch- und Cocoa-Bibliothek erstellen? Oder kann ich nur eins machen? Wie wird das gemacht?

Gibt es irgendwelche gut gemachten Tutorien zu diesem Thema?

Ich habe im Internet gesucht und finde kein umfassendes Tutorial zu diesem Thema, also habe ich die Frage hier gestellt, in der Hoffnung, dass eine großartige Antwort gepostet wird und diese Frage als Ressource für mich dienen kann für zukünftige Fragesteller.

+0

Gute Frage und ich wünschte, es gäbe mehr Beispiele dafür, dies gut zu tun. Ich werde mir das Tutorial ansehen, das Sie verlinkt haben, und sehen, ob es etwas gibt, das ich hinzufügen kann. ist es Ihr Ziel, eine universelle statische Lib zu erstellen, die Sie als binäre Ressource mit anderen Apps teilen können oder möchten Sie eine Projektabhängigkeit vom Build-Produkt eines geteilten Projekts erstellen? – Jonah

+0

universelle statische Bibliothek. :) – Alex

+0

Überprüfen Sie dieses Apple-Dokument: https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/configuration.html –

Antwort

25

Für XCode 5. Diese Antworten scheinen ein bisschen veraltet. Sie können die Hauptschritte hier http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial sehen. Aber Xcode 5 macht viel mehr Arbeit für Sie und funktioniert jetzt fast so, wie Sie es wollen.

1.Erstellen neue Static Library App in Xcode New Static Library in Xcode

2.You kann alle Dateien löschen erstellt und eigene hinzufügen. Fügen Sie Ihre Methoden usw. hinzu. Code Code Code

3. Wenig Problem mit statischen Bibliotheken, ist, dass Sie nur entweder für das Gerät erstellen oder im Simulator ausführen können. Also müssen wir eine Bibliothek erstellen, die ARM und i386-Architekturen unterstützt. Dazu müssen wir eine universelle Binärdatei erstellen (damit sie Simulator- und On-Device-Builds unterstützt).

Erstellen Sie ein neues Ziel (Datei> Neu> Ziel). New Target

4.Select Neues Ziel dann eine neue Build-Phase (Editor hinzufügen> Build-Phase Liste> In Build-Run Script Phase New Build Phase

5.Select die Build-Phase und geben Sie das Skript von diesem Link in Lauf Skriptfenster. https://gist.github.com/sponno/7228256

Run Script Code

6.Now müssen Sie jede Architektur (Simulator und iOS-Gerät) bauen

6.2.Select unsere libary und dann iOS-Gerät, klicken Sie bauen oder Lauf (Befehl + B)

6.3.Then für den Simulator (die Bibliothek Icon ganz oben links von Xcode wählen und das iOS Simulator dann) enter image description here

7. Nun möchten Sie das BullsEye-Symbol> iOS-Gerät erstellen. Dies wird das Gesamtziel sein und unsere beiden Bibliotheken zu einer neuen universellen Datei kombinieren.

8.Lets sehen, ob das alles funktioniert hat. Erweitert den Ordner "Produkte" in der linken Baum, Rechtsklick auf die Datei mit der Endung ".a" und "Im Finder anzeigen"

9.Wenn das alles funktioniert, sollten Sie die folgenden Dateien im Finder sehen. Sie die Library .a file and include files

10.Die letzte Schritt ist einfach, ziehen Sie einfach die „library.a-Datei und die Ordner enthält in Ihr neues Xcode-Projekt sehen. enter image description here

enter image description here

In Ihrem neues Projekt, Sie müssen nichts anderes tun, als die Header-Dateien zu importieren, die Sie verwenden möchten, aber Sie müssen die Verknüpfungsflags oder Header-Suchpfade nicht ändern.Es funktioniert nur.

(jedes Feedback geschätzt) oder bitte bearbeiten Sie meinen Beitrag, um die Übersichtlichkeit zu verbessern.

** BONUSPUNKTE *** Installieren Sie VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode und verwenden Sie dies, um alle header.h-Dateien zu dokumentieren, die Sie für die Bibliothek freigeben möchten.

Jetzt kann jeder, der Ihre Bibliothek verwendet, die Option + klicken, um kontextsensitive Hilfe für Ihre Klassen aufzurufen.

Context Aware Help based on header file

+1

Das ist großartig! Xcode und Apple haben einen langen Weg zurückgelegt, seit ich meine ursprüngliche Frage gestellt habe und so mache ich es jetzt. http://cocoapods.org/ sieht auch vielversprechend aus, wenn Sie auf die Art und Weise des Rubin-Edelsteins stehen. – Alex

+1

Erstaunliche Antwort Alter. Danke vielmals! – CalZone

12

Ich landete this tutorial und es funktionierte tatsächlich wirklich gut. Wenn jemand noch Hilfe anbieten möchte, tue es bitte und ich werde es höchstwahrscheinlich aufheben und als die akzeptierte Antwort markieren.

+2

Können Sie dies nur als die akzeptierte Antwort markieren? – FreeAsInBeer

+0

Kann jemand auf ein neueres Tutorial verweisen? – Stavash

+0

http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial Ist derjenige, den ich verwende. Ende 2013 so mehr aktuell. –

11

(unter Verwendung des tutorial als Ausgangspunkt)

nun ein zweites Ziel in der Bibliothek xcodeproj für die anderen OS erstellen.

Konfigurieren Sie die SDK-Einstellungen für jedes Ziel mithilfe einer xcconfig-Datei (eine für jedes Betriebssystem). Verwende diese xcconfig-Dateien in deinen anderen Bibliotheken. Dies ermöglicht auch eine einfache globale Kontrolle der Build-Einstellungen.

Konfigurieren Sie Link- und Abhängigkeitsreferenzen wie gewohnt in Ihren Zielen (Apps), wählen Sie jedoch die richtige Zielbibliothek aus.

fügen Sie dem Bibliotheksprojekt ein aggregiertes Ziel für einfache Meta-Kompilierung/einfache Wartung hinzu.

- oder -

tun es alle durch eine scripting Schicht einzuführen oder eine benutzerdefinierte Build-Werkzeug zu schaffen.

+1

+1, interessante Gedanken. – Alex

2

Ich fand auch diese "Building a Static Library with Jenkins" das ist wirklich gut. Es wird darüber gesprochen, wie man eine statische Bibliothek richtig erstellt, wie man Jenkins dazu bringt, sie automatisch zu erstellen, und dann die resultierenden .a und .h-Dateien an einem Ort ablegt, von dem man sie holen kann.

Kombiniere das mit CocoaPods oder Maven (ich habe das noch nicht gemacht) und du könntest ein ziemlich nettes kleines Ökosystem haben.

Verwandte Themen