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]
Package
ist 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 Package
oder mit a verwendet Bundle
. Sie können Show Package Contents
in einem Finder verwenden
Bundle
ist 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 bundle
und versioned bundle
als 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 bundle
wird 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
Library
ist 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..dylib
dynamic
[Statische vs dynamische Verknüpfung]
Text-based stub library
- .tbd
[Info] ist ein Textstub, der dynamic library
sich auf einem Zielgerät befindet. Daher sollten Sie keine dynamische Bibliothek in Ihr Bundle packen. Es hat einen Größeneffekt.
Framework
- .framework
ist ein not packaged
framework bundle
-, damit Entwickler leicht einen Blick auf Header und Ressourcen werfen können, die eine static or dynamic
Bibliothek, Header-Dateien und Ressourcen enthalten.
Static framework
enthalten ein static library
Paket mit seinen Ressourcen.
Dynamic framework
enthält die dynamic library
und 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 framework
ist 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 framework
die 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 .framework
Erweiterung 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] -@import
Es ist ein Framework, das eine.modulemap
Dateienthä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]