Les Entitlements sont des droits et permissions numériques attribués à une application lors de la phase de signature de code qui déterminent l'accès aux fonctionnalités protégées du système d'exploitation Apple. Contrairement aux autorisations utilisateur, les Entitlements sont vérifiés par le système au lancement de l'application et ne peuvent pas être modifiés par l'utilisateur. Selon la Documentation Apple Developer (2025), la configuration correcte des Entitlements est obligatoire pour utiliser iCloud, les notifications Push et les App Groups. Entitlements sont un élément clé du modèle de sécurité d'iOS et macOS.
Points clés
Entitlements (traduit de l'anglais par « droits ») sont des paires clé-valeur incluses dans la signature de code de l'application lors de la compilation qui déterminent à quelles capacités et données système l'application peut accéder. Les Entitlements font partie du modèle de sécurité d'Apple depuis l'introduction du SDK iOS et sont obligatoires pour toutes les applications distribuées via l'App Store.
Le concept d'Entitlements diffère des autorisations traditionnelles sur Android. Alors que les autorisations Android sont demandées à l'utilisateur au moment de la première utilisation d'une fonctionnalité, les Entitlements sous iOS sont vérifiés par le système au lancement de l'application sur la base de la signature numérique. L'utilisateur ne peut ni révoquer ni modifier un entitlement « ce droit est accordé au développeur via App Store Connect et est intégré dans le profil de provisionnement.
Chaque entitlement a un objectif et un format strictement définis. Par exemple, com.apple.security.application-groups permet l'accès à un conteneur partagé pour un ensemble d'applications du même développeur, tandis que aps-environment active la prise en charge des notifications Push. Apple examine manuellement les demandes d'entitlements lors du processus d'App Review, ce qui empêche l'abus des droits.
Les Entitlements sont classés par objectif fonctionnel en plusieurs catégories. Services système « iCloud, Push Notifications, Siri. Sécurité et données « Keychain Access Groups, App Groups, Data Protection. Réseau et communication « Multipath TCP, VPN, Hotspot Configuration. Capacités matérielles « Appareil photo, Microphone, Bluetooth (via les capabilities associées).
Xcode regroupe les entitlements associés en Capabilities « des interrupteurs haut niveau dans l'onglet Signing & Capabilities. Activer une Capability ajoute automatiquement les entitlements nécessaires au fichier .entitlements. Par exemple, activer la capability Push Notifications ajoute l'entitlement aps-environment avec une valeur development ou production, tandis qu'activer iCloud ajoute un ensemble d'entitlements pour CloudKit et le stockage Key-Value.
Certaines capabilities nécessitent une configuration supplémentaire sur le portail Apple Developer. Par exemple, App Groups nécessite l'enregistrement d'un identifiant de groupe sur le portail, après quoi il devient disponible pour la sélection dans Xcode. Pour les notifications Push, une clé ou un certificat APNs doit être généré. Sans ces étapes préalables, l'entitlement ne fonctionnera pas même avec un fichier .entitlements correct.
L'entitlement com.apple.security.application-groups permet à plusieurs applications du même développeur de partager un conteneur commun sur le système de fichiers. Il est utilisé pour partager des données entre l'application principale et les extensions (Widget, Watch App, Share Extension). Toutes les applications du même groupe peuvent lire et écrire des fichiers dans le répertoire partagé /Library/Group Containers/.
Keychain Access Groups (clé keychain-access-groups) est un autre entitlement important qui permet aux applications du même groupe de partager l'accès aux éléments du Keychain. Ceci est essentiel pour implémenter l'authentification unique : l'utilisateur se connecte à une application et accède automatiquement au même compte dans une autre application sans ressaisir le mot de passe.
La configuration des Entitlements se fait dans Xcode sous l'onglet Signing & Capabilities dans les paramètres de la cible. Le développeur sélectionne les Capabilities requises dans la liste, et Xcode crée ou met à jour automatiquement le fichier .entitlements. Ce fichier est stocké dans le projet au format XML avec une structure plist et contient toutes les clés d'entitlement pour cette cible.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
<key>aps-environment</key>
<string>development</string>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.example.keychain</string>
</array>
</dict>
</plist>
Lors de la création manuelle d'un fichier entitlement, il est important de respecter le format des clés et les préfixes. Les entitlements Apple utilisent un style de domaine inversé (com.apple.*). Les entitlements personnalisés pour vos propres besoins sont également possibles, mais doivent être enregistrés sur le portail développeur. Xcode fournit la saisie automatique pour toutes les clés d'entitlement standard.
Pour déboguer les Entitlements, utilisez la commande codesign dans le terminal macOS. La commande codesign -d --entitlements :- <chemin_vers_l'application> affiche tous les entitlements avec lesquels l'application est signée. Ceci est utile pour diagnostiquer les problèmes : si un entitlement est absent dans la sortie, l'application n'aura pas accès à la fonction correspondante indépendamment des paramètres Xcode.
Bien que Xcode génère le fichier entitlement automatiquement lors de l'activation des Capabilities, les développeurs expérimentés le créent ou le modifient souvent manuellement pour un réglage fin. Le fichier a l'extension .entitlements et le format plist (XML). Vous pouvez y ajouter des clés d'entitlement personnalisées qui ne sont pas présentes dans l'interface Xcode, ou combiner des entitlements de différentes capabilities dans un seul fichier.
Lors de l'édition manuelle, il est important d'assurer la correction syntaxique du XML. Une erreur dans la structure plist entraînera la non-application des entitlements lors de la signature. Xcode vérifie le fichier .entitlements à la compilation et génère une erreur si le format est incorrect. Pour les projets complexes avec plusieurs cibles et extensions, il est recommandé de stocker les clés d'entitlement communes dans des fichiers séparés et de les importer via les Build Settings.
// cli: checking entitlements of an installed application
codesign -d --entitlements :- /Applications/Safari.app
// Example output contains a list of active entitlements
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Les Entitlements jouent un rôle clé dans le modèle de sécurité d'Apple. Étant donné que les entitlements font partie de la signature numérique de l'application, leur falsification est impossible sans re-signer le code. Apple vérifie les entitlements à plusieurs niveaux : lors de la compilation, Xcode signe les entitlements avec le fichier exécutable ; lors de l'installation, le système vérifie l'intégrité de la signature ; au lancement, il re-vérifie les entitlements.
Une exigence de sécurité importante est le principe du moindre entitlement. Le développeur ne doit inclure que les entitlements réellement utilisés dans l'application. Les entitlements inutiles augmentent la surface d'attaque et peuvent entraîner le rejet de l'application lors de l'App Review. Apple vérifie explicitement que les entitlements correspondent aux fonctionnalités de l'application.
Certains entitlements sont considérés comme sensibles et nécessitent une approbation supplémentaire d'Apple. Ceux-ci incluent : com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) et com.apple.developer.nfc.readersession.formats (NFC). Pour obtenir ces entitlements, vous devez justifier leur nécessité lors du processus d'App Review.
Lorsque vous travaillez avec des entitlements, il est important de prendre en compte les différences entre iOS et macOS. Les applications de bureau macOS (Sandboxed) disposent d'un ensemble d'entitlements plus large par rapport à iOS. Par exemple, l'entitlement com.apple.security.temporary-exception.* permet de contourner temporairement le sandbox pour certaines opérations « de tels entitlements sont complètement absents sur iOS.
Les Entitlements sont étroitement liés aux profils de provisionnement (Provisioning Profiles). Un profil de provisionnement est un fichier qui lie le certificat de développeur, une liste d'appareils autorisés et un ensemble d'entitlements pour une application spécifique. Lors de l'installation d'une application, le système compare les entitlements dans le code avec les entitlements dans le profil de provisionnement. Si un entitlement est présent dans le code mais absent du profil, l'application n'aura pas accès à la fonction correspondante.
Pour diagnostiquer les problèmes d'entitlements, vérifiez d'abord le profil de provisionnement. Xcode génère automatiquement des profils basés sur les capabilities sélectionnées sur le portail Apple Developer. Si une capability est ajoutée dans Xcode mais n'est pas active sur le portail, l'application plantera avec une erreur de signature lors de la tentative d'utilisation d'une fonction protégée.
Examinons les entitlements les plus couramment utilisés dans le développement iOS. aps-environment (Notifications Push) « obligatoire pour envoyer des notifications push. com.apple.developer.ubiquity-container-identifiers (iCloud) « pour la synchronisation des données via CloudKit. com.apple.security.application-groups « pour le partage de données entre applications et extensions. com.apple.developer.associated-domains « pour les Universal Links et Handoff.
Chacun de ces entitlements a une procédure de configuration stricte. Notifications Push nécessite la génération d'une clé APNs sur le portail Apple Developer et l'activation de la capability dans Xcode. Après cela, l'entitlement est défini automatiquement dans le fichier .entitlements. iCloud nécessite la configuration d'un conteneur sur le portail et sa sélection dans Xcode dans la liste déroulante.
Associated Domains « un entitlement qui lie l'application à un domaine web. Il est utilisé pour les Universal Links (liens profonds qui s'ouvrent directement dans l'application) et Handoff (continuer le travail sur un autre appareil Apple). La valeur de l'entitlement contient un tableau de chaînes au format applinks:example.com. Cela nécessite le placement d'un fichier apple-app-site-association sur le serveur.
Tableau des entitlements populaires et de leurs objectifs :
| Clé Entitlement | Objectif | Nécessite un examen |
|---|---|---|
| aps-environment | Notifications Push | Non |
| com.apple.developer.ubiquity-* | Synchronisation iCloud | Non |
| application-groups | Conteneur partagé d'applications | Non |
| com.apple.developer.healthkit | Données HealthKit | Oui |
| com.apple.developer.nfc.* | Lecture NFC | Oui |
| associated-domains | Universal Links | Non |
Foire aux questions
Entitlements sont des droits statiques intégrés dans la signature de l'application et vérifiés par le système au lancement. Les autorisations sont des permissions dynamiques demandées à l'utilisateur à l'exécution (appareil photo, géolocalisation).
Utilisez la commande codesign -d --entitlements dans le terminal macOS. Pour les applications de l'App Store, les entitlements sont vérifiés via l'utilitaire ProvisionQL ou via Xcode Organizer.
La modification des entitlements nécessite une nouvelle compilation et une re-signature de l'application. Si l'entitlement nécessite l'approbation d'Apple, vous devrez repasser par l'App Review. Sans re-signature, il est impossible de modifier les entitlements.
Un fichier .entitlements est un document XML au format plist stocké dans le projet Xcode. Il contient une liste de tous les entitlements de l'application de manière structurée et est signé avec le fichier exécutable.
Capabilities sont des interrupteurs haut niveau dans l'onglet Signing & Capabilities dans Xcode. Activer une capability ajoute automatiquement les entitlements correspondants au fichier .entitlements et configure le profil de provisionnement.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi