Mach-O-Dateiformat (Mach-Objekt - .o)
In der iOS-Welt wird jede Quelldatei in Objektdateien konvertiert - ABI [About] Mach-O-Datei [About], die in ein endgültiges ausführbares Bundle (z. B. Anwendung, Framework ...), Datei (z. B. Bibliothek ...) gepackt wird. und sein Verhalten wird bestimmt durch Mach-O type[Über]
Packageist ein Verzeichnis, das sich als Datei verhält - opaque file. Es wurde für die Benutzererfahrung erstellt , um einige Änderungen an der internen Struktur zu erschweren, die zu unvorhersehbarem Programmverhalten führen können. Paket wird in Document Packageoder mit a verwendet Bundle. Sie können Show Package Contentsin einem Finder verwenden
Bundleist ein Verzeichnis mit einer bestimmten Struktur zum Organisieren einer Binärdatei (ausführbarer Code) und Ressourcen für diesen Code (z. B. Bilder, Schreibfedern ...). Bundle enthält Info.plist[About] -Datei. Das Bundle wurde für Entwickler erstellt . Es kann auch verpackt werden. Es gibt verschiedene Arten von Bundles:
application bundle - - Application target
framework bundleund versioned bundleals Subtyp -Framework Target
loadable bundle(aka plug-in bundle) - Bundle target(UI Testing Bundle, Unit Testing Bundle)
- andere (
dSYM[Über] Bundle)
Application- .ipa, .app[Über] - packaged application bundle- startfähiges Programm.
Tests- packaged loadable bundlewird verwendet, um eine Binärdatei zu testen. Die Plug-In-Architektur ermöglicht es uns, eine neue Funktionalität (Testfälle) als separates Modul in vorhandene Binärdateien einzufügen
Bibliotheken und Frameworks
Martin Fowler über InversionOfControl
Eine Bibliothek besteht im Wesentlichen aus einer Reihe von Funktionen, die Sie aufrufen können. Diese sind heutzutage normalerweise in Klassen unterteilt. Jeder Aufruf erledigt einige Arbeiten und gibt die Kontrolle an den Client zurück.
Ein Framework verkörpert ein abstraktes Design mit mehr integriertem Verhalten. Um es zu verwenden, müssen Sie Ihr Verhalten an verschiedenen Stellen im Framework einfügen, entweder durch Unterklassen oder durch Einfügen Ihrer eigenen Klassen. Der Code des Frameworks ruft dann an diesen Stellen Ihren Code auf. Die Hauptsteuerung des Programms ist invertiert und von Ihnen weg in das Framework verschoben. (Umkehrung der Kontrolle)
Bibliotheken und Frameworks unter iOS
Libraryist eine Sammlung von Mach-O-Objektdateien [statisch oder dynamisch prüfen], die für eine oder mehrere Architekturen kompiliert wurden.
Static library- .a(auch bekannt als statische Archivbibliothek, statisch verknüpfte gemeinsam genutzte Bibliothek [doc] ) - Wenn Sie sie Ihrer Anwendung hinzufügen, führt der statische Linker während der Kompilierungszeit die Objektdateien aus der Bibliothek zusammen und packt sie zusammen mit den Anwendungsobjektdateien in eine einzige ausführbare Datei Datei. Der Nachteil ist eine große Ausgabedatei
Ab Xcode 9.0 wird die statische Swift-Bibliothek unterstützt.
Dynamic library- .dylib(auch bekannt als dynamische gemeinsam genutzte Bibliothek, gemeinsam genutztes Objekt, dynamisch verknüpfte Bibliothek [doc] ) wird beim Laden oder zur Laufzeit dynamisch mit der ausführbaren Datei der App verknüpft , jedoch nicht in diese kopiert. In der Praxis enthält das Paket der App den Frameworks-Ordner mit der Datei. Alle iOS- und MacOS- Systembibliotheken sind . Der Nachteil ist eine langsame Startzeit, da alle dynamischen Bibliotheken kopiert und verknüpft werden sollten..dylibdynamic
[Statische vs dynamische Verknüpfung]
Text-based stub library- .tbd[Info] ist ein Textstub, der dynamic librarysich auf einem Zielgerät befindet. Daher sollten Sie keine dynamische Bibliothek in Ihr Bundle packen. Es hat einen Größeneffekt.
Framework- .frameworkist ein not packaged framework bundle-, damit Entwickler leicht einen Blick auf Header und Ressourcen werfen können, die eine static or dynamicBibliothek, Header-Dateien und Ressourcen enthalten.
Static frameworkenthalten ein static libraryPaket mit seinen Ressourcen.
Dynamic frameworkenthält die dynamic libraryund Ressourcen. Darüber hinaus kann das dynamische Framework verschiedene Versionen derselben dynamischen Bibliothek in einem einzigen Bundle enthalten ( versioned bundle)
[Statisches vs dynamisches Framework]
Embedded frameworkist eine dynamic framework, die in der Sandbox der App lebt. Dieser Typ wurde zunächst für die Erweiterung erstellt , um gemeinsamen Code und Ressourcen gemeinsam zu nutzen. Es ist verfügbar, wenn das Bereitstellungsziel iOS 8+ ist.
Umbrella framework [Aggregiertes Ziel] ist ein Framework, das andere Frameworks enthält. Es wird unter iOS nicht offiziell unterstützt und daher wird Entwicklern nicht empfohlen , sie zu erstellen [Offizielles Dokument] . Tatsächlich handelt es sich um eine Reihe von Unter-Frameworks (oder verschachtelten Frameworks). Wenn Sie ein Framework mit einer Abhängigkeit erstellen, ist ein Verbraucher (z. B. eine App) dafür verantwortlich, diese Abhängigkeit zusammen mit Ihrem Framework in das Projekt einzufügen. Als Entwickler ist es selbstverständlich, einen Weg zu finden, um diese Pflicht vom Verbraucher auf Ihren zu übertragen. Infolgedessen denken Sie, dass diesUmbrella frameworkdie Rettung ist, aber normalerweise führt dies zu ernsthaften Problemen bei der Verwaltung von Versionen und der Komplexität der Erstellung und Unterstützung.
Fake Framework- ist das Ergebnis bestimmter Operationen unter a static library, um ein Bundle mit .frameworkErweiterung zu erstellen , das sich als dynamic framework. verhält . Diese Technik wurde verwendet, wenn Xcode das Erstellen eines Frameworks nicht unterstützte, da keine Framework-Vorlage vorhanden war. Eine der Realisierung eines gefälschten Rahmens . Mit Xcode 6 hat Apple die Unterstützung des iOS-Frameworks hinzugefügt.
Modular Framework[About] -@importEs ist ein Framework, das eine.modulemapDateienthält. Modul kann Submodule enthalten. Der Hauptvorteil ist, dass Sie mitModular Framework.
Universal Library or Framework(aka Fat) [lipo] [Gesamtziel] enthält mehrere Architekturen. Zum Beispiel sollte Ihr Release-Build einen Bogen unterstützen, den Sie über [ONLY_ACTIVE_ARCH] regulieren können.Build Active Architecture Only
Dependency[Info] Sie können Code von Drittanbietern als Teil Ihres Ziels verwenden. Sie können einen Code aus vielen Quellen wie einem anderen Projekt, einem Projekt im selben Arbeitsbereich, einem anderen Ziel, einer anderen Bibliothek, einem anderen Framework usw. wiederverwenden.
So erstellen und verwenden Sie eine statische Bibliothek:
Erstellen und Verwenden eines dynamischen Frameworks [Wechsel zu statisch]
[Xcode Build System]
[Xcode-Komponenten]
[Dynamischer Linker]