Entitlements ve vývoji pro iOS: co to je, jaké jsou typy a jak se konfigurují

Autor: IT Sectr Publikováno: 2026-05-18 Doba čtení: 8 min

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 — digitální oprávnění vložená do podpisu aplikace, která určují přístup k chráněným funkcím iOS a macOS.
  • Rozdíl od Permissions — Entitlements jsou kontrolovány systémem při spuštění a nejsou vyžadovány od uživatele; oprávnění jsou vyžadována za běhu prostřednictvím systémových dialogů.
  • Capabilities — Xcode seskupuje Entitlements do Capabilities: Push Notifications, iCloud, App Groups, In-App Purchase a další.
  • Entitlements File — (.entitlements) — XML soubor v projektu Xcode obsahující seznam práv ve formátu klíč-hodnota, podepsaný Apple.
  • Bezpečnost — entitlements jsou kontrolovány ve fázi podepisování kódu; padělání entitlements v nainstalované aplikaci naruší digitální podpis a zablokuje spuštění.

Co jsou Entitlements?

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.

Typy Entitlements v iOS

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

Capabilities a servisní Entitlements

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.

App Groups a Keychain Access

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.

Jak konfigurovat Entitlements

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.

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>

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.

Ruční vytvoření entitlement souboru

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.

cpp
// 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 a bezpečnost aplikace

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

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.

Často používané Entitlements

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ÚčelVyžaduje kontrolu
aps-environmentPush oznámeníNe
com.apple.developer.ubiquity-*iCloud synchronizaceNe
application-groupsSdílený kontejner aplikacíNe
com.apple.developer.healthkitHealthKit dataAno
com.apple.developer.nfc.*Čtení NFC štítkůAno
associated-domainsUniversal LinksNe

Často kladené otázky

Čím se Entitlements liší od Permissions v iOS?

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

Jak zkontrolovat Entitlements nainstalované aplikace?

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.

Lze změnit Entitlements po publikaci?

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

Co je Entitlements File v Xcode?

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.

Co jsou Capabilities v Xcode?

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í

  • Entitlements — digitální práva aplikace k používání chráněných systémových funkcí iOS a macOS, vložená do podpisu kódu.
  • Rozdíl od oprávnění — entitlements jsou kontrolovány systémem při spuštění na základě podpisu, nejsou vyžadovány od uživatele a nelze je odvolat.
  • Capabilities — seskupení entitlements v Xcode pro Push Notifications, iCloud, App Groups, In-App Purchase a další funkce.
  • Kontrola — pomocí příkazu codesign v terminálu macOS pro diagnostiku nainstalovaných práv aplikace.
  • Citlivé entitlements — HealthKit, NFC, PassKit vyžadují dodatečné schválení Apple prostřednictvím App Review.
  • Princip minimálních práv — aktivujte pouze nezbytné entitlements pro snížení útočné plochy a úspěšné absolvování kontroly.
  • Bezpečnost — entitlements jsou chráněny digitálním podpisem; padělání je nemožné bez opětovného podepsání celé aplikace.

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

Prodiskutovat projekt

Přečtěte si také