Entitlements حقوق و مجوزهای دیجیتالی هستند که در مرحله امضای کد به برنامه اختصاص داده میشوند و دسترسی به قابلیتهای محافظتشده سیستمعامل Apple را تعیین میکنند. برخلاف مجوزهای کاربر، Entitlements هنگام راهاندازی برنامه توسط سیستم بررسی میشوند و توسط کاربر قابل تغییر نیستند. طبق Apple Developer Documentation (2025)، پیکربندی صحیح Entitlements برای استفاده از iCloud، اعلانهای Push و App Groups الزامی است. Entitlements عنصر کلیدی مدل امنیتی iOS و macOS هستند.
نکات اصلی
Entitlements (ترجمه از انگلیسی — «حقوق») — یک جفت کلید-مقدار است که در مرحله ساخت در امضای کد برنامه گنجانده میشود و مشخص میکند که برنامه به کدام قابلیتها و دادههای سیستم دسترسی دارد. Entitlements از زمان ظهور iOS SDK در مدل امنیتی Apple تعبیه شدهاند و برای همه برنامههای توزیعشده از طریق App Store الزامی هستند.
مفهوم Entitlements با مجوزهای سنتی (permissions) در Android متفاوت است. اگر مجوزهای Android در لحظه اولین استفاده از قابلیت از کاربر درخواست میشوند، Entitlements در iOS هنگام راهاندازی برنامه بر اساس امضای دیجیتال توسط سیستم بررسی میشوند. کاربر نمیتواند entitlement را لغو یا تغییر دهد — این حق از طریق App Store Connect به توسعهدهنده اعطا میشود و در پروفایل امضا تثبیت میشود.
هر entitlement دارای هدف و فرمت کاملاً مشخصی است. به عنوان مثال، com.apple.security.application-groups دسترسی به کانتینر مشترک برای مجموعه برنامههای یک توسعهدهنده را مجاز میکند، و aps-environment پشتیبانی از اعلانهای Push را فعال میکند. Apple درخواستهای entitlement را به صورت دستی در فرآیند 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) — یکی دیگر از entitlements مهم که به برنامههای یک گروه اجازه دسترسی مشترک به عناصر 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، رعایت فرمت کلیدها و پیشوندها مهم است. Entitlements Apple از سبک دامنه معکوس (com.apple.*) استفاده میکنند. Entitlements سفارشی برای اهداف شخصی نیز امکانپذیر است، اما باید در پورتال توسعهدهنده ثبت شوند. Xcode برای همه کلیدهای استاندارد entitlements تکمیل خودکار ارائه میدهد.
برای اشکالزدایی Entitlements از دستور codesign در ترمینال macOS استفاده کنید. دستور codesign -d --entitlements :- <مسیر_برنامه> تمام entitlementsی را که برنامه با آنها امضا شده است نمایش میدهد. این برای تشخیص مشکلات مفید است: اگر entitlement در خروجی وجود نداشته باشد، برنامه بدون توجه به تنظیمات در Xcode به قابلیت مربوطه دسترسی نخواهد داشت.
اگرچه Xcode هنگام فعالسازی Capabilities فایل entitlement را به طور خودکار تولید میکند، توسعهدهندگان باتجربه اغلب آن را برای تنظیم دقیق دستی ایجاد یا ویرایش میکنند. فایل دارای پسوند .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 را در نظر بگیرید. برنامههای دسکتاپ macOS (Sandboxed) مجموعه گستردهتری از entitlements نسبت به iOS دارند. به عنوان مثال، entitlement com.apple.security.temporary-exception.* اجازه دور زدن موقت sandbox را برای عملیات خاص میدهد — در iOS چنین entitlements کاملاً وجود ندارند.
Entitlements ارتباط نزدیکی با پروفایلهای امضا (Provisioning Profiles) دارند. پروفایل امضا فایلی است که گواهی توسعهدهنده، لیست دستگاههای مجاز و مجموعه entitlements را برای یک برنامه خاص به هم متصل میکند. هنگام نصب برنامه، سیستم entitlements موجود در کد را با entitlements موجود در پروفایل امضا مقایسه میکند. اگر 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 — مجوزهای پویایی هستند که در زمان اجرا از کاربر درخواست میشوند (دوربین، موقعیت جغرافیایی).
از دستور codesign -d --entitlements در ترمینال macOS استفاده کنید. برای برنامههای App Store، entitlement از طریق ابزار ProvisionQL یا Xcode Organizer بررسی میشود.
تغییر entitlements نیاز به ساخت جدید و امضای مجدد برنامه دارد. اگر entitlement نیاز به تأیید Apple دارد، باید دوباره از App Review عبور کنید. بدون امضای مجدد، تغییر entitlement غیرممکن است.
فایل .entitlements — سند XML با فرمت plist که در پروژه Xcode ذخیره میشود. این فایل شامل لیست تمام entitlements برنامه به صورت ساختاریافته است و همراه با فایل اجرایی امضا میشود.
Capabilities — کلیدهای سطح بالا در برگه Signing & Capabilities در Xcode هستند. فعالسازی capability به طور خودکار entitlements مربوطه را به فایل .entitlements اضافه کرده و پروفایل امضا را پیکربندی میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید