- Les applications macOS possèdent des composants plus complexes que les programmes en ligne de commande, avec des ressources d’interface comme les fenêtres et les menus gérées dans une structure distincte
- Sous Classic Mac OS, le code exécutable et les ressources étaient stockés dans le resource fork du fichier, mais à partir de Mac OS X, cela a été remplacé par une structure en bundle
- Un bundle d’app est organisé autour du répertoire Contents, avec des sous-dossiers comme MacOS, Resources, Frameworks et des fichiers clés comme Info.plist
- Par la suite, la signature de code, les reçus App Store et la notarisation ont été ajoutés, faisant évoluer cette structure pour renforcer la sécurité et l’intégrité
- Cette structure autonome de bundle d’application est devenue une base essentielle pour simplifier l’installation, la mise à jour et la suppression, tout en améliorant la sécurité et l’efficacité de maintenance
Structure des apps dans Classic Mac OS
- Dans les premières versions de Mac OS, les ressources d’interface comme les fenêtres et les menus étaient séparées de l’exécutable et stockées dans le resource fork
- Par exemple, les ressources de QuarkXPress 4.11 apparaissent dans ResEdit
- Le code exécutable est contenu dans les ressources CODE, et les informations de type et de creator du fichier y sont également stockées pour que le Finder puisse l’identifier
Structure en bundle dans Mac OS X
- Mac OS X a introduit la structure en bundle héritée de NeXTSTEP
- Une app prend la forme d’un répertoire avec l’extension
.app, contenant un dossier Contents
- Le dossier MacOS contient l’exécutable de l’app graphique ainsi que les outils en ligne de commande
- Le dossier Resources stocke les fichiers de ressources tels que l’icône de l’app et les composants de l’interface graphique
- Certaines apps incluent un dossier Frameworks pour embarquer des dylib (bibliothèques dynamiques)
- Le fichier Info.plist est obligatoire et définit le nom de l’exécutable, l’icône, la version minimale de macOS, les types de documents, le numéro de version, etc.
- Le fichier PkgInfo conserve les informations de type et de creator héritées de Classic Mac OS, mais n’est pas obligatoire
- Lors du lancement d’une app, launchd démarre le code exécutable, tandis que LaunchServices et RunningBoard effectuent la procédure d’initialisation à partir des informations de Info.plist
Sécurité et extensions dans macOS
- À partir de Mac OS X 10.5 Leopard (2007), la signature de code a été introduite, avec l’ajout du dossier
_CodeSignature
- Le fichier CodeResources contient le hash du répertoire de code (CDHash) pour vérifier l’intégrité de l’app
- Les apps distribuées via l’App Store incluent un reçu du Store dans le dossier
_MASReceipt
- Depuis 2018, la notarisation a été introduite, permettant à Apple d’émettre un ticket pouvant être « staple » au bundle via le fichier CodeResources
- Les bundles d’app modernes intègrent eux-mêmes des composants qui, autrefois, étaient installés dans des dossiers système
- Dossier Library :
LaunchDaemons, LoginItems, etc.
- Dossier XPCServices : services exécutables séparés utilisés par l’app
- Dossiers Plugins / Extensions : fonctionnalités d’extension de l’app et App Intents
- Certaines apps contiennent également un fichier version.plist
Avantages du bundle d’application
- Le fait de regrouper tous les composants dans le bundle simplifie l’installation, la mise à jour et la suppression
- Le risque d’absence de composants diminue, et la sécurité est renforcée grâce à la protection par signature et notarisation
- Les apps App Store ajoutent en plus des reçus et des tickets de notarisation pour renforcer la confiance
- Il n’existe pas de différence structurelle entre les architectures Intel et Arm : l’exécutable Mach-O est stocké sous forme de binaire universel (fat binary) contenant le code pour les deux plateformes
- Les signatures propres à chaque architecture sont également présentes dans le même fichier
Vue d’ensemble visuelle de la structure d’une app
- Dans le diagramme, le jaune pâle désigne les composants obligatoires ou présents dans presque toutes les apps
- Le vert désigne les éléments présents uniquement dans les apps distribuées via l’App Store, et le bleu correspond au ticket de notarisation optionnel
- Des éléments supplémentaires comme des workflows Automator ou des scripts peuvent aussi être inclus
- Dans l’ensemble, les apps macOS ont évolué vers une structure autonome centrée sur la sécurité
Aucun commentaire pour le moment.