Az Entitlements olyan digitális jogok és engedélyek, amelyeket az alkalmazás a kód aláírásának szakaszában kap, és meghatározzák a hozzáférést az Apple operációs rendszer védett funkcióihoz. A felhasználói engedélyektől eltérően az Entitlements-eket a rendszer az alkalmazás indításakor ellenőrzi, és a felhasználó nem módosíthatja azokat. A Apple Developer Documentation (2025) szerint az Entitlements helyes konfigurációja kötelező az iCloud, a Push értesítések és az App Groups használatához. Az Entitlements az iOS és macOS biztonsági modelljének kulcseleme.
Főbb pontok
Az Entitlements (angol fordításban — „jogosultságok") — egy kulcs-érték pár, amely az alkalmazás kód aláírásába kerül az építési szakaszban, és meghatározza, hogy az alkalmazás mely rendszerfunkciókhoz és adatokhoz férhet hozzá. Az Entitlements az iOS SDK megjelenése óta be vannak építve az Apple biztonsági modelljébe, és kötelezőek az App Store-on keresztül terjesztett összes alkalmazás számára.
Az Entitlements koncepciója eltér a hagyományos engedélyektől (permissions) Androidon. Míg az Android-engedélyeket a felhasználótól kérik a funkció első használatakor, addig az iOS-ben az Entitlements-eket a rendszer az alkalmazás indításakor ellenőrzi a digitális aláírás alapján. A felhasználó nem vonhatja vissza vagy változtathatja meg az entitlement-et — ezt a jogot a fejlesztő kapja az App Store Connect-en keresztül, és az aláírási profilban rögzítik.
Minden entitlement-nek szigorúan meghatározott célja és formátuma van. Például a com.apple.security.application-groups engedélyezi a hozzáférést egy megosztott tárolóhoz egy fejlesztő alkalmazáskészlete számára, a aps-environment pedig bekapcsolja a Push értesítések támogatását. Az Apple manuálisan felülvizsgálja az entitlement-kérelmeket az App Review folyamatában, ami megakadályozza a jogokkal való visszaélést.
Az Entitlements-ek funkcionális cél szerint több kategóriába sorolhatók. Rendszerszolgáltatások — iCloud, Push Notifications, Siri. Biztonság és adatok — Keychain Access Groups, App Groups, Data Protection. Hálózat és kommunikáció — Multipath TCP, VPN, Hotspot Configuration. Hardveres képességek — Camera, Microphone, Bluetooth (kapcsolódó capabilities-en keresztül).
Az Xcode a kapcsolódó entitlements-eket Capabilities-be csoportosítja — magas szintű kapcsolók a Signing & Capabilities lapon. Egy Capability bekapcsolása automatikusan hozzáadja a szükséges entitlements-eket a .entitlements fájlhoz. Például a Push Notifications Capability bekapcsolása hozzáadja az aps-environment entitlement-et development vagy production értékkel, az iCloud bekapcsolása pedig entitlements-készletet ad hozzá a CloudKit és Key-Value storage számára.
Néhány capabilities további konfigurációt igényel az Apple Developer portálon. Például az App Groups-hoz regisztrálni kell egy csoportazonosítót a portálon, ami után elérhetővé válik az Xcode-ban való kiválasztáshoz. A Push Notifications-hoz APNs-kulcsot vagy tanúsítványt kell generálni. Ezen előkészítő lépések nélkül az entitlement nem fog működni, még egy helyes .entitlements fájl esetén sem.
A com.apple.security.application-groups entitlement lehetővé teszi, hogy egy fejlesztő több alkalmazása közös tárolóval rendelkezzen a fájlrendszerben. Ez az adatok megosztására szolgál a fő alkalmazás és a bővítmények között (Widget, Watch App, Share Extension). Egy csoportba tartozó összes alkalmazás olvashat és írhat fájlokat a /Library/Group Containers/ közös könyvtárban.
A Keychain Access Groups (kulcs keychain-access-groups) — egy másik fontos entitlement, amely lehetővé teszi az egy csoportba tartozó alkalmazások számára a Keychain elemekhez való közös hozzáférést. Ez kritikus fontosságú az egységes hitelesítés megvalósításához: a felhasználó bejelentkezik az egyik alkalmazásba, és automatikusan hozzáfér ugyanahhoz a fiókhoz egy másik alkalmazásban anélkül, hogy újra meg kellene adnia a jelszót.
Az Entitlements konfigurálása az Xcode-ban a Signing & Capabilities lapon történik a target beállításaiban. A fejlesztő kiválasztja a szükséges Capabilities-eket a listából, és az Xcode automatikusan létrehozza vagy frissíti a .entitlements fájlt. Ez a fájl a projektben XML formátumban, plist struktúrával tárolódik, és tartalmazza az összes entitlement kulcsot ehhez a target-hez.
<?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>
Az entitlement fájl manuális létrehozásakor fontos betartani a kulcsformátumot és az előtagokat. Az Apple Entitlements fordított domain stílust használ (com.apple.*). Egyéni célokra szánt entitlements-ek is lehetségesek, de regisztrálni kell őket a fejlesztői portálon. Az Xcode automatikus kiegészítést biztosít az összes szabványos entitlement kulcshoz.
Az Entitlements hibakereséséhez használja a codesign parancsot a macOS terminálban. A codesign -d --entitlements :- <alkalmazás_útvonala> parancs megjeleníti az összes entitlement-et, amellyel az alkalmazást aláírták. Ez hasznos a problémák diagnosztizálásához: ha egy entitlement hiányzik a kimenetből, az alkalmazás nem fog hozzáférni a megfelelő funkcióhoz, függetlenül az Xcode-beli beállításoktól.
Bár az Xcode automatikusan generálja az entitlement fájlt a Capabilities bekapcsolásakor, a tapasztalt fejlesztők gyakran manuálisan hozzák létre vagy szerkesztik a finomhangoláshoz. A fájl .entitlements kiterjesztéssel és plist (XML) formátummal rendelkezik. Lehetőség van egyéni entitlement kulcsok hozzáadására, amelyek nem jelennek meg az Xcode felületén, vagy különböző capabilities-ből származó entitlements-ek egyesítésére egy fájlban.
Kézi szerkesztéskor fontos figyelni az XML szintaktikai helyességére. A plist struktúrában lévő hiba miatt az entitlements-ek nem lesznek alkalmazva az aláíráskor. Az Xcode ellenőrzi a .entitlements fájlt a fordítási szakaszban, és hibát jelez helytelen formátum esetén. Összetett, több target-tel és bővítménnyel rendelkező projektek esetén ajánlott a közös entitlement kulcsokat külön fájlokban tárolni, és azokat a Build Settings-en keresztül importálni.
// cli: telepített alkalmazás entitlements-einek ellenőrzése
codesign -d --entitlements :- /Applications/Safari.app
// Példa kimenet az aktív entitlements-ek listáját tartalmazza
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Az Entitlements kulcsszerepet játszanak az Apple biztonsági modelljében. Mivel az entitlements-ek az alkalmazás digitális aláírásának részét képezik, meghamisításuk lehetetlen a kód újraírása nélkül. Az Apple több szinten ellenőrzi az entitlements-eket: az építéskor az Xcode aláírja az entitlements-eket a végrehajtható fájllal együtt; telepítéskor a rendszer ellenőrzi az aláírás integritását; indításkor újra ellenőrzi az entitlements-eket.
Az egyik fontos biztonsági követelmény a minimális entitlement elve. A fejlesztőnek csak azokat az entitlements-eket szabad bekapcsolnia, amelyeket ténylegesen használ az alkalmazásban. A felesleges entitlements-ek növelik a támadási felületet, és az alkalmazás elutasításához vezethetnek az App Review során. Az Apple kifejezetten ellenőrzi az entitlements-ek és az alkalmazás funkcionalitásának összhangját.
Néhány entitlement érzékeny (sensitive) besorolású, és az Apple további jóváhagyását igényli. Ezek közé tartozik: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) és com.apple.developer.nfc.readersession.formats (NFC). Ezen entitlements-ek megszerzéséhez indokolni kell szükségességüket az App Review folyamatában.
Az entitlements-ekkel való munka során fontos figyelembe venni az iOS és macOS közötti különbségeket. A macOS asztali alkalmazásai (Sandboxed) szélesebb entitlements-készlettel rendelkeznek az iOS-hez képest. Például a com.apple.security.temporary-exception.* entitlement lehetővé teszi a sandbox ideiglenes megkerülését bizonyos műveletekhez — iOS-ben ilyen entitlements-ek egyáltalán nem léteznek.
Az Entitlements szorosan kapcsolódnak az aláírási profilokhoz (Provisioning Profiles). Az aláírási profil egy olyan fájl, amely összeköti a fejlesztői tanúsítványt, az engedélyezett eszközök listáját és az entitlements-készletet egy adott alkalmazáshoz. Az alkalmazás telepítésekor a rendszer összehasonlítja a kódban lévő entitlements-eket az aláírási profilban lévő entitlements-ekkel. Ha egy entitlement szerepel a kódban, de hiányzik a profilból, az alkalmazás nem fog hozzáférni a megfelelő funkcióhoz.
Az entitlements-ekkel kapcsolatos problémák diagnosztizálásához először ellenőrizze az aláírási profilt. Az Xcode automatikusan profilokat generál az Apple Developer portálon kiválasztott capability alapján. Ha egy capability-t hozzáadtak az Xcode-ban, de nem aktív a portálon, az alkalmazás aláírási hibával fog összeomlani, amikor egy védett funkciót próbál használni.
Tekintsük át a leggyakrabban használt entitlements-eket az iOS-fejlesztésben. aps-environment (Push Notifications) — kötelező a push értesítések küldéséhez. com.apple.developer.ubiquity-container-identifiers (iCloud) — adatszinkronizáláshoz a CloudKit-en keresztül. com.apple.security.application-groups — adatok megosztásához alkalmazások és bővítmények között. com.apple.developer.associated-domains — Universal Links és Handoff funkciókhoz.
Minden egyes ilyen entitlement-hez szigorú konfigurációs eljárás tartozik. Push Notifications APNs-kulcs generálását igényli az Apple Developer portálon és a capability bekapcsolását az Xcode-ban. Ezt követően az entitlement automatikusan hozzáadódik a .entitlements fájlhoz. Az iCloud megköveteli a tároló konfigurálását a portálon és annak kiválasztását az Xcode-ban a legördülő listából.
Associated Domains — entitlement, amely az alkalmazást egy webdomainhez kapcsolja. Universal Links (az alkalmazásban közvetlenül megnyíló mélyhivatkozások) és Handoff (munka folytatása másik Apple eszközön) funkciókhoz használatos. Az entitlement értéke stringek tömbjét tartalmazza applinks:example.com formátumban. A működéshez az apple-app-site-association fájl elhelyezése szükséges a szerveren.
A népszerű entitlements-ek és céljaik táblázata:
| Entitlement Key | Cél | Felülvizsgálatot igényel |
|---|---|---|
| aps-environment | Push értesítések | Nem |
| com.apple.developer.ubiquity-* | iCloud szinkronizálás | Nem |
| application-groups | Megosztott alkalmazástároló | Nem |
| com.apple.developer.healthkit | HealthKit adatok | Igen |
| com.apple.developer.nfc.* | NFC címkék olvasása | Igen |
| associated-domains | Universal Links | Nem |
Gyakran Ismételt Kérdések
Az Entitlements — statikus jogok, amelyek az alkalmazás aláírásába vannak ágyazva, és a rendszer indításkor ellenőrzi őket. A Permissions — dinamikus engedélyek, amelyeket futásidőben kérnek a felhasználótól (kamera, helymeghatározás).
Használja a codesign -d --entitlements parancsot a macOS terminálban. Az App Store-ból származó alkalmazások esetén az entitlement a ProvisionQL segédprogramon vagy az Xcode Organizeren keresztül ellenőrizhető.
Az entitlements-ek módosítása új build-et és az alkalmazás újraaláírását igényli. Ha az entitlement az Apple jóváhagyását igényli, újra át kell esni az App Review-on. Újraaláírás nélkül az entitlements módosítása lehetetlen.
A .entitlements fájl — egy plist formátumú XML dokumentum, amely az Xcode projektben tárolódik. Tartalmazza az alkalmazás összes entitlement-jének strukturált listáját, és a végrehajtható fájllal együtt írják alá.
Capabilities — magas szintű kapcsolók az Xcode Signing & Capabilities lapján. Egy capability bekapcsolása automatikusan hozzáadja a megfelelő entitlements-eket a .entitlements fájlhoz és konfigurálja az aláírási profilt.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is