Entitlements у розробці під iOS: що це, які бувають та як налаштовуються

Автор: IT Sectr Опубліковано: 2026-05-18 Час читання: 8 хв

Entitlements — це цифрові права та дозволи, які присвоюються застосунку на етапі підписання коду та визначають доступ до захищених можливостей операційної системи Apple. На відміну від користувацьких дозволів, Entitlements перевіряються системою під час запуску застосунку і не можуть бути змінені користувачем. Згідно з Apple Developer Documentation (2025), коректне налаштування Entitlements є обов'9язковим для використання 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 перевіряються на етапі code signing; підробка entitlements у встановленому застосунку ламає цифровий підпис і блокує запуск.

Що таке Entitlements?

Entitlements (у перекладі з англійської — «права») — це пара ключ-значення, яка включається в код-підпис застосунку на етапі збірки і визначає, до яких системних можливостей та даних застосунок має доступ. Entitlements вбудовані в модель безпеки Apple з моменту появи iOS SDK і є обов'9язковими для всіх застосунків, що розповсюджуються через 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. Мережа та зв'9язок — Multipath TCP, VPN, Hotspot Configuration. Апаратні можливості — Камера, Мікрофон, Bluetooth (через пов'9язані capabilities).

Capabilities та сервісні Entitlements

Xcore групує пов'9язані 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 в налаштуваннях таргета. Розробник вибирає потрібні Capabilities зі списку, і Xcode автоматично створює або оновлює файл .entitlements. Цей файл зберігається в проєкті у форматі XML зі структурою plist і містить всі ключі entitlements для даного таргета.

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-файлу вручну важливо дотримуватися формату ключів та префіксів. Entitlements Apple використовують зворотній доменний стиль (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 на етапі компіляції та виводить помилку при невірному форматі. Для складних проєктів з багатьма таргетами та розширеннями рекомендується зберігати спільні entitlement-ключі в окремих файлах та імпортувати їх через Build Settings.

cpp
// cli: checking entitlements of an installed application
codesign -d --entitlements :- /Applications/Safari.app

// Example output contains a list of active 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. Desktop-застосунки macOS (Sandboxed) мають більш широкий набір entitlements порівняно з iOS. Наприклад, entitlement com.apple.security.temporary-exception.* дозволяє тимчасово обходити пісочницю для певних операцій — на iOS такі entitlements відсутні повністю.

Entitlements та Provisioning Profile

Entitlements тісно пов'9язані з профілями підпису (Provisioning Profiles). Профіль підпису — це файл, який пов'9язує сертифікат розробника, список дозволених пристроїв та набір entitlements для конкретного застосунку. При встановленні застосунку система звіряє entitlements в коді з entitlements у профілі підпису. Якщо entitlement присутній у коді, але відсутній у профілі, застосунок не отримає доступ до відповідної функції.

Для діагностики проблем з entitlements в першу чергу перевіряйте профіль підпису. Xcode автоматично генерує профілі на основі вибраних capability на порталі Apple Developer. Якщо capability додана в Xcode, але не активна на порталі, застосунок буде падати з помилкою підпису при спробі використати захищену функцію.

Часто використовувані Entitlements

Розглянемо найбільш часто використовувані entitlements в iOS-розробці. aps-environment (Push Notifications) — обов'9язковий для відправки 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, який пов'9язує застосунок з веб-доменом. Він використовується для 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.healthkitДані HealthKitТак
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 — Xcode-групування entitlements для Push Notifications, iCloud, App Groups, In-App Purchase та інших функцій.
  • Перевірка — через команду codesign в терміналі macOS для діагностики встановлених прав застосунку.
  • Чутливі entitlements — HealthKit, NFC, PassKit потребують додаткового схвалення Apple через App Review.
  • Принцип мінімальних прав — включайте тільки необхідні entitlements для зниження поверхні атаки та успішного проходження рев'ю.
  • Безпека — entitlements захищені цифровим підписом; підробка неможлива без перепідписання всього застосунку.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також