Ausgabe
Ich bin ziemlich neu in Xcode und Objective-C. Ich möchte eine sehr grundlegende Frage stellen.
Ich habe gesehen, dass es beim “Verknüpfen von Binärdateien mit Bibliotheken” in den Projekteinstellungen Unterschiede zu Frameworks und Bibliotheken gibt, die aus anderen Projekten im Arbeitsbereich importiert wurden.
Erste Frage, warum gibt es einen Rahmen? Und warum gibt es eine Bibliothek? Kann meine Bibliothek kein Framework sein?
Und wie kann ich dann aus einer .h -Datei Klassen aus meiner importierten statischen Bibliothek aufrufen?
Ich nehme an, es muss ein Präfix geben, aber ich konnte es nicht finden. Weder noch “ProjName/Myclass.h” funktionieren.
Bitte seien Sie so genau wie möglich.
Vielen Dank
Lösung
Der größte Vorteil, den ein Framework gegenüber statischen Bibliotheken hat, besteht darin, dass sie eine saubere Möglichkeit darstellen, die kompilierte Bibliotheksbinärdatei und alle zugehörigen Header zu verpacken. Sie können in Ihr Projekt eingefügt werden (genau wie die integrierten Frameworks des SDK wie Foundation und UIKit) und sollten (meistens) einfach funktionieren.
Die meisten Frameworks enthalten dynamische Bibliotheken; Frameworks, die in Xcode mit der Mac Framework-Vorlage erstellt wurden, erstellen eine dynamische Bibliothek. Das iPhone unterstützt keine dynamischen Frameworks, weshalb es üblich geworden ist, dass wiederverwendbare Bibliotheken von iOS-Code stattdessen als statische Bibliotheken verteilt werden.
Statische Bibliotheken sind in Ordnung, aber sie erfordern ein wenig zusätzliche Arbeit seitens des Benutzers. Sie müssen Ihr Projekt mit der Bibliothek verknüpfen und die Header-Dateien in Ihr Projekt kopieren oder irgendwo darauf verweisen, indem Sie die entsprechenden Header-Suchpfade in Ihren Build-Einstellungen festlegen.
Also: Zusammenfassend bin ich der Meinung, dass man seine Bibliothek am besten als Framework verteilen kann. Um ein „statisches“ Framework für iOS zu erstellen, können Sie im Wesentlichen ein normales Framework nehmen und die Binärdatei durch Ihre kompilierte statische Bibliothek ersetzen. So verteile ich eine meiner Bibliotheken, Resty , und so beabsichtige ich, meine Bibliotheken in Zukunft zu vertreiben.
Vielleicht möchten Sie sich das bereitgestellte Rakefile in diesem Projekt ansehen (falls Sie es nicht wissen, Rake ist Rubys Äquivalent zu Make). Ich habe eine Handvoll Aufgaben zum Kompilieren meines Projekts (mit xcodebuild
) und Packen als statisches Framework für iOS. Sie sollten dies nützlich finden.
Alternativ können Sie diese Xcode 4-Vorlagen zum Erstellen eines iOS-Frameworks verwenden.
Update 9. Dezember 2013 : Dies ist eine beliebte Antwort, daher dachte ich, ich würde bearbeiten, um zu sagen, dass sich meine erste Wahl für die Bibliotheksverteilung geändert hat. Meine erste Wahl für Bibliotheken von Drittanbietern als Verbraucher oder Produzent sind CocoaPods. Ich verteile meine Bibliotheken mit CocoaPods und biete eine vorkompilierte statische Bibliothek mit Headern als Fallback-Option an.
Beantwortet von – Luke Redpath
Antwort geprüft von – Gilberto Lyons (FixError Admin)