Entitlements в разработката за iOS: какво е, какви видове има и как се настройват

Автор: IT Sectr Публикувано: 2026-05-18 Време за четене: 8 мин

Entitlements са цифрови права и разрешения, които се присвояват на приложението на етапа на подписване на кода и определят достъпа до защитените функции на операционната система на Apple. За разлика от потребителските разрешения, Entitlements се проверяват от системата при стартиране на приложението и не могат да бъдат променяни от потребителя. Според Apple Developer Documentation (2025), правилната настройка на Entitlements е задължителна за използване на iCloud, Push известия и App Groups. Entitlements са ключов елемент от модела на сигурност на iOS и macOS.

Основни точки

  • Entitlements — цифрови разрешения, вградени в подписа на приложението, които определят достъпа до защитени функции на iOS и macOS.
  • Разлика от Permissions — Entitlements се проверяват от системата при стартиране и не се изискват от потребителя; разрешенията се изискват по време на изпълнение чрез системни диалози.
  • Capabilities — Xcode групира Entitlements в Capabilities: Push Notifications, iCloud, App Groups, In-App Purchase и други.
  • Entitlements File — (.entitlements) — XML файл в Xcode проекта, съдържащ списък с права във формат ключ-стойност, подписан от Apple.
  • Сигурност — entitlements се проверяват на етапа на подписване на кода; фалшифицирането на entitlements в инсталирано приложение разрушава цифровия подпис и блокира стартирането.

Какво са Entitlements?

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 в iOS

Entitlements се класифицират по функционално предназначение в няколко категории. Системни услуги — iCloud, Push Notifications, Siri. Сигурност и данни — Keychain Access Groups, App Groups, Data Protection. Мрежа и комуникации — Multipath TCP, VPN, Hotspot Configuration. Хардуерни възможности — Camera, Microphone, Bluetooth (чрез свързани capabilities).

Capabilities и сервизни Entitlements

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 файл.

App Groups и Keychain Access

Entitlement com.apple.security.application-groups позволява на няколко приложения на един разработчик да имат споделен контейнер във файловата система. Това се използва за споделяне на данни между основното приложение и разширенията (Widget, Watch App, Share Extension). Всички приложения от една група могат да четат и записват файлове в споделената директория /Library/Group Containers/.

Keychain Access Groups (ключ keychain-access-groups) — още едно важно entitlement, което позволява на приложения от една група споделен достъп до елементи на Keychain. Това е критично за реализиране на единно удостоверяване: потребителят влиза в едно приложение и автоматично получава достъп до същия акаунт в друго приложение без повторно въвеждане на парола.

Как да настроите Entitlements

Настройването на Entitlements се извършва в Xcode в раздела Signing & Capabilities в настройките на target. Разработчикът избира необходимите Capabilities от списъка и Xcode автоматично създава или актуализира .entitlements файла. Този файл се съхранява в проекта във формат XML със структура plist и съдържа всички ключове entitlements за този 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>

При ръчно създаване на entitlement файл е важно да се спазва форматът на ключовете и префиксите. Apple Entitlements използват обратен домейн стил (com.apple.*). Персонализирани entitlements за собствени цели също са възможни, но трябва да бъдат регистрирани на портала за разработчици. Xcode предоставя автоматично довършване за всички стандартни ключове entitlements.

За отстраняване на грешки в Entitlements използвайте командата codesign в macOS терминала. Командата codesign -d --entitlements :- <път_до_приложението> показва всички entitlements, с които е подписано приложението. Това е полезно за диагностициране на проблеми: ако entitlement липсва в изхода, приложението няма да получи достъп до съответната функция независимо от настройките в Xcode.

Ръчно създаване на entitlement файл

Въпреки че Xcode генерира entitlement файла автоматично при включване на Capabilities, опитните разработчици често го създават или редактират ръчно за фина настройка. Файлът има разширение .entitlements и формат plist (XML). В него могат да се добавят персонализирани entitlement ключове, които не са представени в интерфейса на Xcode, или да се комбинират entitlements от различни capabilities в един файл.

При ръчно редактиране е важно да се следи синтактичната коректност на XML. Грешка в структурата plist ще доведе до неприлагане на entitlements при подписване. Xcode проверява .entitlements файла на етапа на компилация и показва грешка при неправилен формат. За сложни проекти с множество target-ове и разширения се препоръчва съхраняване на общи entitlement ключове в отделни файлове и импортирането им чрез Build Settings.

cpp
// 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 и сигурност на приложението

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. Десктоп приложенията на macOS (Sandboxed) имат по-широк набор от entitlements в сравнение с iOS. Например entitlement com.apple.security.temporary-exception.* позволява временно заобикаляне на пясъчната кутия за определени операции — в iOS такива entitlements напълно липсват.

Entitlements и Provisioning Profile

Entitlements са тясно свързани с профилите за подписване (Provisioning Profiles). Профилът за подписване е файл, който свързва сертификата на разработчика, списъка с разрешени устройства и набора от entitlements за конкретно приложение. При инсталиране на приложението системата сравнява entitlements в кода с entitlements в профила за подписване. Ако entitlement присъства в кода, но липсва в профила, приложението няма да получи достъп до съответната функция.

За диагностициране на проблеми с entitlements първо проверете профила за подписване. Xcode автоматично генерира профили на базата на избраната capability на портала Apple Developer. Ако capability е добавена в Xcode, но не е активна на портала, приложението ще се срине с грешка при подписване при опит за използване на защитена функция.

Често използвани Entitlements

Нека разгледаме най-често използваните 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-environmentPush известияНе
com.apple.developer.ubiquity-*iCloud синхронизацияНе
application-groupsСподелен контейнер на приложенияНе
com.apple.developer.healthkitHealthKit данниДа
com.apple.developer.nfc.*Четене на NFC етикетиДа
associated-domainsUniversal LinksНе

Често задавани въпроси

Каква е разликата между Entitlements и Permissions в iOS?

Entitlements са статични права, вградени в подписа на приложението и проверявани от системата при стартиране. Permissions са динамични разрешения, изисквани от потребителя по време на изпълнение (камера, геолокация).

Как да проверя Entitlements на инсталирано приложение?

Използвайте командата codesign -d --entitlements в macOS терминала. За приложения от App Store entitlement се проверява чрез помощната програма ProvisionQL или чрез Xcode Organizer.

Могат ли Entitlements да се променят след публикуване?

Промяната на entitlements изисква ново изграждане и повторно подписване на приложението. Ако entitlement изисква одобрение от Apple, ще трябва да преминете отново през App Review. Без повторно подписване промяната на entitlements е невъзможна.

Какво е Entitlements File в Xcode?

.entitlements файлът — XML документ във формат plist, съхраняван в Xcode проекта. Той съдържа структуриран списък на всички entitlements на приложението и се подписва заедно с изпълнимия файл.

Какво са Capabilities в Xcode?

Capabilities са превключватели на високо ниво в раздела Signing & Capabilities в Xcode. Включването на capability автоматично добавя съответните entitlements в .entitlements файла и конфигурира профила за подписване.

Резюме

  • Entitlements — цифрови права на приложението за използване на защитени системни функции на iOS и macOS, вградени в подписа на кода.
  • Разлика от разрешенията — entitlements се проверяват от системата при стартиране на базата на подписа, не се изискват от потребителя и не могат да бъдат оттеглени.
  • Capabilities — групиране на entitlements в Xcode за Push Notifications, iCloud, App Groups, In-App Purchase и други функции.
  • Проверка — чрез командата codesign в macOS терминала за диагностициране на инсталираните права на приложението.
  • Чувствителни entitlements — HealthKit, NFC, PassKit изискват допълнително одобрение от Apple чрез App Review.
  • Принцип на минималните права — включвайте само необходимите entitlements за намаляване на повърхността за атака и успешно преминаване на прегледа.
  • Сигурност — entitlements са защитени с цифров подпис; фалшифицирането е невъзможно без повторно подписване на цялото приложение.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също