Entitlements су дигитална права и дозволе које се додељују апликацији у фази потписивања кода и одређују приступ заштићеним функцијама Apple оперативног система. За разлику од корисничких дозвола, Entitlements се проверавају од стране система при покретању апликације и не могу их мењати корисници. Према Apple Developer Documentation (2025), правилно подешавање Entitlements-а је обавезно за коришћење iCloud-а, Push обавештења и App Groups-а. Entitlements су кључни елемент безбедносног модела iOS-а и macOS-а.
Главне тачке
Entitlements (у преводу са енглеског — „права”) — пар кључ-вредност који се укључује у потпис кода апликације у фази изградње и одређује којим системским функцијама и подацима апликација има приступ. Entitlements су уграђени у Apple-ов безбедносни модел од појаве iOS SDK-а и обавезни су за све апликације које се дистрибуирају преко App Store-а.
Концепт Entitlements-а се разликује од традиционалних дозвола (permissions) на Android-у. Док се Android дозволе траже од корисника у тренутку прве употребе функције, Entitlements у iOS-у проверава систем при покретању апликације на основу дигиталног потписа. Корисник не може опозвати или променити entitlement — ово право се додељује програмеру путем App Store Connect-а и учвршћује се у профилу потписивања.
Сваки entitlement има строго дефинисану намену и формат. На пример, com.apple.security.application-groups омогућава приступ заједничком контејнеру за скуп апликација истог програмера, а aps-environment укључује подршку за Push обавештења. Apple ручно прегледа захтеве за entitlements у процесу App Review-а, што спречава злоупотребу права.
Entitlements се класификују по функционалној намени у неколико категорија. Системски сервиси — iCloud, Push Notifications, Siri. Безбедност и подаци — Keychain Access Groups, App Groups, Data Protection. Мрежа и комуникације — Multipath TCP, VPN, Hotspot Configuration. Хардверске могућности — Camera, Microphone, Bluetooth (путем повезаних capabilities).
Xcode групише повезане entitlements у Capabilities — високонивоа прекидачи на картици Signing & Capabilities. Укључивање Capability аутоматски додаје потребне entitlements у .entitlements датотеку. На пример, укључивање Capability Push Notifications додаје entitlement aps-environment са вредношћу development или production, а укључивање iCloud-а додаје скуп entitlements-а за CloudKit и Key-Value storage.
Неке capabilities захтевају додатно подешавање на Apple Developer порталу. На пример, за App Groups је потребно регистровати идентификатор групе на порталу, након чега постаје доступан за избор у Xcode-у. За Push Notifications је потребно генерисати APNs кључ или сертификат. Без ових припремних корака entitlement неће радити чак ни са исправном .entitlements датотеком.
Entitlement com.apple.security.application-groups омогућава више апликација истог програмера да имају заједнички контејнер у датотечном систему. Ово се користи за дељење података између главне апликације и проширења (Widget, Watch App, Share Extension). Све апликације из једне групе могу читати и уписавати датотеке у заједнички директоријум /Library/Group Containers/.
Keychain Access Groups (кључ keychain-access-groups) — још један важан entitlement који омогућава апликацијама из једне групе заједнички приступ елементима Keychain-а. Ово је критично за имплементацију јединствене аутентификације: корисник се пријављује у једној апликацији и аутоматски добија приступ истом налогу у другој апликацији без поновног уноса лозинке.
Подешавање Entitlements-а се врши у Xcode-у на картици Signing & Capabilities у подешавањима target-а. Програмер бира потребне Capabilities из листе, а Xcode аутоматски креира или ажурира .entitlements датотеку. Ова датотека се чува у пројекту у XML формату са plist структуром и садржи све кључеве entitlements-а за дати 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>
При ручном креирању entitlement датотеке важно је поштовати формат кључева и префиксе. Apple Entitlements користе обрнути доменски стил (com.apple.*). Прилагођени entitlements за сопствене потребе су такође могући, али морају бити регистровани на програмерском порталу. Xcode пружа аутоматско довршавање за све стандардне кључеве entitlements-а.
За отклањање грешака Entitlements-а користите команду codesign у macOS терминалу. Команда codesign -d --entitlements :- <путања_до_апликације> приказује све entitlements којима је апликација потписана. Ово је корисно за дијагностику проблема: ако entitlement недостаје у излазу, апликација неће добити приступ одговарајућој функцији без обзира на подешавања у Xcode-у.
Иако Xcode генерише entitlement датотеку аутоматски при укључивању Capabilities, искусни програмери често је креирају или уређују ручно за фино подешавање. Датотека има екстензију .entitlements и plist (XML) формат. У њој се могу додати прилагођени entitlement кључеви који нису представљени у Xcode интерфејсу или комбиновати entitlements из различитих capabilities у једној датотеци.
При ручном уређивању важно је пратити синтаксну исправност XML-а. Грешка у plist структури довешће до тога да се entitlements не примењују при потписивању. Xcode проверава .entitlements датотеку у фази компилације и приказује грешку при неисправном формату. За сложене пројекте са више target-а и проширења, препоручује се чување заједничких entitlement кључева у одвојеним датотекама и њихово увожење путем Build Settings-а.
// cli: провера entitlements-а инсталиране апликације
codesign -d --entitlements :- /Applications/Safari.app
// Пример излаза садржи листу активних entitlements-а
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Entitlements играју кључну улогу у Apple-овом безбедносном моделу. Пошто су entitlements део дигиталног потписа апликације, њихово фалсификовање је немогуће без поновног потписивања кода. Apple проверава entitlements на неколико нивоа: при изградњи, Xcode потписује entitlements заједно са извршном датотеком; при инсталацији, систем проверава интегритет потписа; при покретању, поново верификује entitlements.
Један од важних безбедносних захтева је принцип минималног entitlement-а. Програмер треба да укључи само оне entitlements који се стварно користе у апликацији. Сувишни entitlements повећавају површину напада и могу довести до одбијања апликације на App Review-у. Apple експлицитно проверава усклађеност entitlements-а са функционалношћу апликације.
Неки entitlements се сматрају осетљивим (sensitive) и захтевају додатно одобрење Apple-а. Они укључују: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) и com.apple.developer.nfc.readersession.formats (NFC). За добијање ових entitlements-а потребно је оправдати њихову неопходност у процесу App Review-а.
При раду са entitlements-има важно је узети у обзир разлике између iOS-а и macOS-а. Desktop апликације macOS-а (Sandboxed) имају шири скуп entitlements-а у поређењу са iOS-ом. На пример, entitlement com.apple.security.temporary-exception.* омогућава привремено заобилажење sandbox-а за одређене операције — на iOS-у такви entitlements потпуно недостају.
Entitlements су уско повезани са профилима потписивања (Provisioning Profiles). Профил потписивања је датотека која повезује програмерски сертификат, листу дозвољених уређаја и скуп entitlements-а за одређену апликацију. При инсталацији апликације, систем упоређује entitlements у коду са entitlement-има у профилу потписивања. Ако entitlement постоји у коду, али недостаје у профилу, апликација неће добити приступ одговарајућој функцији.
За дијагностику проблема са entitlements-има, прво проверите профил потписивања. Xcode аутоматски генерише профиле на основу изабране capability на Apple Developer порталу. Ако је capability додата у Xcode-у, али није активна на порталу, апликација ће пасти са грешком потписивања при покушају коришћења заштићене функције.
Размотримо најчешће коришћене entitlements у iOS развоју. aps-environment (Push Notifications) — обавезан за слање push обавештења. com.apple.developer.ubiquity-container-identifiers (iCloud) — за синхронизацију података путем CloudKit-а. com.apple.security.application-groups — за дељење података између апликација и проширења. com.apple.developer.associated-domains — за Universal Links и Handoff.
За сваки од ових entitlements-а постоји строга процедура подешавања. Push Notifications захтевају генерисање APNs кључа на Apple Developer порталу и укључивање capability у Xcode-у. Након тога, entitlement се аутоматски додаје у .entitlements датотеку. iCloud захтева подешавање контејнера на порталу и избор у Xcode-у из падајуће листе.
Associated Domains — entitlement који повезује апликацију са веб доменом. Користи се за Universal Links (дубоке линкове који се отварају директно у апликацији) и Handoff (наставак рада на другом Apple уређају). Вредност entitlement-а садржи низ стрингова у формату applinks:example.com. За функционисање је потребно постављање apple-app-site-association датотеке на серверу.
Табела популарних entitlements-а и њихове намене:
| Entitlement Key | Намена | Захтева преглед |
|---|---|---|
| aps-environment | Push обавештења | Не |
| com.apple.developer.ubiquity-* | iCloud синхронизација | Не |
| application-groups | Заједнички контејнер апликација | Не |
| com.apple.developer.healthkit | HealthKit подаци | Да |
| com.apple.developer.nfc.* | NFC читање ознака | Да |
| associated-domains | Universal Links | Не |
Често постављана питања
Entitlements су статичка права уграђена у потпис апликације и проверава их систем при покретању. Permissions су динамичке дозволе које се траже од корисника у runtime-у (камера, геолокација).
Користите команду codesign -d --entitlements у macOS терминалу. За апликације из App Store-а, entitlement се проверава путем ProvisionQL алатке или Xcode Organizer-а.
Промена entitlements-а захтева нову изградњу и поновно потписивање апликације. Ако entitlement захтева одобрење Apple-а, биће потребно поново проћи App Review. Без поновног потписивања, измена entitlements-а је немогућа.
.entitlements датотека — XML документ у plist формату који се чува у Xcode пројекту. Садржи листу свих entitlements-а апликације у структурираном облику и потписује се заједно са извршном датотеком.
Capabilities су високонивоа прекидачи на картици Signing & Capabilities у Xcode-у. Укључивање capability аутоматски додаје одговарајуће entitlements у .entitlements датотеку и подешава профил потписивања.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође