iOS inkişafında Entitlements: bu nədir, hansı növləri var və necə konfiqurasiya edilir

Müəllif: IT Sectr Dərc olunub: 2026-05-18 Oxuma vaxtı: 8 dəq

Entitlements — kod imzalanması mərhələsində tətbiqə verilən və Apple əməliyyat sisteminin qorunan funksiyalarına girişi müəyyən edən rəqəmsal hüquq və icazələrdir. İstifadəçi icazələrindən fərqli olaraq, Entitlements tətbiq işə salındıqda sistem tərəfindən yoxlanılır və istifadəçi tərəfindən dəyişdirilə bilməz. Apple Developer Documentation (2025)-a görə, iCloud, Push bildirişləri və App Groups-dan istifadə üçün Entitlements-in düzgün konfiqurasiyası məcburidir. Entitlements iOS və macOS təhlükəsizlik modelinin əsas elementidir.

Əsas məqamlar

  • Entitlements — tətbiqin imzasına daxil edilən və iOS və macOS-un qorunan funksiyalarına girişi müəyyən edən rəqəmsal icazələr.
  • Permissions-dən fərqi — Entitlements işə salındıqda sistem tərəfindən yoxlanılır və istifadəçidən soruşulmur; icazələr iş vaxtı sistem dialoqları vasitəsilə soruşulur.
  • Capabilities — Xcode Entitlements-i Capabilities-də qruplaşdırır: Push Notifications, iCloud, App Groups, In-App Purchase və s.
  • Entitlements Faylı — (.entitlements) — Xcode layihəsində açar-dəyər formatında hüquqlar siyahısını ehtiva edən, Apple tərəfindən imzalanan XML faylı.
  • Təhlükəsizlik — entitlements kod imzalama mərhələsində yoxlanılır; quraşdırılmış tətbiqdə entitlements-in saxtalaşdırılması rəqəmsal imzanı pozur və işə salınmanı bloklayır.

Entitlements nədir?

Entitlements (ingilis dilindən tərcümədə — „hüquqlar") — tətbiqin qurulma mərhələsində kod imzasına daxil edilən və tətbiqin hansı sistem funksiyalarına və məlumatlara girişi olduğunu müəyyən edən açar-dəyər cütlüyüdür. Entitlements iOS SDK-nın yaranmasından bəri Apple təhlükəsizlik modelinə daxildir və App Store vasitəsilə paylanan bütün tətbiqlər üçün məcburidir.

Entitlements konsepsiyası Android-dəki ənənəvi icazələrdən (permissions) fərqlənir. Android icazələri funksiyanın ilk istifadəsi anında istifadəçidən soruşulursa, iOS-da Entitlements tətbiq işə salındıqda sistem tərəfindən rəqəmsal imza əsasında yoxlanılır. İstifadəçi entitlement-i ləğv edə və ya dəyişdirə bilməz — bu hüquq developerə App Store Connect vasitəsilə verilir və imzalama profilində təsbit edilir.

Hər bir entitlement ciddi şəkildə müəyyən edilmiş təyinat və formata malikdir. Məsələn, com.apple.security.application-groups bir developerin tətbiqlər dəsti üçün ümumi konteynerə girişi təmin edir, aps-environment isə Push bildirişləri dəstəyini aktivləşdirir. Apple App Review prosesində entitlement sorğularını əl ilə yoxlayır və bu da hüquqlardan sui-istifadənin qarşısını alır.

iOS-da Entitlements növləri

Entitlements funksional təyinatına görə bir neçə kateqoriyaya bölünür. Sistem xidmətləri — iCloud, Push Notifications, Siri. Təhlükəsizlik və məlumatlar — Keychain Access Groups, App Groups, Data Protection. Şəbəkə və əlaqə — Multipath TCP, VPN, Hotspot Configuration. Avadanlıq imkanları — Camera, Microphone, Bluetooth (əlaqəli capabilities vasitəsilə).

Capabilities və xidmət Entitlements-ləri

Xcode əlaqəli entitlements-ləri Capabilities-də qruplaşdırır — Signing & Capabilities nişanındakı yüksək səviyyəli açarlar. Capability-nin aktivləşdirilməsi avtomatik olaraq .entitlements faylına lazımi entitlements-ləri əlavə edir. Məsələn, Push Notifications Capability-nin aktivləşdirilməsi aps-environment entitlement-i development və ya production dəyəri ilə əlavə edir, iCloud-un aktivləşdirilməsi isə CloudKit və Key-Value storage üçün entitlements dəsti əlavə edir.

Bəzi capabilities Apple Developer portalında əlavə konfiqurasiya tələb edir. Məsələn, App Groups üçün portalda qrup identifikatorunu qeydiyyatdan keçirmək lazımdır, bundan sonra o Xcode-da seçim üçün əlçatan olur. Push Notifications üçün APNs açarı və ya sertifikatı yaradılmalıdır. Bu ilkin addımlar olmadan entitlement hətta düzgün .entitlements faylı ilə belə işləməyəcək.

App Groups və Keychain Access

com.apple.security.application-groups entitlement-i bir developerin bir neçə tətbiqinə fayl sistemində ümumi konteynerə malik olmağa imkan verir. Bu, əsas tətbiq və genişlənmələr (Widget, Watch App, Share Extension) arasında məlumat paylaşımı üçün istifadə olunur. Bir qrupdakı bütün tətbiqlər /Library/Group Containers/ ümumi kataloqunda faylları oxuya və yaza bilər.

Keychain Access Groups (açar keychain-access-groups) — bir qrupdakı tətbiqlərə Keychain elementlərinə ümumi giriş imkanı verən digər vacib entitlement. Bu, vahid autentifikasiyanın tətbiqi üçün kritik əhəmiyyət daşıyır: istifadəçi bir tətbiqdə daxil olur və avtomatik olaraq eyni hesaba digər tətbiqdə şifrəni təkrar daxil etmədən giriş əldə edir.

Entitlements-i necə konfiqurasiya etmək

Entitlements-in konfiqurasiyası Xcode-da target parametrlərində Signing & Capabilities nişanında aparılır. Developer siyahıdan lazımi Capabilities-i seçir və Xcode avtomatik olaraq .entitlements faylını yaradır və ya yeniləyir. Bu fayl layihədə plist strukturu ilə XML formatında saxlanılır və bu target üçün bütün entitlements açarlarını ehtiva edir.

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 faylını əl ilə yaratarkən açar formatına və prefikslərə riayət etmək vacibdir. Apple Entitlements-ləri tərs domen stilindən (com.apple.*) istifadə edir. Öz məqsədləri üçün fərdi entitlements-lər də mümkündür, lakin onlar developer portalında qeydiyyatdan keçirilməlidir. Xcode bütün standart entitlement açarları üçün avtomatik tamamlama təmin edir.

Entitlements-ləri sazlamaq üçün macOS terminalında codesign əmrindən istifadə edin. codesign -d --entitlements :- <tətbiq_yolu> əmri tətbiqin imzalandığı bütün entitlements-ləri göstərir. Bu, problemlərin diaqnostikası üçün faydalıdır: əgər entitlement nəticədə yoxdursa, tətbiq Xcode-dakı parametrlərdən asılı olmayaraq müvafiq funksiyaya giriş əldə etməyəcək.

Entitlement faylını əl ilə yaratmaq

Xcode Capabilities-i aktivləşdirərkən entitlement faylını avtomatik yaratsa da, təcrübəli developerlər incə sazlama üçün onu tez-tez əl ilə yaradır və ya redaktə edirlər. Fayl .entitlements uzantısına və plist (XML) formatına malikdir. Orada Xcode interfeysində təqdim olunmayan fərdi entitlement açarları əlavə edilə və ya müxtəlif capabilities-dən entitlement-lər bir faylda birləşdirilə bilər.

Əl ilə redaktə edərkən XML-in sintaktik düzgünlüyünə nəzarət etmək vacibdir. Plist strukturundakı səhv imzalama zamanı entitlements-lərin tətbiq edilməməsinə səbəb olacaq. Xcode .entitlements faylını tərtibat mərhələsində yoxlayır və səhv formatda xəta göstərir. Çoxsaylı targetlər və genişlənmələri olan mürəkkəb layihələr üçün ümumi entitlement açarlarını ayrı fayllarda saxlamaq və onları Build Settings vasitəsilə idxal etmək tövsiyə olunur.

cpp
// cli: quraşdırılmış tətbiqin entitlements-lərinin yoxlanılması
codesign -d --entitlements :- /Applications/Safari.app

// Nümunə çıxışı aktiv entitlements-lərin siyahısını ehtiva edir
<dict>
    <key>com.apple.security.ts.apple-wifi</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
</dict>

Entitlements və tətbiq təhlükəsizliyi

Entitlements Apple təhlükəsizlik modelində əsas rol oynayır. Entitlements tətbiqin rəqəmsal imzasının bir hissəsi olduğundan, kodun yenidən imzalanması olmadan onların saxtalaşdırılması mümkün deyil. Apple entitlements-ləri bir neçə səviyyədə yoxlayır: qurulma zamanı Xcode entitlements-ləri icra olunan faylla birlikdə imzalayır, quraşdırma zamanı sistem imzanın bütövlüyünü yoxlayır, işə salınma zamanı isə entitlements-ləri yenidən təsdiqləyir.

Vacib təhlükəsizlik tələblərindən biri minimal entitlement prinsipidir. Developer yalnız tətbiqdə həqiqətən istifadə olunan entitlements-ləri aktivləşdirməlidir. Artıq entitlements-lər hücum səthini artırır və App Review zamanı tətbiqin rədd edilməsinə səbəb ola bilər. Apple entitlements-lərin tətbiqin funksionallığına uyğunluğunu açıq şəkildə yoxlayır.

Bəzi entitlements-lər həssas (sensitive) hesab olunur və Apple-dan əlavə təsdiq tələb edir. Bunlara daxildir: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) və com.apple.developer.nfc.readersession.formats (NFC). Bu entitlements-ləri əldə etmək üçün App Review prosesində onların zəruriliyini əsaslandırmaq lazımdır.

Entitlements-lərlə işləyərkən iOS və macOS arasındakı fərqləri nəzərə almaq vacibdir. macOS-un deskTop tətbiqləri (Sandboxed) iOS ilə müqayisədə daha geniş entitlements dəstinə malikdir. Məsələn, com.apple.security.temporary-exception.* entitlement-i müəyyən əməliyyatlar üçün sandbox-i müvəqqəti keçməyə imkan verir — iOS-da belə entitlements-lər tamamilə yoxdur.

Entitlements və Provisioning Profile

Entitlements imzalama profilləri (Provisioning Profiles) ilə sıx bağlıdır. İmzalama profili developer sertifikatını, icazə verilən cihazların siyahısını və müəyyən bir tətbiq üçün entitlements dəstini birləşdirən fayldır. Tətbiq quraşdırılarkən sistem koddakı entitlements-ləri imzalama profili ilə müqayisə edir. Əgər entitlement koddadırsa, lakin profildə yoxdursa, tətbiq müvafiq funksiyaya giriş əldə etməyəcək.

Entitlements ilə bağlı problemləri diaqnostika etmək üçün ilk növbədə imzalama profilini yoxlayın. Xcode Apple Developer portalında seçilmiş capability əsasında avtomatik profillər yaradır. Əgər capability Xcode-da əlavə edilib, lakin portalda aktiv deyilsə, tətbiq qorunan funksiyadan istifadə etməyə cəhd edərkən imzalama xətası ilə çökəcək.

Tez-tez istifadə olunan Entitlements

iOS inkişafında ən çox istifadə olunan entitlements-ləri nəzərdən keçirək. aps-environment (Push Notifications) — push bildirişləri göndərmək üçün məcburidir. com.apple.developer.ubiquity-container-identifiers (iCloud) — CloudKit vasitəsilə məlumat sinxronizasiyası üçün. com.apple.security.application-groups — tətbiqlər və genişlənmələr arasında məlumat paylaşımı üçün. com.apple.developer.associated-domains — Universal Links və Handoff üçün.

