Formato file Mach-O (Mach Object - .o
)
Nel mondo iOS ogni file sorgente viene convertito in file oggetto: ABI [Informazioni] Mach-O file [Informazioni] che verranno impacchettati in un pacchetto eseguibile finale (ad es. Applicazione, framework ...), file (ad es. Libreria ...) e il suo comportamento è determinato da Mach-O type
[Informazioni]
Package
è una directory che si comporta come un file - opaque file
. È stato creato per l'esperienza dell'utente per complicare apportare alcune modifiche alla struttura interna che possono causare comportamenti imprevedibili del programma. Il pacchetto viene utilizzato in Document Package
o con a Bundle
. Puoi usarlo Show Package Contents
in un Finder
Bundle
è una directory con una struttura specifica per organizzare un binario (codice eseguibile) e risorse per quel codice (ad es. immagini, pennini ...). Il pacchetto contiene il file Info.plist
[Informazioni] . Il pacchetto è stato creato per l' esperienza degli sviluppatori . Inoltre può essere impacchettato. Esistono diversi tipi di bundle:
application bundle
- Application target
framework bundle
e versioned bundle
come sottotipo -Framework Target
loadable bundle
(aka plug-in bundle
) - Bundle target
(Pacchetto test interfaccia utente, pacchetto test unità)
- altri ( pacchetto
dSYM
[Informazioni] )
Application
- .ipa
, .app
[Informazioni] - packaged
application bundle
- programma lavabile.
Tests
- packaged
loadable bundle
che viene utilizzato per testare un binario. L'architettura plug-in ci consente di aggiungere una nuova funzionalità (casi di test) come modulo separato nel binario esistente
Librerie e quadri
Martin Fowler su InversionOfControl
Una libreria è essenzialmente un insieme di funzioni che è possibile chiamare, oggigiorno in genere organizzate in classi. Ogni chiamata fa un po 'di lavoro e restituisce il controllo al client.
Un Framework incarna un disegno astratto, con più comportamenti integrati. Per poterlo utilizzare è necessario inserire il proprio comportamento in vari punti del framework effettuando la sottoclasse o collegando le proprie classi. Il codice del framework chiama quindi il tuo codice in questi punti. Il controllo principale del programma viene invertito, spostato da te al framework. (Inversione di controllo)
Librerie e Frameworks su iOS
Library
è una raccolta di file oggetto Mach-O [verifica statica o dinamica] compilata per una o più architetture.
Static library
- .a
(aka libreria di archivio statica, libreria condivisa collegata statica [doc] ) - Quando lo aggiungi nella tua applicazione, il linker statico durante il tempo di compilazione unirà i file oggetto dalla libreria e li impacchetterà insieme ai file oggetto dell'applicazione in un unico eseguibile file. Lo svantaggio è un grande file di output
Da Xcode 9.0 è supportata la libreria statica Swift.
Dynamic library
- .dylib
(aka libreria dinamica condivisa, oggetto condiviso, libreria collegata dinamicamente [doc] ) è collegata dinamicamente all'eseguibile dell'app in fase di caricamento o di runtime , ma non viene copiata in essa. In pratica il pacchetto dell'app conterrà la cartella Frameworks con .dylib
file. Tutte le librerie di sistema iOS e macOS lo sono dynamic
. Lo svantaggio è un tempo di avvio lento poiché tutte le librerie dinamiche devono essere copiate e collegate.
[Collegamento statico vs dinamico]
Text-based stub library
- .tbd
[Informazioni] , è un troncone di testo dynamic library
che si trova su un dispositivo di destinazione. Di conseguenza non è necessario impacchettare una libreria dinamica nel pacchetto. Ha un effetto dimensionale.
Framework
aka binary framework
- .framework
è un not packaged framework bundle
(per consentire agli sviluppatori di dare un'occhiata alle intestazioni e alle risorse) che contiene una static or dynamic
libreria compilata , file di intestazione e risorse.
Static framework
contenere un static library
pacchetto con le sue risorse.
Dynamic framework
contiene le dynamic library
risorse e. Inoltre, il framework dinamico può includere diverse versioni della stessa libreria dinamica in un unico bundle ( versioned bundle
)
[Quadro statico vs dinamico]
Embedded framework
è uno dynamic framework
che vive nella sandbox dell'app. Questo tipo è stato creato prima di tutto affinché l' estensione condividesse codice e risorse comuni. È disponibile quando Target di distribuzione è iOS 8+.
Umbrella framework
[Target aggregato] è un framework che contiene altri framework. Non è ufficialmente supportato su iOS ed è per questo che non è raccomandato agli sviluppatori di crearli [Documento ufficiale] . In realtà è un insieme di sotto-framework (o Frame nidificati). Quando si crea un framework che ha una dipendenza, un consumatore (come un'app) è responsabile dell'aggiunta di questa dipendenza insieme al framework nel progetto. Come sviluppatore, è naturale cercare di trovare un modo per trasferire questo dovere dal consumatore al tuo. Di conseguenza pensi cheUmbrella framework
sia il salvataggio, ma di solito porta a seri problemi con la gestione delle versioni e la complessità della creazione e del supporto.
Fake Framework
- è il risultato di operazioni specifiche in a static library
per creare un pacchetto con .framework
estensione che si comporterà come a dynamic framework
. Questa tecnica è stata utilizzata quando Xcode non supportava la creazione di un framework poiché non aveva un modello di framework. Uno di realizzazione di un quadro falso . Con Xcode 6, Apple ha aggiunto il supporto per il framework iOS.
Modular Framework
[Informazioni] -@import
è un framework che contiene un.modulemap
file all'interno. Il modulo può contenere sottomoduli. Il vantaggio principale è che risparmi un tempo di costruzione conModular Framework
.
Universal Library or Framework
(aka Fat) [lipo] [Target aggregato] contiene più architetture. Ad esempio, la tua build di rilascio dovrebbe supportare un arco che puoi regolare tramite Build Active Architecture Only
[ONLY_ACTIVE_ARCH]
Dependency
[Informazioni] Sei in grado di utilizzare codice di terze parti come parte del tuo target. Ti consente di riutilizzare un codice da molte fonti come: un altro progetto, progetto nello stesso spazio di lavoro, un altro target, libreria, framework ecc.
Come creare e utilizzare una libreria statica:
Come costruire e utilizzare un framework dinamico [passare a statico]
[Xcode Build System]
[Componenti Xcode]
[Dynamic linker]