Entitlements — bu kod imzolash bosqichida dasturga beriladigan va Apple operatsion tizimining himoyalangan funksiyalariga kirishni belgilaydigan raqamli huquq va ruxsatlardir. Foydalanuvchi ruxsatlaridan farqli o'laroq, Entitlements dastur ishga tushirilganda tizim tomonidan tekshiriladi va foydalanuvchi tomonidan o'zgartirilishi mumkin emas. Apple Developer Documentation (2025) ma'lumotlariga ko'ra, iCloud, Push bildirishnomalari va App Groups dan foydalanish uchun Entitlements ni to'g'ri sozlash majburiydir. Entitlements iOS va macOS xavfsizlik modelining asosiy elementidir.
Asosiy ma'lumotlar
Entitlements (ingliz tilidan tarjimada — „huquqlar") — dasturni qurish bosqichida kod imzosiga qo'shiladigan va dasturning qaysi tizim funksiyalari va ma'lumotlariga kirishini belgilaydigan kalit-qiymat juftligidir. Entitlements iOS SDK paydo bo'lganidan beri Apple xavfsizlik modeliga kiritilgan va App Store orqali tarqatiladigan barcha dasturlar uchun majburiydir.
Entitlements kontseptsiyasi Android dagi an'anaviy ruxsatlardan (permissions) farq qiladi. Android ruxsatlari funksiyadan birinchi foydalanish paytida foydalanuvchidan so'ralsa, iOS da Entitlements dastur ishga tushirilganda tizim tomonidan raqamli imzo asosida tekshiriladi. Foydalanuvchi entitlement ni bekor qila olmaydi yoki o'zgartira olmaydi — bu huquq dasturchiga App Store Connect orqali beriladi va imzolash profilida mustahkamlanadi.
Har bir entitlement qat'iy belgilangan maqsad va formatga ega. Masalan, com.apple.security.application-groups bitta dasturchining dasturlar to'plami uchun umumiy konteynerga kirishni ta'minlaydi, aps-environment esa Push bildirishnomalarini qo'llab-quvvatlashni yoqadi. Apple App Review jarayonida entitlement so'rovlarini qo'lda tekshiradi, bu esa huquqlardan noto'g'ri foydalanishning oldini oladi.
Entitlements funksional maqsadiga ko'ra bir necha toifaga bo'linadi. Tizim xizmatlari — iCloud, Push Notifications, Siri. Xavfsizlik va ma'lumotlar — Keychain Access Groups, App Groups, Data Protection. Tarmoq va aloqa — Multipath TCP, VPN, Hotspot Configuration. Uskuna imkoniyatlari — Camera, Microphone, Bluetooth (bog'liq capabilities orqali).
Xcode bog'liq entitlements ni Capabilities da guruhlaydi — Signing & Capabilities yorlig'idagi yuqori darajadagi kalitlar. Capability ni yoqish avtomatik ravishda .entitlements fayliga kerakli entitlements ni qo'shadi. Masalan, Push Notifications Capability ni yoqish aps-environment entitlement ni development yoki production qiymati bilan qo'shadi, iCloud ni yoqish esa CloudKit va Key-Value storage uchun entitlements to'plamini qo'shadi.
Ba'zi capabilities Apple Developer portalida qo'shimcha sozlashni talab qiladi. Masalan, App Groups uchun portala guruh identifikatorini ro'yxatdan o'tkazish kerak, shundan so'ng u Xcode da tanlash uchun mavjud bo'ladi. Push Notifications uchun APNs kaliti yoki sertifikati yaratilishi kerak. Ushbu dastlabki qadamlarsiz entitlement hatto to'g'ri .entitlements fayli bilan ham ishlamaydi.
com.apple.security.application-groups entitlement i bitta dasturchining bir nechta dasturlariga fayl tizimida umumiy konteynerga ega bo'lishga imkon beradi. Bu asosiy dastur va kengaytmalar (Widget, Watch App, Share Extension) o'rtasida ma'lumot almashish uchun ishlatiladi. Bir guruhdagi barcha dasturlar /Library/Group Containers/ umumiy katalogida fayllarni o'qishi va yozishi mumkin.
Keychain Access Groups (kalit keychain-access-groups) — bir guruhdagi dasturlarga Keychain elementlariga umumiy kirish imkonini beradigan yana bir muhim entitlement. Bu yagona autentifikatsiyani amalga oshirish uchun juda muhim: foydalanuvchi bir dasturga kiradi va avtomatik ravishda parolni qayta kiritmasdan boshqa dasturda xuddi shu hisobga kirish huquqini oladi.
Entitlements ni sozlash Xcode da target sozlamalaridagi Signing & Capabilities yorlig'ida amalga oshiriladi. Dasturchi ro'yxatdan kerakli Capabilities ni tanlaydi va Xcode avtomatik ravishda .entitlements faylini yaratadi yoki yangilaydi. Bu fayl loyihada plist tuzilmasi bilan XML formatida saqlanadi va ushbu target uchun barcha entitlement kalitlarini o'z ichiga oladi.
<?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 faylini qo'lda yaratishda kalit formatiga va prefikslarga rioya qilish muhim. Apple Entitlements teskari domen uslubidan (com.apple.*) foydalanadi. O'z maqsadlari uchun maxsus entitlements ham mumkin, ammo ular dasturchi portalida ro'yxatdan o'tkazilishi kerak. Xcode barcha standart entitlement kalitlari uchun avtomatik to'ldirishni ta'minlaydi.
Entitlements ni tuzatish uchun macOS terminalida codesign buyrug'idan foydalaning. codesign -d --entitlements :- <dastur_yo'li> buyrug'i dastur imzolangan barcha entitlements ni ko'rsatadi. Bu muammolarni diagnostika qilish uchun foydali: agar entitlement natijada bo'lmasa, dastur Xcode dagi sozlamalardan qat'i nazar, tegishli funksiyaga kirish huquqiga ega bo'lmaydi.
Xcode Capabilities ni yoqishda entitlement faylini avtomatik yaratsa ham, tajribali dasturchilar ko'pincha nozik sozlash uchun uni qo'lda yaratadilar yoki tahrir qiladilar. Fayl .entitlements kengaytmasiga va plist (XML) formatiga ega. Unda Xcode interfeysida mavjud bo'lmagan maxsus entitlement kalitlari qo'shilishi yoki turli capabilities dan entitlements bir faylda birlashtirilishi mumkin.
Qo'lda tahrir qilishda XML ning sintaktik to'g'riligini kuzatish muhim. Plist tuzilmasidagi xato imzolash paytida entitlements qo'llanilmasligiga olib keladi. Xcode .entitlements faylini kompilyatsiya bosqichida tekshiradi va noto'g'ri formatda xato ko'rsatadi. Bir nechta target va kengaytmalarga ega murakkab loyihalar uchun umumiy entitlement kalitlarini alohida fayllarda saqlash va ularni Build Settings orqali import qilish tavsiya etiladi.
// cli: o'rnatilgan dasturning entitlements larini tekshirish
codesign -d --entitlements :- /Applications/Safari.app
// Namuna chiqishi faol entitlements ro'yxatini o'z ichiga oladi
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Entitlements Apple xavfsizlik modelida asosiy rol o'ynaydi. Entitlements dasturning raqamli imzosining bir qismi bo'lganligi sababli, kodni qayta imzolamasdan ularni soxtalashtirish mumkin emas. Apple entitlements ni bir necha darajada tekshiradi: qurish paytida Xcode entitlements ni bajariladigan fayl bilan birga imzolaydi, o'rnatish paytida tizim imzo yaxlitligini tekshiradi, ishga tushirish paytida esa entitlements ni qayta tasdiqlaydi.
Muhim xavfsizlik talablaridan biri minimal entitlement tamoyilidir. Dasturchi faqat dasturda haqiqatan ishlatiladigan entitlements ni yoqishi kerak. Ortiqcha entitlements hujum yuzasini oshiradi va App Review da dasturning rad etilishiga olib kelishi mumkin. Apple entitlements ning dastur funksionalligiga mosligini aniq tekshiradi.
Ba'zi entitlements sezuvchan (sensitive) hisoblanadi va Apple dan qo'shimcha tasdiqni talab qiladi. Bularga kiradi: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) va com.apple.developer.nfc.readersession.formats (NFC). Ushbu entitlements ni olish uchun App Review jarayonida ularning zarurligini asoslash kerak.
Entitlements bilan ishlashda iOS va macOS o'rtasidagi farqlarni hisobga olish muhim. macOS ning ish stoli dasturlari (Sandboxed) iOS ga nisbatan kengroq entitlements to'plamiga ega. Masalan, com.apple.security.temporary-exception.* entitlement i muayyan operatsiyalar uchun sandbox ni vaqtincha chetlab o'tishga imkon beradi — iOS da bunday entitlements umuman mavjud emas.
Entitlements imzolash profillari (Provisioning Profiles) bilan chambarchas bog'liq. Imzolash profili dasturchi sertifikatini, ruxsat etilgan qurilmalar ro'yxatini va ma'lum bir dastur uchun entitlements to'plamini bog'laydigan fayldir. Dastur o'rnatilayotganda tizim koddagi entitlements ni imzolash profilidagi entitlements bilan solishtiradi. Agar entitlement koddda mavjud bo'lsa, lekin profilda bo'lmasa, dastur tegishli funksiyaga kirish huquqiga ega bo'lmaydi.
Entitlements bilan bog'liq muammolarni diagnostika qilish uchun avval imzolash profilini tekshiring. Xcode Apple Developer portalida tanlangan capability asosida avtomatik profillarni yaratadi. Agar capability Xcode da qo'shilgan bo'lsa, lekin portala faol bo'lmasa, dastur himoyalangan funksiyadan foydalanishga urinayotganda imzolash xatosi bilan ishdan chiqadi.
iOS dasturlashda eng ko'p ishlatiladigan entitlements ni ko'rib chiqamiz. aps-environment (Push Notifications) — push bildirishnomalarini yuborish uchun majburiy. com.apple.developer.ubiquity-container-identifiers (iCloud) — CloudKit orqali ma'lumotlarni sinxronlash uchun. com.apple.security.application-groups — dasturlar va kengaytmalar o'rtasida ma'lumot almashish uchun. com.apple.developer.associated-domains — Universal Links va Handoff uchun.
Ushbu entitlements larning har biri uchun qat'iy sozlash tartibi mavjud. Push Notifications Apple Developer portalida APNs kalitini yaratish va Xcode da capability ni yoqishni talab qiladi. Shundan so'ng entitlement avtomatik ravishda .entitlements fayliga qo'shiladi. iCloud portala konteynerni sozlash va uni Xcode da ochiladigan ro'yxatdan tanlashni talab qiladi.
Associated Domains — dasturni veb domen bilan bog'laydigan entitlement. Universal Links (to'g'ridan-to'g'ri dasturda ochiladigan chuqur havolalar) va Handoff (boshqa Apple qurilmasida ishni davom ettirish) uchun ishlatiladi. Entitlement qiymati applinks:example.com formatidagi qatorlar massivini o'z ichiga oladi. Ishlashi uchun serverda apple-app-site-association faylini joylashtirish talab qilinadi.
Mashhur entitlements va ularning maqsadi jadvali:
| Entitlement Key | Maqsad | Tekshiruv talab qiladi |
|---|---|---|
| aps-environment | Push bildirishnomalari | Yo'q |
| com.apple.developer.ubiquity-* | iCloud sinxronlash | Yo'q |
| application-groups | Dasturlarning umumiy konteyneri | Yo'q |
| com.apple.developer.healthkit | HealthKit ma'lumotlari | Ha |
| com.apple.developer.nfc.* | NFC teglarini o'qish | Ha |
| associated-domains | Universal Links | Yo'q |
Tez-tez beriladigan savollar
Entitlements — dastur imzosiga kiritilgan va ishga tushirilganda tizim tomonidan tekshiriladigan statik huquqlardir. Permissions — foydalanuvchidan ish vaqtida so'raladigan dinamik ruxsatlardir (kamera, geolokatsiya).
macOS terminalida codesign -d --entitlements buyrug'idan foydalaning. App Store dasturlari uchun entitlement ProvisionQL yordam dasturi yoki Xcode Organizer orqali tekshiriladi.
Entitlements ni o'zgartirish yangi qurish va dasturni qayta imzolashni talab qiladi. Agar entitlement Apple tomonidan tasdiqlanishi kerak bo'lsa, App Review dan qayta o'tish kerak bo'ladi. Qayta imzolamasdan entitlement ni o'zgartirish mumkin emas.
.entitlements fayli — Xcode loyihasida saqlanadigan plist formatidagi XML hujjat. U dasturning barcha entitlements larining tuzilgan ro'yxatini o'z ichiga oladi va bajariladigan fayl bilan birga imzolanadi.
Capabilities — Xcode da Signing & Capabilities yorlig'idagi yuqori darajadagi kalitlardir. Capability ni yoqish avtomatik ravishda .entitlements fayliga tegishli entitlements ni qo'shadi va imzolash profilini sozlaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.