Bu entitlements-lərin hər biri üçün ciddi konfiqurasiya proseduru mövcuddur. Push Notifications Apple Developer portalında APNs açarının yaradılmasını və Xcode-da capability-nin aktivləşdirilməsini tələb edir. Bundan sonra entitlement avtomatik olaraq .entitlements faylına əlavə edilir. iCloud portalda konteynerin konfiqurasiyasını və onun Xcode-da açılan siyahıdan seçilməsini tələb edir.

Associated Domains — tətbiqi veb domeni ilə əlaqələndirən entitlement. Universal Links (birbaşa tətbiqdə açılan dərin linklər) və Handoff (başqa Apple cihazında işin davam etdirilməsi) üçün istifadə olunur. Entitlement dəyəri applinks:example.com formatında sətirlər massivi ehtiva edir. İşləməsi üçün serverdə apple-app-site-association faylının yerləşdirilməsi tələb olunur.

Məşhur entitlements-lər və onların təyinatı cədvəli:

Entitlement KeyTəyinatRəy tələb edir
aps-environmentPush bildirişləriXeyr
com.apple.developer.ubiquity-*iCloud sinxronizasiyasıXeyr
application-groupsTətbiqlərin ümumi konteyneriXeyr
com.apple.developer.healthkitHealthKit məlumatlarıBəli
com.apple.developer.nfc.*NFC etiket oxumaBəli
associated-domainsUniversal LinksXeyr

Tez-tez verilən suallar

Entitlements iOS-da Permissions-dan nə ilə fərqlənir?

Entitlements — tətbiqin imzasına daxil edilmiş və işə salındıqda sistem tərəfindən yoxlanılan statik hüquqlardır. Permissions — istifadəçidən iş vaxtı soruşulan dinamik icazələrdir (kamera, geolokasiya).

Quraşdırılmış tətbiqin Entitlements-lərini necə yoxlamaq olar?

macOS terminalında codesign -d --entitlements əmrindən istifadə edin. App Store tətbiqləri üçün entitlement ProvisionQL vasitəsilə və ya Xcode Organizer vasitəsilə yoxlanılır.

Dərc edildikdən sonra Entitlements-ləri dəyişdirmək olarmı?

Entitlements-lərin dəyişdirilməsi yeni qurulma və tətbiqin yenidən imzalanmasını tələb edir. Əgər entitlement Apple-ın təsdiqini tələb edirsə, App Review-dan yenidən keçmək lazım olacaq. Yenidən imzalamadan entitlement dəyişikliyi mümkün deyil.

Xcode-da Entitlements Faylı nədir?

.entitlements faylı — Xcode layihəsində saxlanılan plist formatında XML sənədidir. O, tətbiqin bütün entitlements-lərinin strukturlaşdırılmış siyahısını ehtiva edir və icra olunan faylla birlikdə imzalanır.

Xcode-da Capabilities nədir?

Capabilities — Xcode-da Signing & Capabilities nişanındakı yüksək səviyyəli açarlardır. Capability-nin aktivləşdirilməsi avtomatik olaraq .entitlements faylına müvafiq entitlements-ləri əlavə edir və imzalama profilini konfiqurasiya edir.

Xülasə

  • Entitlements — iOS və macOS-un qorunan sistem funksiyalarından istifadə üçün tətbiqin kod imzasına daxil edilən rəqəmsal hüquqları.
  • İcazələrdən fərqi — entitlements işə salındıqda imza əsasında sistem tərəfindən yoxlanılır, istifadəçidən soruşulmur və ləğv edilə bilməz.
  • Capabilities — Push Notifications, iCloud, App Groups, In-App Purchase və digər funksiyalar üçün Xcode-dakı entitlements qruplaşdırmaları.
  • Yoxlama — macOS terminalında codesign əmri ilə quraşdırılmış tətbiq hüquqlarının diaqnostikası.
  • Həssas entitlements — HealthKit, NFC, PassKit App Review vasitəsilə Apple-dan əlavə təsdiq tələb edir.
  • Minimal hüquq prinsipi — hücum səthini azaltmaq və rəyi uğurla keçmək üçün yalnız zəruri entitlements-ləri aktivləşdirin.
  • Təhlükəsizlik — entitlements rəqəmsal imza ilə qorunur; bütün tətbiqin yenidən imzalanması olmadan saxtalaşdırma mümkün deyil.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun