Entitlements sind digitale Rechte und Berechtigungen, die einer Anwendung während der Codesignaturphase zugewiesen werden und den Zugriff auf geschützte Funktionen des Apple-Betriebssystems bestimmen. Im Gegensatz zu Benutzerberechtigungen werden Entitlements vom System beim Start der Anwendung überprüft und können vom Benutzer nicht geändert werden. Laut der Apple Developer Documentation (2025) ist die korrekte Konfiguration von Entitlements für die Nutzung von iCloud, Push-Benachrichtigungen und App Groups obligatorisch. Entitlements sind ein Schlüsselelement des iOS- und macOS-Sicherheitsmodells.
Wichtigste Punkte
Entitlements (aus dem Englischen übersetzt als „Rechte“) sind Schlüssel-Wert-Paare, die zur Build-Zeit in die Codesignatur der Anwendung aufgenommen werden und bestimmen, auf welche Systemfunktionen und Daten die Anwendung zugreifen kann. Entitlements sind seit der Einführung des iOS SDK in das Sicherheitsmodell von Apple integriert und für alle über den App Store vertriebenen Anwendungen obligatorisch.
Das Konzept der Entitlements unterscheidet sich von den traditionellen Berechtigungen unter Android. Während Android-Berechtigungen vom Benutzer zum Zeitpunkt der ersten Nutzung einer Funktion angefordert werden, werden Entitlements in iOS vom System beim Start der Anwendung auf der Grundlage der digitalen Signatur überprüft. Der Benutzer kann ein entitlement weder widerrufen noch ändern — dieses Recht wird dem Entwickler über App Store Connect gewährt und im Provisioning-Profil verankert.
Jedes entitlement hat einen streng definierten Zweck und ein streng definiertes Format. Beispielsweise erlaubt com.apple.security.application-groups den Zugriff auf einen gemeinsamen Container für eine Reihe von Anwendungen desselben Entwicklers, während aps-environment die Unterstützung von Push-Benachrichtigungen aktiviert. Apple prüft entitlement-Anfragen während des App Review-Prozesses manuell, was den Missbrauch von Rechten verhindert.
Entitlements werden nach ihrem funktionalen Zweck in mehrere Kategorien eingeteilt. Systemdienste — iCloud, Push Notifications, Siri. Sicherheit und Daten — Keychain Access Groups, App Groups, Data Protection. Netzwerk und Kommunikation — Multipath TCP, VPN, Hotspot Configuration. Hardware-Funktionen — Kamera, Mikrofon, Bluetooth (über verwandte capabilities).
Xcode gruppiert verwandte entitlements in Capabilities — High-Level-Schalter auf der Registerkarte Signing & Capabilities. Das Aktivieren einer Capability fügt die erforderlichen entitlements automatisch zur .entitlements-Datei hinzu. Beispielsweise fügt das Aktivieren der Capability Push Notifications das entitlement aps-environment mit dem Wert development oder production hinzu, während das Aktivieren von iCloud einen Satz von entitlements für CloudKit und Key-Value-Speicher hinzufügt.
Einige capabilities erfordern zusätzliche Konfiguration im Apple Developer-Portal. Beispielsweise erfordert App Groups die Registrierung einer Gruppenkennung im Portal, wonach sie in Xcode auswählbar wird. Für Push-Benachrichtigungen muss ein APNs-Schlüssel oder ein Zertifikat generiert werden. Ohne diese vorbereitenden Schritte funktioniert das entitlement selbst mit einer korrekten .entitlements-Datei nicht.
Das entitlement com.apple.security.application-groups ermöglicht mehreren Anwendungen desselben Entwicklers, einen gemeinsamen Container im Dateisystem zu nutzen. Dies wird zum Teilen von Daten zwischen der Hauptanwendung und Erweiterungen (Widget, Watch App, Share Extension) verwendet. Alle Anwendungen derselben Gruppe können Dateien im gemeinsamen Verzeichnis /Library/Group Containers/ lesen und schreiben.
Keychain Access Groups (Schlüssel keychain-access-groups) ist ein weiteres wichtiges entitlement, das es Anwendungen derselben Gruppe ermöglicht, den Zugriff auf Keychain-Elemente zu teilen. Dies ist für die Implementierung des einmaligen Anmeldens von entscheidender Bedeutung: Der Benutzer meldet sich in einer Anwendung an und erhält automatisch Zugriff auf dasselbe Konto in einer anderen Anwendung, ohne das Passwort erneut eingeben zu müssen.
Die Konfiguration von Entitlements erfolgt in Xcode auf der Registerkarte Signing & Capabilities in den Target-Einstellungen. Der Entwickler wählt die erforderlichen Capabilities aus der Liste aus, und Xcode erstellt oder aktualisiert automatisch die .entitlements-Datei. Diese Datei wird im Projekt im XML-Format mit plist-Struktur gespeichert und enthält alle entitlement-Schlüssel für dieses 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>
Beim manuellen Erstellen einer entitlement-Datei ist es wichtig, das Schlüsselformat und die Präfixe zu beachten. Apple-entitlements verwenden einen Reverse-Domain-Stil (com.apple.*). Benutzerdefinierte entitlements für eigene Zwecke sind ebenfalls möglich, müssen jedoch im Entwicklerportal registriert werden. Xcode bietet eine automatische Vervollständigung für alle standardmäßigen entitlement-Schlüssel.
Zum Debuggen von Entitlements verwenden Sie den Befehl codesign im macOS-Terminal. Der Befehl codesign -d --entitlements :- <Pfad_zur_Anwendung> zeigt alle entitlements an, mit denen die Anwendung signiert ist. Dies ist nützlich zur Diagnose von Problemen: Wenn ein entitlement in der Ausgabe fehlt, erhält die Anwendung unabhängig von den Xcode-Einstellungen keinen Zugriff auf die entsprechende Funktion.
Obwohl Xcode die entitlement-Datei beim Aktivieren von Capabilities automatisch generiert, erstellen oder bearbeiten erfahrene Entwickler sie oft manuell für Feineinstellungen. Die Datei hat die Erweiterung .entitlements und das plist-Format (XML). Darin können benutzerdefinierte entitlement-Schlüssel hinzugefügt werden, die in der Xcode-Oberfläche nicht vorhanden sind, oder entitlements aus verschiedenen capabilities in einer Datei kombiniert werden.
Bei der manuellen Bearbeitung ist es wichtig, die syntaktische Korrektheit des XML sicherzustellen. Ein Fehler in der plist-Struktur führt dazu, dass die entitlements bei der Signatur nicht angewendet werden. Xcode überprüft die .entitlements-Datei zur Kompilierzeit und gibt einen Fehler aus, wenn das Format falsch ist. Für komplexe Projekte mit mehreren Targets und Erweiterungen wird empfohlen, gemeinsame entitlement-Schlüssel in separaten Dateien zu speichern und über die Build Settings zu importieren.
// 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>
Entitlements spielen eine Schlüsselrolle im Sicherheitsmodell von Apple. Da entitlements Teil der digitalen Signatur der Anwendung sind, ist ihre Manipulation ohne erneute Signierung des Codes unmöglich. Apple überprüft entitlements auf mehreren Ebenen: während des Builds signiert Xcode die entitlements zusammen mit der ausführbaren Datei; bei der Installation überprüft das System die Integrität der Signatur; beim Start überprüft es die entitlements erneut.
Eine wichtige Sicherheitsanforderung ist das Prinzip des minimalen entitlements. Der Entwickler sollte nur die entitlements einschließen, die tatsächlich in der Anwendung verwendet werden. Unnötige entitlements vergrößern die Angriffsfläche und können zur Ablehnung der Anwendung beim App Review führen. Apple überprüft explizit, ob die entitlements mit der Funktionalität der Anwendung übereinstimmen.
Einige entitlements gelten als sensibel und erfordern eine zusätzliche Genehmigung von Apple. Dazu gehören: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) und com.apple.developer.nfc.readersession.formats (NFC). Um diese entitlements zu erhalten, muss deren Notwendigkeit während des App Review-Prozesses begründet werden.
Bei der Arbeit mit entitlements ist es wichtig, die Unterschiede zwischen iOS und macOS zu berücksichtigen. macOS-Desktopanwendungen (Sandboxed) haben im Vergleich zu iOS einen breiteren Satz von entitlements. Beispielsweise erlaubt das entitlement com.apple.security.temporary-exception.* die vorübergehende Umgehung der Sandbox für bestimmte Operationen — solche entitlements fehlen unter iOS vollständig.
Entitlements sind eng mit Provisioning-Profilen verbunden. Ein Provisioning-Profil ist eine Datei, die das Entwicklerzertifikat, eine Liste erlaubter Geräte und einen Satz von entitlements für eine bestimmte Anwendung verknüpft. Bei der Installation einer Anwendung vergleicht das System die entitlements im Code mit den entitlements im Provisioning-Profil. Wenn ein entitlement im Code vorhanden ist, aber im Profil fehlt, erhält die Anwendung keinen Zugriff auf die entsprechende Funktion.
Um Probleme mit entitlements zu diagnostizieren, überprüfen Sie zunächst das Provisioning-Profil. Xcode generiert Profile automatisch basierend auf den ausgewählten capabilities im Apple Developer-Portal. Wenn eine capability in Xcode hinzugefügt, aber im Portal nicht aktiv ist, stürzt die Anwendung mit einem Signaturfehler ab, wenn sie versucht, eine geschützte Funktion zu verwenden.
Werfen wir einen Blick auf die am häufigsten verwendeten entitlements in der iOS-Entwicklung. aps-environment (Push-Benachrichtigungen) — obligatorisch zum Senden von Push-Benachrichtigungen. com.apple.developer.ubiquity-container-identifiers (iCloud) — zur Datensynchronisation über CloudKit. com.apple.security.application-groups — zum Teilen von Daten zwischen Anwendungen und Erweiterungen. com.apple.developer.associated-domains — für Universal Links und Handoff.
Jedes dieser entitlements hat eine strenge Konfigurationsprozedur. Push-Benachrichtigungen erfordern die Generierung eines APNs-Schlüssels im Apple Developer-Portal und die Aktivierung der capability in Xcode. Danach wird das entitlement automatisch in der .entitlements-Datei gesetzt. iCloud erfordert die Einrichtung eines Containers im Portal und dessen Auswahl in Xcode aus der Dropdown-Liste.
Associated Domains — ein entitlement, das die Anwendung mit einer Webdomain verknüpft. Es wird für Universal Links (Deep Links, die direkt in der Anwendung öffnen) und Handoff (Fortsetzen der Arbeit auf einem anderen Apple-Gerät) verwendet. Der entitlement-Wert enthält ein Array von Zeichenfolgen im Format applinks:example.com. Es erfordert das Platzieren einer apple-app-site-association-Datei auf dem Server.
Tabelle der beliebten entitlements und ihrer Zwecke:
| Entitlement-Schlüssel | Zweck | Erfordert Prüfung |
|---|---|---|
| aps-environment | Push-Benachrichtigungen | Nein |
| com.apple.developer.ubiquity-* | iCloud-Synchronisation | Nein |
| application-groups | Gemeinsamer App-Container | Nein |
| com.apple.developer.healthkit | HealthKit-Daten | Ja |
| com.apple.developer.nfc.* | NFC-Tag-Lesen | Ja |
| associated-domains | Universal Links | Nein |
Häufig gestellte Fragen
Entitlements sind statische Rechte, die in die Signatur der Anwendung eingebettet und beim Start vom System überprüft werden. Berechtigungen sind dynamische Genehmigungen, die zur Laufzeit vom Benutzer angefordert werden (Kamera, Standort).
Verwenden Sie den Befehl codesign -d --entitlements im macOS-Terminal. Für App Store-Anwendungen werden entitlements über das Dienstprogramm ProvisionQL oder über Xcode Organizer überprüft.
Das Ändern von entitlements erfordert einen neuen Build und eine erneute Signierung der Anwendung. Wenn das entitlement die Genehmigung von Apple erfordert, müssen Sie erneut durch den App Review gehen. Ohne erneute Signierung ist eine Änderung der entitlements unmöglich.
Eine .entitlements-Datei ist ein XML-Dokument im plist-Format, das im Xcode-Projekt gespeichert wird. Sie enthält eine Liste aller entitlements der Anwendung in strukturierter Form und wird zusammen mit der ausführbaren Datei signiert.
Capabilities sind High-Level-Schalter auf der Registerkarte Signing & Capabilities in Xcode. Das Aktivieren einer capability fügt automatisch die entsprechenden entitlements zur .entitlements-Datei hinzu und konfiguriert das Provisioning-Profil.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch