Gli Entitlements sono diritti e permessi digitali assegnati a un'applicazione durante la fase di firma del codice che determinano l'accesso alle funzionalità protette del sistema operativo Apple. A differenza delle autorizzazioni utente, gli Entitlements vengono verificati dal sistema all'avvio dell'applicazione e non possono essere modificati dall'utente. Secondo la Documentazione per Sviluppatori Apple (2025), la configurazione corretta degli Entitlements è obbligatoria per utilizzare iCloud, le notifiche Push e gli App Groups. Entitlements sono un elemento chiave del modello di sicurezza di iOS e macOS.
Punti Chiave
Entitlements (tradotto dall'inglese come “diritti”) sono coppie chiave-valore incluse nella firma del codice dell'applicazione durante la compilazione che determinano a quali capacità e dati di sistema l'applicazione può accedere. Gli Entitlements fanno parte del modello di sicurezza di Apple sin dall'introduzione dell'iOS SDK e sono obbligatori per tutte le applicazioni distribuite tramite l'App Store.
Il concetto di Entitlements differisce dalle autorizzazioni tradizionali su Android. Mentre le autorizzazioni Android vengono richiesto all'utente al momento del primo utilizzo di una funzionalità, gli Entitlements in iOS vengono verificati dal sistema all'avvio dell'applicazione sulla base della firma digitale. L'utente non può revocare o modificare un entitlement — questo diritto viene concesso allo sviluppatore tramite App Store Connect e viene incorporato nel profilo di provisioning.
Ogni entitlement ha uno scopo e un formato strettamente definiti. Ad esempio, com.apple.security.application-groups consente l'accesso a un contenitore condiviso per un insieme di applicazioni dello stesso sviluppatore, mentre aps-environment abilita il supporto per le notifiche Push. Apple esamina manualmente le richieste di entitlements durante il processo di App Review, prevenendo l'abuso dei diritti.
Gli Entitlements sono classificati per scopo funzionale in diverse categorie. Servizi di Sistema — iCloud, Push Notifications, Siri. Sicurezza e Dati — Keychain Access Groups, App Groups, Data Protection. Rete e Comunicazione — Multipath TCP, VPN, Hotspot Configuration. Capacità Hardware — Fotocamera, Microfono, Bluetooth (tramite capabilities correlate).
Xcode raggruppa gli entitlements correlati in Capabilities — interruttori di alto livello nella scheda Signing & Capabilities. Abilitando una Capability si aggiungono automaticamente gli entitlements necessari al file .entitlements. Ad esempio, abilitando la capability Push Notifications si aggiunge l'entitlement aps-environment con valore development o production, mentre abilitando iCloud si aggiunge un insieme di entitlements per CloudKit e l'archiviazione Key-Value.
Alcune capabilities richiedono una configurazione aggiuntiva sul portale Apple Developer. Ad esempio, App Groups richiede la registrazione di un identificatore di gruppo sul portale, dopodiché diventa selezionabile in Xcode. Per le notifiche Push, è necessario generare una chiave o un certificato APNs. Senza questi passaggi preliminari, l'entitlement non funzionerà anche con un file .entitlements corretto.
L'entitlement com.apple.security.application-groups consente a più applicazioni dello stesso sviluppatore di condividere un contenitore comune nel file system. Viene utilizzato per condividere dati tra l'applicazione principale e le estensioni (Widget, Watch App, Share Extension). Tutte le applicazioni dello stesso gruppo possono leggere e scrivere file nella directory condivisa /Library/Group Containers/.
Keychain Access Groups (chiave keychain-access-groups) è un altro importante entitlement che consente alle applicazioni dello stesso gruppo di condividere l'accesso agli elementi del Keychain. Ciò è fondamentale per implementare l'accesso singolo: l'utente accede a un'applicazione e ottiene automaticamente l'accesso allo stesso account in un'altra applicazione senza dover reinserire la password.
La configurazione degli Entitlements viene effettuata in Xcode nella scheda Signing & Capabilities nelle impostazioni del target. Lo sviluppatore seleziona le Capabilities richieste dall'elenco e Xcode crea o aggiorna automaticamente il file .entitlements. Questo file viene memorizzato nel progetto in formato XML con struttura plist e contiene tutte le chiavi di entitlement per quel target.
<?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>
Quando si crea manualmente un file entitlement, è importante seguire il formato delle chiavi e i prefissi. Gli entitlements Apple utilizzano uno stile di dominio inverso (com.apple.*). Entitlements personalizzati per scopi propri sono anche possibili, ma devono essere registrati sul portale sviluppatore. Xcode fornisce il completamento automatico per tutte le chiavi di entitlement standard.
Per eseguire il debug degli Entitlements, utilizzare il comando codesign nel terminale macOS. Il comando codesign -d --entitlements :- <percorso_applicazione> mostra tutti gli entitlements con cui è firmata l'applicazione. Ciò è utile per diagnosticare problemi: se un entitlement manca nell'output, l'applicazione non otterrà l'accesso alla funzione corrispondente indipendentemente dalle impostazioni di Xcode.
Sebbene Xcode generi automaticamente il file entitlement quando si abilitano le Capabilities, gli sviluppatori esperti spesso lo creano o lo modificano manualmente per regolazioni fini. Il file ha estensione .entitlements e formato plist (XML). È possibile aggiungere chiavi di entitlement personalizzate non presenti nell'interfaccia di Xcode o combinare entitlements da diverse capabilities in un unico file.
Durante la modifica manuale, è importante garantire la correttezza sintattica dell'XML. Un errore nella struttura plist farà sì che gli entitlements non vengano applicati durante la firma. Xcode verifica il file .entitlements in fase di compilazione e mostra un errore se il formato non è corretto. Per progetti complessi con più target ed estensioni, si consiglia di memorizzare le chiavi di entitlement comuni in file separati e importarle tramite 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>
Gli Entitlements giocano un ruolo chiave nel modello di sicurezza di Apple. Poiché gli entitlements fanno parte della firma digitale dell'applicazione, la loro manomissione è impossibile senza ri-firmare il codice. Apple verifica gli entitlements a più livelli: durante la compilazione, Xcode firma gli entitlements insieme al file eseguibile; durante l'installazione, il sistema verifica l'integrità della firma; all'avvio, riverifica gli entitlements.
Un requisito di sicurezza importante è il principio del minimo entitlement. Lo sviluppatore dovrebbe includere solo gli entitlements effettivamente utilizzati nell'applicazione. Entitlements non necessari aumentano la superficie di attacco e possono causare il rifiuto dell'applicazione durante l'App Review. Apple verifica esplicitamente che gli entitlements corrispondano alla funzionalità dell'applicazione.
Alcuni entitlements sono considerati sensibili e richiedono un'approvazione aggiuntiva da Apple. Questi includono: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) e com.apple.developer.nfc.readersession.formats (NFC). Per ottenere questi entitlements, è necessario giustificarne la necessità durante il processo di App Review.
Quando si lavora con gli entitlements, è importante considerare le differenze tra iOS e macOS. Le applicazioni desktop macOS (Sandboxed) hanno un insieme più ampio di entitlements rispetto a iOS. Ad esempio, l'entitlement com.apple.security.temporary-exception.* consente di bypassare temporaneamente la sandbox per determinate operazioni — tali entitlements sono completamente assenti su iOS.
Gli Entitlements sono strettamente legati ai Profili di Provisioning. Un profilo di provisioning è un file che collega il certificato dello sviluppatore, un elenco di dispositivi autorizzati e un insieme di entitlements per un'applicazione specifica. Quando si installa un'applicazione, il sistema confronta gli entitlements nel codice con gli entitlements nel profilo di provisioning. Se un entitlement è presente nel codice ma assente dal profilo, l'applicazione non otterrà l'accesso alla funzione corrispondente.
Per diagnosticare problemi con gli entitlements, controllare prima il profilo di provisioning. Xcode genera automaticamente profili basati sulle capabilities selezionate sul portale Apple Developer. Se una capability viene aggiunta in Xcode ma non è attiva sul portale, l'applicazione si bloccherà con un errore di firma quando tenta di utilizzare una funzione protetta.
Esaminiamo gli entitlements più comunemente utilizzati nello sviluppo iOS. aps-environment (Notifiche Push) — obbligatorio per inviare notifiche push. com.apple.developer.ubiquity-container-identifiers (iCloud) — per la sincronizzazione dei dati tramite CloudKit. com.apple.security.application-groups — per condividere dati tra applicazioni ed estensioni. com.apple.developer.associated-domains — per Universal Links e Handoff.
Ognuno di questi entitlements ha una procedura di configurazione rigorosa. Notifiche Push richiedono la generazione di una chiave APNs sul portale Apple Developer e l'abilitazione della capability in Xcode. Successivamente, l'entitlement viene impostato automaticamente nel file .entitlements. iCloud richiede la configurazione di un contenitore sul portale e la sua selezione in Xcode dall'elenco a discesa.
Associated Domains — un entitlement che collega l'applicazione a un dominio web. Viene utilizzato per Universal Links (collegamenti profondi che si aprono direttamente nell'applicazione) e Handoff (continuare il lavoro su un altro dispositivo Apple). Il valore dell'entitlement contiene un array di stringhe nel formato applinks:example.com. Richiede il posizionamento di un file apple-app-site-association sul server.
Tabella degli entitlements popolari e dei loro scopi:
| Chiave Entitlement | Scopo | Richiede Revisione |
|---|---|---|
| aps-environment | Notifiche Push | No |
| com.apple.developer.ubiquity-* | Sincronizzazione iCloud | No |
| application-groups | Contenitore Condiviso | No |
| com.apple.developer.healthkit | Dati HealthKit | Sì |
| com.apple.developer.nfc.* | Lettura NFC | Sì |
| associated-domains | Universal Links | No |
Domande Frequenti
Entitlements sono diritti statici incorporati nella firma dell'applicazione e verificati dal sistema all'avvio. Le autorizzazioni sono permessi dinamici richiesti all'utente in fase di esecuzione (fotocamera, geolocalizzazione).
Utilizzare il comando codesign -d --entitlements nel terminale macOS. Per le applicazioni dell'App Store, gli entitlements vengono verificati tramite l'utility ProvisionQL o tramite Xcode Organizer.
Modificare gli entitlements richiede una nuova compilazione e la ri-firma dell'applicazione. Se l'entitlement richiede l'approvazione di Apple, sarà necessario ripassare dall'App Review. Senza ri-firma, è impossibile modificare gli entitlements.
Un file .entitlements è un documento XML in formato plist memorizzato nel progetto Xcode. Contiene un elenco di tutti gli entitlements dell'applicazione in forma strutturata e viene firmato insieme al file eseguibile.
Capabilities sono interruttori di alto livello nella scheda Signing & Capabilities in Xcode. Abilitare una capability aggiunge automaticamente gli entitlements corrispondenti al file .entitlements e configura il profilo di provisioning.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche