wake-up-neo.com

Unterschied zwischen Framework und statischer Bibliothek in xcode4 und wie man sie aufruft

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" noch "ProjName/Myclass.h" funktionieren.

Bitte seien Sie so genau wie möglich.

Vielen Dank

130
Leonardo

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 im SDK integrierten Frameworks wie Foundation und UIKit) und sollten (meistens) funktionieren.

Die meisten Frameworks enthalten dynamische Bibliotheken. Mit 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 von iOS-Code stattdessen als statische Bibliotheken zu verteilen.

Statische Bibliotheken sind in Ordnung, erfordern jedoch 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 Verweisen Sie darauf, indem Sie die entsprechenden Header-Suchpfade in Ihren Build-Einstellungen festlegen.

Also: Zusammenfassend ist meiner Meinung nach die beste Art, Ihre Bibliothek zu verteilen, ein Framework. 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 das mitgelieferte Rakefile in diesem Projekt ansehen (falls Sie nicht wissen, dass Rake Rubys Äquivalent zu Make ist). Ich habe eine Handvoll Aufgaben, um mein Projekt zu kompilieren (mit xcodebuild) und sie 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. Ich dachte, ich würde sie ändern, um darauf hinzuweisen, dass sich meine erste Wahl für die Verteilung von Bibliotheken geändert hat. Meine erste Wahl für jede Drittanbieter-Bibliothek als Konsument oder Produzent ist CocoaPods. Ich verteile meine Bibliotheken mit CocoaPods und biete eine vorkompilierte statische Bibliothek mit Headern als Fallback-Option an.

140
Luke Redpath

im Grunde sind Frameworks Bibliotheken und bieten einen praktischen Mechanismus für die Arbeit mit ihnen. Wenn Sie "innerhalb" eines Frameworks suchen, handelt es sich lediglich um ein Verzeichnis mit einer statischen Bibliothek und Header-Dateien (in einigen Ordnerstrukturen mit Metadaten).

Wenn Sie ein 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 eine bestimmte Funktionalität haben möchten, möchten Sie möglicherweise eine Bibliothek (z. B. three20) verwenden und diese in Ihre verteilbare App packen .

19
Martin Ullrich