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 zwischen Framework 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 "ProjName / Myclass.h" funktionieren.
Bitte seien Sie so genau wie möglich.
Vielen Dank
objective-c
xcode4
static-libraries
Leonardo
quelle
quelle
Antworten:
Der größte Vorteil eines Frameworks gegenüber statischen Bibliotheken besteht darin, dass sie die kompilierte Bibliotheksbinärdatei und alle zugehörigen Header auf übersichtliche Weise verpacken. Sie können in Ihr Projekt eingefügt werden (genau wie die in das SDK integrierten Frameworks wie Foundation und UIKit) und sollten (meistens) einfach funktionieren.
Die meisten Frameworks enthalten dynamische Bibliotheken. In Xcode mithilfe der Mac Framework-Vorlage erstellte Frameworks erstellen eine dynamische Bibliothek. Das iPhone unterstützt keine dynamischen Frameworks, weshalb es üblich geworden ist, wiederverwendbare Bibliotheken mit iOS-Code stattdessen als statische Bibliotheken zu verteilen.
Statische Bibliotheken sind in Ordnung, erfordern jedoch einige 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 in Ihren Build-Einstellungen die entsprechenden Header-Suchpfade festlegen.
Zusammenfassend lässt sich sagen, dass die beste Art, Ihre Bibliothek zu verteilen, ein Framework ist. Um ein "statisches" Framework für iOS zu erstellen, können Sie im Wesentlichen ein normales Framework verwenden und die Binärdatei durch Ihre kompilierte statische Bibliothek ersetzen. Auf diese Weise verteile ich eine meiner Bibliotheken, Resty, und beabsichtige, meine Bibliotheken in Zukunft zu verteilen.
Vielleicht möchten Sie sich die mitgelieferte Rake-Datei in diesem Projekt ansehen (falls Sie sich nicht bewusst sind, ist Rake Rubys Äquivalent zu Make). Ich habe eine Handvoll Aufgaben, um mein Projekt zu kompilieren (mit
xcodebuild
) und es als statisches Framework für iOS zu verpacken. 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 sie bearbeiten, um zu sagen, dass sich meine erste Wahl für die Bibliotheksverteilung geändert hat. Meine erste Wahl für eine Drittanbieter-Bibliothek als Verbraucher oder Produzent ist CocoaPods. Ich verteile meine Bibliotheken mit CocoaPods und biete eine vorkompilierte statische Bibliothek mit Headern als Fallback-Option an.
quelle
Grundsätzlich sind Frameworks Bibliotheken und bieten einen praktischen Mechanismus für die Arbeit mit ihnen. Wenn Sie in ein Framework "schauen", ist es nur ein Verzeichnis, das eine statische Bibliothek und Header-Dateien enthält (in einigen Ordnerstrukturen mit Metadaten).
Wenn Sie Ihr eigenes Framework erstellen möchten, müssen Sie eine "statische Bibliothek" erstellen und diese auf eine bestimmte Weise packen. siehe diese Frage
Im Allgemeinen werden Framworks auf Plattformen für wiederverwendbares Verhalten verwendet, bei dem Sie Ihren eigenen Code "in ein vorhandenes Framework" einfügen. Wenn Sie bestimmte Funktionen haben möchten, können Sie eine Bibliothek (z. B. three20) verwenden und diese in Ihre verteilbare App packen
quelle