Entitlements är digitala rättigheter och behörigheter som tilldelas en app i kodsigneringsfasen och bestämmer åtkomst till skyddade funktioner i Apples operativsystem. Till skillnad från användarbehörigheter kontrolleras Entitlements av systemet när appen startas och kan inte ändras av användaren. Enligt Apple Developer Documentation (2025) är korrekt konfiguration av Entitlements obligatorisk för användning av iCloud, Push-meddelanden och App Groups. Entitlements är en nyckelelement i säkerhetsmodellen för iOS och macOS.
Huvudpunkter
Entitlements (översatt från engelska — "rättigheter") — är ett nyckel-värde-par som ingår i appens kodsignatur i byggfasen och bestämmer vilka systemfunktioner och data appen har åtkomst till. Entitlements har varit inbäddade i Apples säkerhetsmodell sedan iOS SDK introducerades och är obligatoriska för alla appar som distribueras via App Store.
Konceptet med Entitlements skiljer sig från traditionella behörigheter (permissions) på Android. Medan Android-behörigheter efterfrågas från användaren vid första användning av en funktion, kontrolleras Entitlements i iOS av systemet vid appstart baserat på den digitala signaturen. Användaren kan inte återkalla eller ändra ett entitlement — denna rättighet ges till utvecklaren via App Store Connect och fastställs i signeringsprofilen.
Varje entitlement har ett strikt definierat syfte och format. Till exempel tillåter com.apple.security.application-groups åtkomst till en delad behållare för en uppsättning appar från samma utvecklare, och aps-environment aktiverar stöd för Push-meddelanden. Apple granskar manuellt förfrågningar om entitlements i App Review-processen, vilket förhindrar missbruk av rättigheter.
Entitlements klassificeras efter funktionellt syfte i flera kategorier. Systemtjänster — iCloud, Push Notifications, Siri. Säkerhet och data — Keychain Access Groups, App Groups, Data Protection. Nätverk och kommunikation — Multipath TCP, VPN, Hotspot Configuration. Hårdvarufunktioner — Camera, Microphone, Bluetooth (via relaterade capabilities).
Xcode grupperar relaterade entitlements i Capabilities — högnivåomkopplare på fliken Signing & Capabilities. Aktivering av en Capability lägger automatiskt till nödvändiga entitlements i .entitlements-filen. Till exempel lägger aktivering av Capability Push Notifications till entitlement aps-environment med värdet development eller production, och aktivering av iCloud lägger till en uppsättning entitlements för CloudKit och Key-Value storage.
Vissa capabilities kräver ytterligare konfiguration på Apple Developer-portalen. Till exempel för App Groups måste ett grupp-ID registreras på portalen, varefter det blir tillgängligt för val i Xcode. För Push Notifications måste en APNs-nyckel eller ett certifikat genereras. Utan dessa förberedande steg fungerar inte entitlement ens med en korrekt .entitlements-fil.
Entitlement com.apple.security.application-groups tillåter flera appar från samma utvecklare att ha en delad behållare i filsystemet. Detta används för att dela data mellan huvudappen och tillägg (Widget, Watch App, Share Extension). Alla appar från en grupp kan läsa och skriva filer i den delade katalogen /Library/Group Containers/.
Keychain Access Groups (nyckel keychain-access-groups) — ytterligare en viktig entitlement som tillåter appar från en grupp delad åtkomst till Keychain-element. Detta är avgörande för implementering av enhetlig autentisering: användaren loggar in i en app och får automatiskt åtkomst till samma konto i en annan app utan att behöva ange lösenordet igen.
Konfiguration av Entitlements görs i Xcode på fliken Signing & Capabilities i mål-inställningarna. Utvecklaren väljer önskade Capabilities från listan och Xcode skapar eller uppdaterar automatiskt .entitlements-filen. Denna fil lagras i projektet i XML-format med plist-struktur och innehåller alla entitlement-nycklar för detta mål.
<?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>
Vid manuell skapande av entitlement-fil är det viktigt att följa nyckelformatet och prefix. Apples Entitlements använder omvänd domänstil (com.apple.*). Anpassade entitlements för egna ändamål är också möjliga men måste registreras på utvecklarportalen. Xcode ger autokomplettering för alla standard entitlement-nycklar.
För felsökning av Entitlements, använd kommandot codesign i macOS-terminalen. Kommandot codesign -d --entitlements :- <sökväg_till_app> visar alla entitlements som appen är signerad med. Detta är användbart för att diagnostisera problem: om en entitlement saknas i utdata får appen inte åtkomst till motsvarande funktion oavsett inställningar i Xcode.
Även om Xcode genererar entitlement-filen automatiskt vid aktivering av Capabilities, skapar eller redigerar erfarna utvecklare den ofta manuellt för finjustering. Filen har tillägget .entitlements och formatet plist (XML). I den kan man lägga till anpassade entitlement-nycklar som inte visas i Xcode-gränssnittet, eller kombinera entitlements från olika capabilities i en fil.
Vid manuell redigering är det viktigt att övervaka syntaxkorrektheten i XML. Ett fel i plist-strukturen gör att entitlements inte tillämpas vid signering. Xcode kontrollerar .entitlements-filen i kompileringsstadiet och visar ett fel vid felaktigt format. För komplexa projekt med flera mål och tillägg rekommenderas att lagra gemensamma entitlement-nycklar i separata filer och importera dem via Build Settings.
// cli: kontrollera entitlements för installerad app
codesign -d --entitlements :- /Applications/Safari.app
// Exempelutdata innehåller lista över aktiva entitlements
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Entitlements spelar en nyckelroll i Apples säkerhetsmodell. Eftersom entitlements är en del av appens digitala signatur är förfalskning omöjlig utan om-signering av koden. Apple kontrollerar entitlements på flera nivåer: vid byggning signerar Xcode entitlements tillsammans med den körbara filen; vid installation kontrollerar systemet signaturens integritet; vid start verifieras entitlements igen.
Ett av de viktiga säkerhetskraven är principen om minimal entitlement. Utvecklaren bör endast aktivera de entitlements som faktiskt används i appen. Överflödiga entitlements ökar attackytan och kan leda till att appen avslås i App Review. Apple kontrollerar uttryckligen överensstämmelsen mellan entitlements och appens funktionalitet.
Vissa entitlements anses vara känsliga (sensitive) och kräver ytterligare godkännande från Apple. Dessa inkluderar: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) och com.apple.developer.nfc.readersession.formats (NFC). För att få dessa entitlements måste deras nödvändighet motiveras i App Review-processen.
När man arbetar med entitlements är det viktigt att ta hänsyn till skillnaderna mellan iOS och macOS. macOS skrivbordsappar (Sandboxed) har en bredare uppsättning entitlements jämfört med iOS. Till exempel tillåter entitlement com.apple.security.temporary-exception.* tillfällig kringgående av sandlådan för vissa operationer — i iOS saknas sådana entitlements helt.
Entitlements är nära kopplade till signeringsprofiler (Provisioning Profiles). En signeringsprofil är en fil som kopplar samman utvecklarcertifikatet, listan över tillåtna enheter och uppsättningen entitlements för en specifik app. Vid installation av appen jämför systemet entitlements i koden med entitlements i signeringsprofilen. Om ett entitlement finns i koden men saknas i profilen får appen inte åtkomst till motsvarande funktion.
För att diagnostisera problem med entitlements, kontrollera först signeringsprofilen. Xcode genererar automatiskt profiler baserat på vald capability på Apple Developer-portalen. Om en capability har lagts till i Xcode men inte är aktiv på portalen kommer appen att krascha med ett signeringsfel när den försöker använda en skyddad funktion.
Låt oss titta på de vanligaste entitlements i iOS-utveckling. aps-environment (Push Notifications) — obligatorisk för att skicka push-meddelanden. com.apple.developer.ubiquity-container-identifiers (iCloud) — för datasynkronisering via CloudKit. com.apple.security.application-groups — för att dela data mellan appar och tillägg. com.apple.developer.associated-domains — för Universal Links och Handoff.
För var och en av dessa entitlements finns en strikt konfigurationsprocedur. Push Notifications kräver generering av en APNs-nyckel på Apple Developer-portalen och aktivering av capability i Xcode. Därefter läggs entitlement automatiskt till i .entitlements-filen. iCloud kräver konfiguration av en behållare på portalen och val av den i Xcode från rullgardinslistan.
Associated Domains — entitlement som kopplar appen till en webbdomän. Det används för Universal Links (djupa länkar som öppnas direkt i appen) och Handoff (fortsättning av arbete på en annan Apple-enhet). Entitlement-värdet innehåller en array av strängar i formatet applinks:example.com. För funktion krävs placering av filen apple-app-site-association på servern.
Tabell över populära entitlements och deras syften:
| Entitlement Key | Syfte | Kräver granskning |
|---|---|---|
| aps-environment | Push-meddelanden | Nej |
| com.apple.developer.ubiquity-* | iCloud-synkronisering | Nej |
| application-groups | Delad app-behållare | Nej |
| com.apple.developer.healthkit | HealthKit-data | Ja |
| com.apple.developer.nfc.* | NFC-taggavläsning | Ja |
| associated-domains | Universal Links | Nej |
Vanliga frågor
Entitlements är statiska rättigheter inbäddade i appens signatur som kontrolleras av systemet vid start. Permissions är dynamiska behörigheter som efterfrågas från användaren vid körning (kamera, geoplats).
Använd kommandot codesign -d --entitlements i macOS-terminalen. För appar från App Store kontrolleras entitlement via verktyget ProvisionQL eller via Xcode Organizer.
Ändring av entitlements kräver en ny byggning och om-signering av appen. Om entitlement kräver godkännande från Apple måste man gå igenom App Review igen. Utan om-signering är ändring av entitlements omöjlig.
.entitlements-filen — ett XML-dokument i plist-format som lagras i Xcode-projektet. Den innehåller en strukturerad lista över alla appens entitlements och signeras tillsammans med den körbara filen.
Capabilities är högnivåomkopplare på fliken Signing & Capabilities i Xcode. Aktivering av en capability lägger automatiskt till motsvarande entitlements i .entitlements-filen och konfigurerar signeringsprofilen.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också