Format de fichier Mach-O (Mach Object - .o
)
Dans le monde iOS, chaque fichier source est converti en fichiers objets - ABI [About] Mach-O file [About] qui sera emballé dans un ensemble exécutable final (par exemple application, framework ...), fichier (par exemple bibliothèque ...) et son comportement est déterminé par Mach-O type
[À propos]
Package
est un répertoire qui se comporte comme un fichier - opaque file
. Il est créé pour que l'expérience utilisateur complique la modification de la structure interne qui peut provoquer un comportement imprévisible du programme. Le package est utilisé dans Document Package
ou avec un fichier Bundle
. Vous pouvez utiliser Show Package Contents
dans un Finder
Bundle
est un répertoire avec une structure spécifique pour organiser un binaire (code exécutable) et des ressources pour ce code (ex: images, nibs ...). Le bundle contient le fichier Info.plist
[About] . Le bundle a été créé pour l' expérience des développeurs . Il peut également être emballé. Il existe plusieurs types de bundle:
application bundle
- Application target
framework bundle
et versioned bundle
comme sous-type -Framework Target
loadable bundle
(aka plug-in bundle
) - Bundle target
(Ensemble de tests d'interface utilisateur, Ensemble de tests unitaires)
- autres (ensemble
dSYM
[À propos] )
Application
- .ipa
, .app
[À propos] - packaged
application bundle
- programme lancable.
Tests
- packaged
loadable bundle
qui sert à tester un binaire. L'architecture de plug-in nous permet d'ajouter une nouvelle fonctionnalité (cas de test) en tant que module séparé dans le binaire existant
Bibliothèques et cadres
Martin Fowler sur InversionOfControl
Une bibliothèque est essentiellement un ensemble de fonctions que vous pouvez appeler, généralement organisées en classes. Chaque appel effectue un certain travail et retourne le contrôle au client.
Un Framework incarne une conception abstraite, avec plus de comportement intégré. Pour l'utiliser, vous devez insérer votre comportement à divers endroits du framework soit en sous-classant, soit en ajoutant vos propres classes. Le code du framework appelle ensuite votre code à ces points. Le contrôle principal du programme est inversé, éloigné de vous vers le framework. (Inversion de contrôle)
Bibliothèques et cadres sur iOS
Library
est une collection de fichiers objets Mach-O [vérifier statique ou dynamique] compilés pour une ou plusieurs architectures.
Static library
- .a
(aka bibliothèque d'archives statiques, bibliothèque partagée statique liée [doc] ) - Lorsque vous l'ajoutez dans votre application, l' éditeur de liens statique pendant la compilation fusionnera les fichiers objets de la bibliothèque et les regroupera avec les fichiers objets de l'application dans un seul exécutable fichier. L'inconvénient est un gros fichier de sortie
À partir de Xcode 9.0, la bibliothèque statique Swift est prise en charge.
Dynamic library
- .dylib
(aka bibliothèque partagée dynamique, objet partagé, bibliothèque liée dynamiquement [doc] ) est lié dynamiquement à l'exécutable de l'application au chargement ou à l'exécution , mais pas copié dedans. Le package de l'application d'entraînement contiendra le dossier Frameworks avec le .dylib
fichier. Toutes les bibliothèques système iOS et macOS sont dynamic
. L'inconvénient est un temps de lancement lent car toutes les bibliothèques dynamiques doivent être copiées et liées.
[Liaison statique vs dynamique]
Text-based stub library
- .tbd
[À propos de] , il s'agit d'un talon de texte dynamic library
situé sur un périphérique cible. Par conséquent, vous ne devez pas empaqueter une bibliothèque dynamique dans votre ensemble. Cela a un effet de taille.
Framework
aka binary framework
- .framework
est un not packaged framework bundle
(pour permettre aux développeurs de consulter facilement les en-têtes et les ressources) qui contient une static or dynamic
bibliothèque compilée , des fichiers d'en-tête et des ressources.
Static framework
contiennent un static library
pack avec ses ressources.
Dynamic framework
contient les dynamic library
ressources et. En plus de cela, le framework dynamique peut inclure différentes versions de la même bibliothèque dynamique dans un seul bundle ( versioned bundle
)
[Cadre statique vs dynamique]
Embedded framework
est un dynamic framework
qui vit dans le bac à sable de l'application. Ce type a été créé tout d'abord pour l' extension afin de partager du code et des ressources communs. Il est disponible lorsque la cible de déploiement est iOS 8+.
Umbrella framework
[Cible agrégée] est un framework qui contient d'autres frameworks. Il n'est pas officiellement pris en charge sur iOS et c'est pourquoi il n'est pas recommandé aux développeurs de les créer [Document officiel] . En réalité, c'est un ensemble de sous-cadres (ou cadres imbriqués). Lorsque vous créez un framework qui a une dépendance, un consommateur (tel qu'une application) est responsable de l'ajout de cette dépendance avec votre framework dans le projet. En tant que développeur, il est naturel d'essayer de trouver un moyen de transférer cette obligation du consommateur vers le vôtre. En conséquence, vous pensez queUmbrella framework
c'est le sauvetage, mais cela entraîne généralement de graves problèmes de gestion des versions et la complexité de leur création et de leur prise en charge.
Fake Framework
- est le résultat d'opérations spécifiques sous a static library
pour créer un bundle avec une .framework
extension qui se comportera comme un dynamic framework
. Cette technique a été utilisée lorsque Xcode ne prenait pas en charge la création d'un framework car il n'avait pas de modèle de framework. Un de réalisation d'un faux cadre . Avec Xcode 6, Apple a ajouté la prise en charge du framework iOS.
Modular Framework
[About] -@import
c'est un framework qui contient un.modulemap
fichier à l'intérieur. Le module peut contenir des sous-modules. Le principal avantage est que vous économisez du temps de construction avecModular Framework
.
Universal Library or Framework
(aka Fat) [lipo] [Aggregate target] contient plusieurs architectures. Par exemple, votre version de version doit prendre en charge une certaine arche que vous pouvez régler via Build Active Architecture Only
[ONLY_ACTIVE_ARCH]
Dependency
[À propos] Vous pouvez utiliser du code tiers dans le cadre de votre cible. Il vous permet de réutiliser un code à partir de nombreuses sources telles que - un autre projet, un projet dans le même espace de travail, une autre cible, une bibliothèque, un cadre, etc.
Comment créer et utiliser une bibliothèque statique:
Comment créer et utiliser un framework dynamique [passer en statique]
[Système de construction Xcode]
[Composants Xcode]
[Éditeur de liens dynamique]