Entitlements în dezvoltarea iOS: ce este, ce tipuri există și cum se configurează

Autor: IT Sectr Publicat: 2026-05-18 Timp de citire: 8 min

Entitlements sunt drepturi și permisiuni digitale atribuite aplicației în faza de semnare a codului, care determină accesul la funcțiile protejate ale sistemului de operare Apple. Spre deosebire de permisiunile utilizatorului, Entitlements sunt verificate de sistem la pornirea aplicației și nu pot fi modificate de utilizator. Potrivit Apple Developer Documentation (2025), configurarea corectă a Entitlements este obligatorie pentru utilizarea iCloud, notificărilor Push și App Groups. Entitlements sunt un element cheie al modelului de securitate iOS și macOS.

Principalele puncte

  • Entitlements — permisiuni digitale încorporate în semnătura aplicației care determină accesul la funcțiile protejate iOS și macOS.
  • Diferența de Permissions — Entitlements sunt verificate de sistem la pornire și nu sunt solicitate utilizatorului; permisiunile sunt solicitate în runtime prin dialoguri de sistem.
  • Capabilities — Xcode grupează Entitlements în Capabilities: Push Notifications, iCloud, App Groups, In-App Purchase și altele.
  • Entitlements File — (.entitlements) — fișier XML în proiectul Xcode care conține lista drepturilor în format cheie-valoare, semnat de Apple.
  • Securitate — entitlements sunt verificate în etapa de code signing; falsificarea entitlements într-o aplicație instalată sparge semnătura digitală și blochează pornirea.

Ce sunt Entitlements?

Entitlements (din engleză — „drepturi”) — este o pereche cheie-valoare care este inclusă în semnătura de cod a aplicației în faza de construire și determină la ce funcții și date de sistem are acces aplicația. Entitlements sunt încorporate în modelul de securitate Apple de la apariția iOS SDK și sunt obligatorii pentru toate aplicațiile distribuite prin App Store.

Conceptul Entitlements diferă de permisiunile tradiționale (permissions) din Android. Dacă permisiunile Android sunt solicitate de la utilizator în momentul primei utilizări a funcției, Entitlements în iOS sunt verificate de sistem la pornirea aplicației pe baza semnăturii digitale. Utilizatorul nu poate revoca sau modifica un entitlement — acest drept este acordat dezvoltatorului prin App Store Connect și fixat în profilul de semnare.

Fiecare entitlement are o destinație și un format strict definite. De exemplu, com.apple.security.application-groups permite accesul la un container comun pentru un set de aplicații ale aceluiași dezvoltator, iar aps-environment activează suportul pentru notificări Push. Apple analizează manual solicitările de entitlements în procesul App Review, ceea ce previne abuzul de drepturi.

Tipuri de Entitlements în iOS

Entitlements sunt clasificate după destinația funcțională în mai multe categorii. Servicii de sistem — iCloud, Push Notifications, Siri. Securitate și date — Keychain Access Groups, App Groups, Data Protection. Rețea și comunicații — Multipath TCP, VPN, Hotspot Configuration. Capabilități hardware — Camera, Microphone, Bluetooth (prin capabilities asociate).

Capabilities și Entitlements de serviciu

Xcode grupează entitlements asociate în Capabilities — comutatoare de nivel înalt în fila Signing & Capabilities. Activarea unei Capability adaugă automat entitlements necesare în fișierul .entitlements. De exemplu, activarea Capability Push Notifications adaugă entitlement aps-environment cu valoarea development sau production, iar activarea iCloud adaugă un set de entitlements pentru CloudKit și Key-Value storage.

Unele capabilities necesită configurare suplimentară pe portalul Apple Developer. De exemplu, pentru App Groups trebuie înregistrat un identificator de grup pe portal, după care devine disponibil pentru selecție în Xcode. Pentru Push Notifications trebuie generată o cheie APNs sau un certificat. Fără acești pași preliminari, entitlement nu va funcționa chiar și cu un fișier .entitlements corect.

App Groups și Keychain Access

Entitlement com.apple.security.application-groups permite mai multor aplicații ale aceluiași dezvoltator să aibă un container comun în sistemul de fișiere. Acesta este utilizat pentru partajarea datelor între aplicația principală și extensii (Widget, Watch App, Share Extension). Toate aplicațiile dintr-un grup pot citi și scrie fișiere în directorul comun /Library/Group Containers/.

Keychain Access Groups (cheia keychain-access-groups) — un alt entitlement important, care permite aplicațiilor dintr-un grup accesul comun la elementele Keychain. Acest lucru este esențial pentru implementarea autentificării unificate: utilizatorul se autentifică într-o aplicație și obține automat acces la același cont în altă aplicație fără a reintroduce parola.

Cum se configurează Entitlements

Configurarea Entitlements se realizează în Xcode în fila Signing & Capabilities din setările targetului. Dezvoltatorul selectează Capabilities necesare din listă, iar Xcode creează sau actualizează automat fișierul .entitlements. Acest fișier este stocat în proiect în format XML cu structură plist și conține toate cheile entitlements pentru acest target.

objective-c
<?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>

La crearea manuală a fișierului entitlement, este important să se respecte formatul cheilor și prefixurile. Entitlements Apple folosesc stilul de domeniu inversat (com.apple.*). Entitlements personalizate pentru propriile scopuri sunt de asemenea posibile, dar trebuie înregistrate pe portalul dezvoltatorului. Xcode oferă completare automată pentru toate cheile standard de entitlements.

Pentru depanarea Entitlements utilizați comanda codesign în terminalul macOS. Comanda codesign -d --entitlements :- <calea_către_aplicație> afișează toate entitlements cu care este semnată aplicația. Acest lucru este util pentru diagnosticarea problemelor: dacă entitlement lipsește din rezultat, aplicația nu va primi acces la funcția corespunzătoare indiferent de setările din Xcode.

Crearea manuală a fișierului entitlement

Deși Xcode generează fișierul entitlement automat la activarea Capabilities, dezvoltatorii experimentați îl creează sau editează adesea manual pentru o reglare fină. Fișierul are extensia .entitlements și formatul plist (XML). În el se pot adăuga chei entitlement personalizate care nu sunt prezente în interfața Xcode sau se pot combina entitlements din diferite capabilities într-un singur fișier.

La editarea manuală este important să se monitorizeze corectitudinea sintactică a XML-ului. O eroare în structura plist va face ca entitlements să nu fie aplicate la semnare. Xcode verifică fișierul .entitlements în etapa de compilare și afișează o eroare la format incorect. Pentru proiecte complexe cu mai multe targeturi și extensii, se recomandă stocarea cheilor comune de entitlement în fișiere separate și importarea lor prin Build Settings.

cpp
// cli: verificarea entitlements ale aplicației instalate
codesign -d --entitlements :- /Applications/Safari.app

// Exemplu de ieșire care conține lista entitlements active
<dict>
    <key>com.apple.security.ts.apple-wifi</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
</dict>

Entitlements și securitatea aplicației

Entitlements joacă un rol cheie în modelul de securitate Apple. Deoarece entitlements fac parte din semnătura digitală a aplicației, falsificarea lor este imposibilă fără resemnarea codului. Apple verifică entitlements la mai multe niveluri: la construire, Xcode semnează entitlements împreună cu fișierul executabil; la instalare, sistemul verifică integritatea semnăturii; la pornire, verifică din nou entitlements.

Una dintre cerințele importante de securitate este principiul entitlement minim. Dezvoltatorul trebuie să activeze doar acele entitlements care sunt efectiv utilizate în aplicație. Entitlements inutile măresc suprafața de atac și pot duce la respingerea aplicației în App Review. Apple verifică explicit conformitatea entitlements cu funcționalitatea aplicației.

Unele entitlements sunt considerate sensibile (sensitive) și necesită aprobarea suplimentară a Apple. Acestea includ: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) și com.apple.developer.nfc.readersession.formats (NFC). Pentru obținerea acestor entitlements, trebuie justificată necesitatea lor în procesul App Review.

La lucrul cu entitlements este important să se țină cont de diferențele dintre iOS și macOS. Aplicațiile desktop macOS (Sandboxed) au un set mai larg de entitlements comparativ cu iOS. De exemplu, entitlement com.apple.security.temporary-exception.* permite ocolirea temporară a sandbox-ului pentru anumite operațiuni — în iOS astfel de entitlements lipsesc complet.

Entitlements și Provisioning Profile

Entitlements sunt strâns legate de profilele de semnare (Provisioning Profiles). Profilul de semnare este un fișier care leagă certificatul dezvoltatorului, lista dispozitivelor permise și setul de entitlements pentru o aplicație specifică. La instalarea aplicației, sistemul compară entitlements din cod cu entitlements din profilul de semnare. Dacă entitlement este prezent în cod, dar lipsește din profil, aplicația nu va primi acces la funcția corespunzătoare.

Pentru diagnosticarea problemelor legate de entitlements, verificați mai întâi profilul de semnare. Xcode generează automat profile pe baza capability selectate pe portalul Apple Developer. Dacă capability a fost adăugată în Xcode, dar nu este activă pe portal, aplicația va eșua cu eroare de semnare la încercarea de a utiliza o funcție protejată.

Entitlements frecvent utilizate

Să analizăm cele mai frecvent utilizate entitlements în dezvoltarea iOS. aps-environment (Push Notifications) — obligatoriu pentru trimiterea notificărilor push. com.apple.developer.ubiquity-container-identifiers (iCloud) — pentru sincronizarea datelor prin CloudKit. com.apple.security.application-groups — pentru partajarea datelor între aplicații și extensii. com.apple.developer.associated-domains — pentru Universal Links și Handoff.

Pentru fiecare dintre aceste entitlements există o procedură strictă de configurare. Push Notifications necesită generarea unei chei APNs pe portalul Apple Developer și activarea capability în Xcode. După aceasta, entitlement este adăugat automat în fișierul .entitlements. iCloud necesită configurarea unui container pe portal și selectarea lui în Xcode din lista derulantă.

Associated Domains — entitlement care leagă aplicația de un domeniu web. Este utilizat pentru Universal Links (linkuri profunde care se deschid direct în aplicație) și Handoff (continuarea lucrului pe alt dispozitiv Apple). Valoarea entitlement conține un array de șiruri în format applinks:example.com. Pentru funcționare, este necesară plasarea fișierului apple-app-site-association pe server.

Tabelul entitlements populare și destinația lor:

Entitlement KeyDestinațieNecesită revizuire
aps-environmentNotificări PushNu
com.apple.developer.ubiquity-*Sincronizare iCloudNu
application-groupsContainer comun al aplicațiilorNu
com.apple.developer.healthkitDate HealthKitDa
com.apple.developer.nfc.*Citire etichete NFCDa
associated-domainsUniversal LinksNu

Întrebări frecvente

Cu ce diferă Entitlements de Permissions în iOS?

Entitlements sunt drepturi statice încorporate în semnătura aplicației și verificate de sistem la pornire. Permissions sunt permisiuni dinamice solicitate de la utilizator în runtime (cameră, geolocație).

Cum se verifică Entitlements ale unei aplicații instalate?

Utilizați comanda codesign -d --entitlements în terminalul macOS. Pentru aplicațiile din App Store, entitlement se verifică prin utilitarul ProvisionQL sau prin Xcode Organizer.

Se pot modifica Entitlements după publicare?

Modificarea entitlements necesită o nouă construire și resemnarea aplicației. Dacă entitlement necesită aprobarea Apple, va trebui să treceți din nou prin App Review. Fără resemnare, modificarea entitlements este imposibilă.

Ce este Entitlements File în Xcode?

Fișierul .entitlements — un document XML în format plist stocat în proiectul Xcode. Acesta conține lista tuturor entitlements ale aplicației în formă structurată și este semnat împreună cu fișierul executabil.

Ce sunt Capabilities în Xcode?

Capabilities — comutatoare de nivel înalt în fila Signing & Capabilities din Xcode. Activarea unei capability adaugă automat entitlements corespunzătoare în fișierul .entitlements și configurează profilul de semnare.

Rezumat

  • Entitlements — drepturi digitale ale aplicației de a utiliza funcțiile de sistem protejate iOS și macOS, încorporate în semnătura codului.
  • Diferența de permisiuni — entitlements sunt verificate de sistem la pornire pe baza semnăturii, nu sunt solicitate utilizatorului și nu pot fi revocate.
  • Capabilities — grupări de entitlements în Xcode pentru Push Notifications, iCloud, App Groups, In-App Purchase și alte funcții.
  • Verificare — prin comanda codesign în terminalul macOS pentru diagnosticarea drepturilor instalate ale aplicației.
  • Entitlements sensibile — HealthKit, NFC, PassKit necesită aprobarea suplimentară a Apple prin App Review.
  • Principiul drepturilor minime — activați doar entitlements necesare pentru a reduce suprafața de atac și a trece cu succes revizuirea.
  • Securitate — entitlements sunt protejate prin semnătură digitală; falsificarea este imposibilă fără resemnarea întregii aplicații.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și