Entitlements zijn digitale rechten en machtigingen die aan een app worden toegekend in de coderingsfase en bepalen de toegang tot beschermde functies van het Apple-besturingssysteem. In tegenstelling tot gebruikersmachtigingen worden Entitlements door het systeem gecontroleerd bij het starten van de app en kunnen niet door de gebruiker worden gewijzigd. Volgens Apple Developer Documentation (2025) is een correcte configuratie van Entitlements verplicht voor het gebruik van iCloud, Push-meldingen en App Groups. Entitlements zijn een sleutelelement van het beveiligingsmodel van iOS en macOS.
Belangrijkste punten
Entitlements (uit het Engels vertaald — „rechten") — zijn een sleutel-waardepaar dat in de coderingshandtekening van de app wordt opgenomen tijdens de bouwfase en bepaalt tot welke systeemfuncties en gegevens de app toegang heeft. Entitlements zijn sinds de komst van iOS SDK in het Apple-beveiligingsmodel ingebouwd en zijn verplicht voor alle apps die via de App Store worden gedistribueerd.
Het concept van Entitlements verschilt van traditionele machtigingen (permissions) op Android. Terwijl Android-machtigingen aan de gebruiker worden gevraagd op het moment van eerste gebruik van een functie, worden Entitlements in iOS bij het starten van de app door het systeem gecontroleerd op basis van de digitale handtekening. De gebruiker kan een entitlement niet intrekken of wijzigen — dit recht wordt aan de ontwikkelaar verleend via App Store Connect en vastgelegd in het ondertekeningsprofiel.
Elke entitlement heeft een strikt gedefinieerd doel en formaat. Bijvoorbeeld, com.apple.security.application-groups staat toegang tot een gedeelde container toe voor een set apps van dezelfde ontwikkelaar, en aps-environment schakelt ondersteuning voor Push-meldingen in. Apple beoordeelt entitlement-verzoeken handmatig in het App Review-proces, wat misbruik van rechten voorkomt.
Entitlements worden op basis van functioneel doel in verschillende categorieën ingedeeld. Systeemdiensten — iCloud, Push Notifications, Siri. Beveiliging en gegevens — Keychain Access Groups, App Groups, Data Protection. Netwerk en communicatie — Multipath TCP, VPN, Hotspot Configuration. Hardwaremogelijkheden — Camera, Microphone, Bluetooth (via gerelateerde capabilities).
Xcode groepeert gerelateerde entitlements in Capabilities — hoogwaardige schakelaars op het tabblad Signing & Capabilities. Het inschakelen van een Capability voegt automatisch de benodigde entitlements toe aan het .entitlements-bestand. Bijvoorbeeld, het inschakelen van de Capability Push Notifications voegt de entitlement aps-environment toe met de waarde development of production, en het inschakelen van iCloud voegt een set entitlements voor CloudKit en Key-Value storage toe.
Sommige capabilities vereisen extra configuratie op het Apple Developer-portaal. Bijvoorbeeld, voor App Groups moet een groeps-ID op het portaal worden geregistreerd, waarna deze beschikbaar wordt voor selectie in Xcode. Voor Push Notifications moet een APNs-sleutel of certificaat worden gegenereerd. Zonder deze voorbereidende stappen werkt de entitlement niet, zelfs niet met een correct .entitlements-bestand.
De entitlement com.apple.security.application-groups staat meerdere apps van dezelfde ontwikkelaar toe om een gedeelde container in het bestandssysteem te hebben. Dit wordt gebruikt voor het delen van gegevens tussen de hoofdapp en extensies (Widget, Watch App, Share Extension). Alle apps uit één groep kunnen bestanden lezen en schrijven in de gedeelde map /Library/Group Containers/.
Keychain Access Groups (sleutel keychain-access-groups) — nog een belangrijke entitlement die apps uit één groep gedeelde toegang tot Keychain-elementen geeft. Dit is cruciaal voor de implementatie van uniforme authenticatie: de gebruiker logt in bij één app en krijgt automatisch toegang tot hetzelfde account in een andere app zonder het wachtwoord opnieuw in te voeren.
Het configureren van Entitlements gebeurt in Xcode op het tabblad Signing & Capabilities in de target-instellingen. De ontwikkelaar selecteert de gewenste Capabilities uit de lijst en Xcode maakt of werkt automatisch het .entitlements-bestand bij. Dit bestand wordt in het project opgeslagen in XML-formaat met een plist-structuur en bevat alle entitlement-sleutels voor deze 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>
Bij het handmatig maken van een entitlement-bestand is het belangrijk om de sleutelnotatie en prefixen te volgen. Apple Entitlements gebruiken de omgekeerde domeinstijl (com.apple.*). Aangepaste entitlements voor eigen doeleinden zijn ook mogelijk, maar moeten op het ontwikkelaarsportaal worden geregistreerd. Xcode biedt automatisch aanvullen voor alle standaard entitlement-sleutels.
Gebruik de opdracht codesign in de macOS-terminal voor het debuggen van Entitlements. De opdracht codesign -d --entitlements :- <pad_naar_app> toont alle entitlements waarmee de app is ondertekend. Dit is handig voor het diagnosticeren van problemen: als een entitlement ontbreekt in de uitvoer, krijgt de app geen toegang tot de bijbehorende functie, ongeacht de instellingen in Xcode.
Hoewel Xcode het entitlement-bestand automatisch genereert bij het inschakelen van Capabilities, maken ervaren ontwikkelaars het vaak handmatig aan of bewerken het voor fijnafstemming. Het bestand heeft de extensie .entitlements en het formaat plist (XML). Er kunnen aangepaste entitlement-sleutels aan worden toegevoegd die niet in de Xcode-interface worden weergegeven, of entitlements uit verschillende capabilities kunnen in één bestand worden gecombineerd.
Bij handmatig bewerken is het belangrijk om te letten op de syntactische correctheid van de XML. Een fout in de plist-structuur zorgt ervoor dat de entitlements niet worden toegepast bij het ondertekenen. Xcode controleert het .entitlements-bestand in de compilatiefase en geeft een foutmelding bij een onjuist formaat. Voor complexe projecten met meerdere targets en extensies wordt aanbevolen om gedeelde entitlement-sleutels in afzonderlijke bestanden op te slaan en deze te importeren via Build Settings.
// cli: controleer entitlements van geïnstalleerde app
codesign -d --entitlements :- /Applications/Safari.app
// Voorbeelduitvoer bevat lijst met actieve entitlements
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Entitlements spelen een sleutelrol in het beveiligingsmodel van Apple. Omdat entitlements deel uitmaken van de digitale handtekening van de app, is vervalsing onmogelijk zonder de code opnieuw te ondertekenen. Apple controleert entitlements op meerdere niveaus: bij het bouwen ondertekent Xcode entitlements samen met het uitvoerbare bestand; bij installatie controleert het systeem de integriteit van de handtekening; bij het starten worden de entitlements opnieuw geverifieerd.
Een van de belangrijke beveiligingseisen is het principe van minimale entitlement. De ontwikkelaar moet alleen die entitlements inschakelen die daadwerkelijk in de app worden gebruikt. Overbodige entitlements vergroten het aanvalsoppervlak en kunnen leiden tot afwijzing van de app in App Review. Apple controleert expliciet de overeenstemming van entitlements met de functionaliteit van de app.
Sommige entitlements worden als gevoelig (sensitive) beschouwd en vereisen extra goedkeuring van Apple. Deze omvatten: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) en com.apple.developer.nfc.readersession.formats (NFC). Om deze entitlements te verkrijgen, moet de noodzaak ervan worden gerechtvaardigd in het App Review-proces.
Bij het werken met entitlements is het belangrijk rekening te houden met de verschillen tussen iOS en macOS. Desktop-apps voor macOS (Sandboxed) hebben een bredere set entitlements in vergelijking met iOS. Bijvoorbeeld, de entitlement com.apple.security.temporary-exception.* staat tijdelijk omzeilen van de sandbox toe voor bepaalde bewerkingen — in iOS ontbreken dergelijke entitlements volledig.
Entitlements zijn nauw verbonden met ondertekeningsprofielen (Provisioning Profiles). Een ondertekeningsprofiel is een bestand dat het ontwikkelaarscertificaat, de lijst met toegestane apparaten en de set entitlements voor een specifieke app koppelt. Bij installatie van de app vergelijkt het systeem de entitlements in de code met de entitlements in het ondertekeningsprofiel. Als een entitlement in de code aanwezig is maar in het profiel ontbreekt, krijgt de app geen toegang tot de bijbehorende functie.
Voor het diagnosticeren van problemen met entitlements controleert u eerst het ondertekeningsprofiel. Xcode genereert automatisch profielen op basis van de geselecteerde capability op het Apple Developer-portaal. Als een capability in Xcode is toegevoegd maar niet actief is op het portaal, zal de app crashen met een ondertekeningsfout bij het proberen te gebruiken van een beschermde functie.
Laten we de meest gebruikte entitlements in iOS-ontwikkeling bekijken. aps-environment (Push Notifications) — verplicht voor het verzenden van pushmeldingen. com.apple.developer.ubiquity-container-identifiers (iCloud) — voor gegevenssynchronisatie via CloudKit. com.apple.security.application-groups — voor het delen van gegevens tussen apps en extensies. com.apple.developer.associated-domains — voor Universal Links en Handoff.
Voor elk van deze entitlements bestaat een strikte configuratieprocedure. Push Notifications vereisen het genereren van een APNs-sleutel op het Apple Developer-portaal en het inschakelen van de capability in Xcode. Daarna wordt de entitlement automatisch aan het .entitlements-bestand toegevoegd. iCloud vereist het configureren van een container op het portaal en het selecteren ervan in Xcode uit de vervolgkeuzelijst.
Associated Domains — een entitlement die de app aan een webdomein koppelt. Het wordt gebruikt voor Universal Links (diepe links die direct in de app worden geopend) en Handoff (verder werken op een ander Apple-apparaat). De waarde van de entitlement bevat een array van strings in het formaat applinks:example.com. Voor werking is het plaatsen van het bestand apple-app-site-association op de server vereist.
Tabel met populaire entitlements en hun doeleinden:
| Entitlement Key | Doel | Vereist beoordeling |
|---|---|---|
| aps-environment | Push-meldingen | Nee |
| com.apple.developer.ubiquity-* | iCloud-synchronisatie | Nee |
| application-groups | Gedeelde app-container | Nee |
| com.apple.developer.healthkit | HealthKit-gegevens | Ja |
| com.apple.developer.nfc.* | NFC-tag lezen | Ja |
| associated-domains | Universal Links | Nee |
Veelgestelde vragen
Entitlements zijn statische rechten ingebed in de app-handtekening en gecontroleerd door het systeem bij het starten. Permissions zijn dynamische machtigingen die tijdens runtime aan de gebruiker worden gevraagd (camera, locatie).
Gebruik de opdracht codesign -d --entitlements in de macOS-terminal. Voor apps uit de App Store wordt de entitlement gecontroleerd via het hulpprogramma ProvisionQL of via Xcode Organizer.
Wijziging van entitlements vereist een nieuwe build en het opnieuw ondertekenen van de app. Als een entitlement goedkeuring van Apple vereist, moet u opnieuw door App Review gaan. Zonder opnieuw ondertekenen is wijziging van entitlements onmogelijk.
Het .entitlements-bestand — een XML-document in plist-formaat dat in het Xcode-project wordt opgeslagen. Het bevat een gestructureerde lijst van alle entitlements van de app en wordt samen met het uitvoerbare bestand ondertekend.
Capabilities zijn hoogwaardige schakelaars op het tabblad Signing & Capabilities in Xcode. Het inschakelen van een capability voegt automatisch de bijbehorende entitlements toe aan het .entitlements-bestand en configureert het ondertekeningsprofiel.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook