Entitlements i iOS-utveckling: vad är det, vilka typer finns och hur konfigureras de

Författare: IT Sectr Publicerad: 2026-05-18 Lästid: 8 min

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 — digitala behörigheter inbäddade i appens signatur som bestämmer åtkomst till skyddade iOS- och macOS-funktioner.
  • Skillnad från Permissions — Entitlements kontrolleras av systemet vid start och efterfrågas inte från användaren; behörigheter efterfrågas vid körning via systemdialoger.
  • Capabilities — Xcode grupperar Entitlements i Capabilities: Push Notifications, iCloud, App Groups, In-App Purchase med flera.
  • Entitlements-fil — (.entitlements) — XML-fil i Xcode-projektet som innehåller en lista över rättigheter i nyckel-värde-format, signerad av Apple.
  • Säkerhet — entitlements kontrolleras i kodsigneringsfasen; förfalskning av entitlements i en installerad app bryter den digitala signaturen och blockerar start.

Vad är Entitlements?

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.

Typer av Entitlements i iOS

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).

Capabilities och service-Entitlements

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.

App Groups och Keychain Access

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.

Konfigurera Entitlements

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.

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>

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.

Skapa entitlement-fil manuellt

Ä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.

cpp
// 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 och appsäkerhet

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 och Provisioning Profile

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.

Vanliga Entitlements

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 KeySyfteKräver granskning
aps-environmentPush-meddelandenNej
com.apple.developer.ubiquity-*iCloud-synkroniseringNej
application-groupsDelad app-behållareNej
com.apple.developer.healthkitHealthKit-dataJa
com.apple.developer.nfc.*NFC-taggavläsningJa
associated-domainsUniversal LinksNej

Vanliga frågor

Vad är skillnaden mellan Entitlements och Permissions i iOS?

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).

Hur kontrollerar man Entitlements för en installerad app?

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.

Kan man ändra Entitlements efter publicering?

Ä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.

Vad är Entitlements-filen i Xcode?

.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.

Vad är Capabilities i Xcode?

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

  • Entitlements — appens digitala rättigheter att använda skyddade systemfunktioner i iOS och macOS, inbäddade i kodsignaturen.
  • Skillnad från behörigheter — entitlements kontrolleras av systemet vid start baserat på signaturen, efterfrågas inte från användaren och kan inte återkallas.
  • Capabilities — grupperingar av entitlements i Xcode för Push Notifications, iCloud, App Groups, In-App Purchase och andra funktioner.
  • Kontroll — via kommandot codesign i macOS-terminalen för att diagnostisera installerade apprättigheter.
  • Känsliga entitlements — HealthKit, NFC, PassKit kräver ytterligare godkännande från Apple via App Review.
  • Princip om minimala rättigheter — aktivera endast nödvändiga entitlements för att minska attackytan och klara granskningen.
  • Säkerhet — entitlements skyddas av digital signatur; förfalskning är omöjlig utan om-signering av hela appen.

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.

Diskutera projektet

Läs också