Entitlements jsou digitální práva a oprávnění, která jsou aplikaci přiřazena ve fázi podepisování kódu a určují přístup k chráněným funkcím operačního systému Apple. Na rozdíl od uživatelských oprávnění jsou Entitlements kontrolovány systémem při spuštění aplikace a uživatel je nemůže změnit. Podle Apple Developer Documentation (2025) je správná konfigurace Entitlements povinná pro použití iCloud, Push oznámení a App Groups. Entitlements jsou klíčovým prvkem bezpečnostního modelu iOS a macOS.
Hlavní body
Entitlements (v překladu z angličtiny — „práva") — je pár klíč-hodnota, který je zahrnut do podpisu kódu aplikace ve fázi sestavení a určuje, ke kterým systémovým funkcím a datům má aplikace přístup. Entitlements jsou zabudovány do bezpečnostního modelu Apple od vzniku iOS SDK a jsou povinné pro všechny aplikace distribuované přes App Store.
Koncepce Entitlements se liší od tradičních oprávnění (permissions) na Androidu. Zatímco oprávnění Androidu jsou vyžadována od uživatele v okamžiku prvního použití funkce, Entitlements v iOS jsou kontrolovány systémem při spuštění aplikace na základě digitálního podpisu. Uživatel nemůže entitlement odvolat ani změnit — toto právo je uděleno vývojáři prostřednictvím App Store Connect a je zakotveno v profilu podepisování.
Každý entitlement má přesně definovaný účel a formát. Například com.apple.security.application-groups povoluje přístup ke sdílenému kontejneru pro sadu aplikací jednoho vývojáře a aps-environment zapíná podporu pro Push oznámení. Apple ručně kontroluje žádosti o entitlements v procesu App Review, což zabraňuje zneužívání práv.
Entitlements jsou klasifikovány podle funkčního účelu do několika kategorií. Systémové služby — iCloud, Push Notifications, Siri. Bezpečnost a data — Keychain Access Groups, App Groups, Data Protection. Síť a komunikace — Multipath TCP, VPN, Hotspot Configuration. Hardwarové možnosti — Camera, Microphone, Bluetooth (prostřednictvím souvisejících capabilities).
Xcode seskupuje související entitlements do Capabilities — přepínačů na vysoké úrovni na kartě Signing & Capabilities. Aktivace Capability automaticky přidá potřebné entitlements do souboru .entitlements. Například aktivace Capability Push Notifications přidá entitlement aps-environment s hodnotou development nebo production a aktivace iCloud přidá sadu entitlements pro CloudKit a Key-Value storage.
Některé capabilities vyžadují další konfiguraci na portálu Apple Developer. Například pro App Groups je třeba zaregistrovat identifikátor skupiny na portálu, poté se stane dostupným pro výběr v Xcode. Pro Push Notifications je třeba vygenerovat APNs klíč nebo certifikát. Bez těchto předběžných kroků nebude entitlement fungovat ani se správným souborem .entitlements.
Entitlement com.apple.security.application-groups umožňuje několika aplikacím jednoho vývojáře mít sdílený kontejner v souborovém systému. Používá se pro sdílení dat mezi hlavní aplikací a rozšířeními (Widget, Watch App, Share Extension). Všechny aplikace z jedné skupiny mohou číst a zapisovat soubory do sdíleného adresáře /Library/Group Containers/.
Keychain Access Groups (klíč keychain-access-groups) — další důležitý entitlement, který umožňuje aplikacím z jedné skupiny sdílený přístup k prvkům Keychain. To je klíčové pro implementaci jednotné autentizace: uživatel se přihlásí v jedné aplikaci a automaticky získá přístup ke stejnému účtu v jiné aplikaci bez opětovného zadávání hesla.
Konfigurace Entitlements se provádí v Xcode na kartě Signing & Capabilities v nastavení targetu. Vývojář vybere potřebné Capabilities ze seznamu a Xcode automaticky vytvoří nebo aktualizuje soubor .entitlements. Tento soubor je uložen v projektu ve formátu XML se strukturou plist a obsahuje všechny klíče entitlements pro tento 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>
Při ručním vytváření entitlement souboru je důležité dodržovat formát klíčů a prefixy. Apple Entitlements používají reverzní doménový styl (com.apple.*). Vlastní entitlements pro vlastní účely jsou také možné, ale musí být zaregistrovány na vývojářském portálu. Xcode poskytuje automatické doplňování pro všechny standardní klíče entitlements.
Pro ladění Entitlements použijte příkaz codesign v terminálu macOS. Příkaz codesign -d --entitlements :- <cesta_k_aplikaci> zobrazí všechny entitlements, kterými je aplikace podepsána. To je užitečné pro diagnostiku problémů: pokud entitlement chybí ve výstupu, aplikace nezíská přístup k odpovídající funkci bez ohledu na nastavení v Xcode.
Ačkoli Xcode generuje entitlement soubor automaticky při aktivaci Capabilities, zkušení vývojáři jej často vytvářejí nebo upravují ručně pro jemné doladění. Soubor má příponu .entitlements a formát plist (XML). Lze v něm přidávat vlastní entitlement klíče, které nejsou k dispozici v rozhraní Xcode, nebo kombinovat entitlements z různých capabilities v jednom souboru.
Při ruční úpravě je důležité sledovat syntaktickou správnost XML. Chyba ve struktuře plist způsobí, že entitlements nebudou aplikovány při podepisování. Xcode kontroluje soubor .entitlements ve fázi kompilace a zobrazí chybu při nesprávném formátu. Pro složité projekty s více targety a rozšířeními se doporučuje ukládat společné entitlement klíče do samostatných souborů a importovat je přes Build Settings.
// cli: kontrola entitlements nainstalované aplikace
codesign -d --entitlements :- /Applications/Safari.app
// Příklad výstupu obsahuje seznam aktivních entitlements
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Entitlements hrají klíčovou roli v bezpečnostním modelu Apple. Protože entitlements jsou součástí digitálního podpisu aplikace, jejich padělání je nemožné bez opětovného podepsání kódu. Apple kontroluje entitlements na několika úrovních: při sestavení Xcode podepisuje entitlements spolu se spustitelným souborem; při instalaci systém kontroluje integritu podpisu; při spuštění znovu ověřuje entitlements.
Jedním z důležitých bezpečnostních požadavků je princip minimálního entitlement. Vývojář by měl aktivovat pouze ty entitlements, které jsou skutečně používány v aplikaci. Zbytečné entitlements zvyšují útočnou plochu a mohou vést k zamítnutí aplikace při App Review. Apple explicitně kontroluje soulad entitlements s funkčností aplikace.
Některé entitlements jsou považovány za citlivé (sensitive) a vyžadují dodatečné schválení Apple. Patří sem: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) a com.apple.developer.nfc.readersession.formats (NFC). Pro získání těchto entitlements je nutné odůvodnit jejich potřebu v procesu App Review.
Při práci s entitlements je důležité zohlednit rozdíly mezi iOS a macOS. Desktopové aplikace macOS (Sandboxed) mají širší sadu entitlements ve srovnání s iOS. Například entitlement com.apple.security.temporary-exception.* umožňuje dočasně obejít sandbox pro určité operace — v iOS takové entitlements zcela chybí.
Entitlements jsou úzce propojeny s profily podepisování (Provisioning Profiles). Profil podepisování je soubor, který spojuje vývojářský certifikát, seznam povolených zařízení a sadu entitlements pro konkrétní aplikaci. Při instalaci aplikace systém porovnává entitlements v kódu s entitlements v profilu podepisování. Pokud entitlement existuje v kódu, ale chybí v profilu, aplikace nezíská přístup k odpovídající funkci.
Pro diagnostiku problémů s entitlements nejprve zkontrolujte profil podepisování. Xcode automaticky generuje profily na základě vybrané capability na portálu Apple Developer. Pokud byla capability přidána v Xcode, ale není aktivní na portálu, aplikace spadne s chybou podepisování při pokusu o použití chráněné funkce.
Podívejme se na nejčastěji používané entitlements ve vývoji iOS. aps-environment (Push Notifications) — povinný pro odesílání push oznámení. com.apple.developer.ubiquity-container-identifiers (iCloud) — pro synchronizaci dat přes CloudKit. com.apple.security.application-groups — pro sdílení dat mezi aplikacemi a rozšířeními. com.apple.developer.associated-domains — pro Universal Links a Handoff.
Pro každý z těchto entitlements existuje přísný postup konfigurace. Push Notifications vyžadují vygenerování APNs klíče na portálu Apple Developer a aktivaci capability v Xcode. Poté je entitlement automaticky přidán do souboru .entitlements. iCloud vyžaduje konfiguraci kontejneru na portálu a jeho výběr v Xcode z rozbalovacího seznamu.
Associated Domains — entitlement, který spojuje aplikaci s webovou doménou. Používá se pro Universal Links (hluboké odkazy otevírající se přímo v aplikaci) a Handoff (pokračování práce na jiném zařízení Apple). Hodnota entitlement obsahuje pole řetězců ve formátu applinks:example.com. Pro fungování je vyžadováno umístění souboru apple-app-site-association na serveru.
Tabulka populárních entitlements a jejich účelů:
| Entitlement Key | Účel | Vyžaduje kontrolu |
|---|---|---|
| aps-environment | Push oznámení | Ne |
| com.apple.developer.ubiquity-* | iCloud synchronizace | Ne |
| application-groups | Sdílený kontejner aplikací | Ne |
| com.apple.developer.healthkit | HealthKit data | Ano |
| com.apple.developer.nfc.* | Čtení NFC štítků | Ano |
| associated-domains | Universal Links | Ne |
Často kladené otázky
Entitlements — statická práva vložená do podpisu aplikace a kontrolovaná systémem při spuštění. Permissions — dynamická oprávnění vyžadovaná od uživatele za běhu (kamera, geolokace).
Použijte příkaz codesign -d --entitlements v terminálu macOS. Pro aplikace z App Store se entitlement kontroluje pomocí nástroje ProvisionQL nebo přes Xcode Organizer.
Změna entitlements vyžaduje nové sestavení a opětovné podepsání aplikace. Pokud entitlement vyžaduje schválení Apple, bude nutné znovu projít App Review. Bez opětovného podepsání je změna entitlements nemožná.
Soubor .entitlements — XML dokument ve formátu plist uložený v projektu Xcode. Obsahuje strukturovaný seznam všech entitlements aplikace a je podepisován spolu se spustitelným souborem.
Capabilities — přepínače na vysoké úrovni na kartě Signing & Capabilities v Xcode. Aktivace capability automaticky přidá odpovídající entitlements do souboru .entitlements a nakonfiguruje profil podepisování.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také