Entitlements হল ডিজিটাল অধিকার এবং অনুমতি যা কোড সাইনিং পর্যায়ে অ্যাপ্লিকেশনকে প্রদান করা হয় এবং Apple অপারেটিং সিস্টেমের সুরক্ষিত বৈশিষ্ট্যগুলিতে অ্যাক্সেস নির্ধারণ করে। ব্যবহারকারীর অনুমতির বিপরীতে, Entitlementsগুলি অ্যাপ্লিকেশন চালু করার সময় সিস্টেম দ্বারা পরীক্ষা করা হয় এবং ব্যবহারকারী দ্বারা পরিবর্তন করা যায় না। Apple ডেভেলপার ডকুমেন্টেশন (2025) অনুসারে, iCloud, Push Notifications এবং App Groups ব্যবহারের জন্য Entitlements-এর সঠিক কনফিগারেশন বাধ্যতামূলক। Entitlements iOS এবং macOS সুরক্ষা মডেলের একটি মূল উপাদান।
মূল পয়েন্ট
Entitlements (ইংরেজি থেকে অনুবাদ “অধিকার”) হল কী-ভ্যালু জোড়া যা বিল্ড সময়ে অ্যাপ্লিকেশনের কোড সইতে অন্তর্ভুক্ত করা হয় এবং নির্ধারণ করে যে অ্যাপ্লিকেশনটি কোন সিস্টেম ক্ষমতা এবং ডেটা অ্যাক্সেস করতে পারে। iOS SDK চালু হওয়ার পর থেকে Entitlements Apple-এর সুরক্ষা মডেলে নির্মিত হয়েছে এবং App Store-এর মাধ্যমে বিতরণ করা সমস্ত অ্যাপ্লিকেশনের জন্য বাধ্যতামূলক।
Entitlements-এর ধারণা Android-এর ঐতিহ্যবাহী অনুমতিগুলির থেকে আলাদা। Android অনুমতিগুলি প্রথম বৈশিষ্ট্য ব্যবহারের সময় ব্যবহারকারীর কাছ থেকে অনুরোধ করা হয়, যেখানে iOS-এ Entitlements ডিজিটাল সইয়ের ভিত্তিতে অ্যাপ্লিকেশন চালু করার সময় সিস্টেম দ্বারা যাচাই করা হয়। ব্যবহারকারী কোনো entitlement প্রত্যাহার বা পরিবর্তন করতে পারে না — এই অধিকার App Store Connect-এর মাধ্যমে ডেভেলপারকে দেওয়া হয় এবং প্রভিশনিং প্রোফাইলে এম্বেড করা হয়।
প্রতিটি entitlement-এর কঠোরভাবে সংজ্ঞায়িত উদ্দেশ্য এবং বিন্যাস রয়েছে। উদাহরণস্বরূপ, com.apple.security.application-groups একই ডেভেলপারের অ্যাপ্লিকেশনগুলির একটি সেটের জন্য শেয়ার্ড কন্টেইনারে অ্যাক্সেসের অনুমতি দেয়, যখন aps-environment Push Notifications সমর্থন সক্ষম করে। Apple App Review প্রক্রিয়ার সময় ম্যানুয়ালি entitlements অনুরোধ পর্যালোচনা করে, যা অধিকারের অপব্যবহার রোধ করে।
Entitlements-গুলিকে কার্যকরী উদ্দেশ্য অনুসারে বেশ কয়েকটি বিভাগে শ্রেণীবদ্ধ করা হয়। সিস্টেম পরিষেবা — iCloud, Push Notifications, Siri। নিরাপত্তা এবং ডেটা — Keychain Access Groups, App Groups, Data Protection। নেটওয়ার্ক এবং যোগাযোগ — Multipath TCP, VPN, Hotspot Configuration। হার্ডওয়্যার ক্ষমতা — ক্যামেরা, মাইক্রোফোন, Bluetooth (সংশ্লিষ্ট capabilities-এর মাধ্যমে)।
Xcode সম্পর্কিত entitlements-গুলিকে Capabilities-এ গ্রুপ করে — Signing & Capabilities ট্যাবে উচ্চ-স্তরের সুইচ। একটি Capability সক্ষম করলে .entitlements ফাইলে প্রয়োজনীয় entitlements স্বয়ংক্রিয়ভাবে যোগ হয়। উদাহরণস্বরূপ, Push Notifications capability সক্ষম করলে aps-environment entitlement development বা production মান সহ যোগ হয়, যখন iCloud সক্ষম করলে CloudKit এবং Key-Value স্টোরেজের জন্য entitlements-এর একটি সেট যোগ হয়।
কিছু capabilities-এর জন্য Apple Developer পোর্টালে অতিরিক্ত কনফিগারেশনের প্রয়োজন হয়। উদাহরণস্বরূপ, App Groups-এর জন্য পোর্টালে গ্রুপ শনাক্তকারী নিবন্ধন করতে হবে, যার পরে এটি Xcode-এ নির্বাচনের জন্য উপলব্ধ হয়। Push Notifications-এর জন্য একটি APNs কী বা সার্টিফিকেট তৈরি করতে হবে। এই প্রাথমিক পদক্ষেপগুলি ছাড়া, সঠিক .entitlements ফাইল থাকলেও entitlement কাজ করবে না।
Entitlement com.apple.security.application-groups একই ডেভেলপারের একাধিক অ্যাপ্লিকেশনকে ফাইল সিস্টেমে একটি সাধারণ কন্টেইনার শেয়ার করার অনুমতি দেয়। এটি প্রধান অ্যাপ্লিকেশন এবং এক্সটেনশন (Widget, Watch App, Share Extension) এর মধ্যে ডেটা শেয়ার করার জন্য ব্যবহৃত হয়। একই গ্রুপের সমস্ত অ্যাপ্লিকেশন শেয়ার্ড /Library/Group Containers/ ডিরেক্টরিতে ফাইল পড়তে এবং লিখতে পারে।
Keychain Access Groups (কী keychain-access-groups) আরেকটি গুরুত্বপূর্ণ entitlement যা একই গ্রুপের অ্যাপ্লিকেশনগুলিকে Keychain আইটেমগুলিতে শেয়ার্ড অ্যাক্সেসের অনুমতি দেয়। এটি একক সাইন-অন বাস্তবায়নের জন্য গুরুত্বপূর্ণ: ব্যবহারকারী একটি অ্যাপ্লিকেশনে লগ ইন করে এবং পাসওয়ার্ড পুনরায় প্রবেশ না করেই অন্য অ্যাপ্লিকেশনে একই অ্যাকাউন্টে স্বয়ংক্রিয়ভাবে অ্যাক্সেস পায়।
Entitlements-এর কনফিগারেশন Xcode-এ টার্গেট সেটিংসের Signing & Capabilities ট্যাবে করা হয়। ডেভেলপার তালিকা থেকে প্রয়োজনীয় Capabilities নির্বাচন করে, এবং Xcode স্বয়ংক্রিয়ভাবে .entitlements ফাইল তৈরি বা আপডেট করে। এই ফাইলটি প্রজেক্টে plist কাঠামো সহ XML ফরম্যাটে সংরক্ষণ করা হয় এবং এই টার্গেটের জন্য সমস্ত entitlement কী ধারণ করে।
<?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 সমস্ত স্ট্যান্ডার্ড entitlement কীগুলির জন্য অটো-সম্পূর্ণতা প্রদান করে।
Entitlements ডিবাগ করার জন্য macOS টার্মিনালে codesign কমান্ড ব্যবহার করুন। কমান্ড codesign -d --entitlements :- <অ্যাপ্লিকেশনের_পথ> অ্যাপ্লিকেশনটি যে সমস্ত entitlements দিয়ে সই করা হয়েছে তা প্রদর্শন করে। এটি সমস্যা নির্ণয়ের জন্য কার্যকর: যদি কোনো entitlement আউটপুটে অনুপস্থিত থাকে, তাহলে অ্যাপ্লিকেশনটি Xcode সেটিংস নির্বিশেষে সংশ্লিষ্ট ফাংশনে অ্যাক্সেস পাবে না।
যদিও Capabilities সক্ষম করার সময় Xcode স্বয়ংক্রিয়ভাবে entitlement ফাইল জেনারেট করে, অভিজ্ঞ ডেভেলপাররা প্রায়শই সূক্ষ্ম টিউনিংয়ের জন্য এটি ম্যানুয়ালি তৈরি বা সম্পাদনা করেন। ফাইলের এক্সটেনশন .entitlements এবং ফরম্যাট plist (XML)। এতে কাস্টম entitlement কী যুক্ত করা যেতে পারে যা Xcode ইন্টারফেসে উপস্থিত নেই, বা বিভিন্ন capabilities-এর entitlements একটি ফাইলে একত্রিত করা যেতে পারে।
ম্যানুয়ালি সম্পাদনা করার সময় XML-এর বাক্যগত শুদ্ধতা নিশ্চিত করা গুরুত্বপূর্ণ। plist কাঠামোতে ত্রুটির কারণে সই করার সময় entitlements প্রয়োগ করা হবে না। Xcode কম্পাইল সময়ে .entitlements ফাইল পরীক্ষা করে এবং ভুল ফরম্যাট থাকলে ত্রুটি দেখায়। একাধিক টার্গেট এবং এক্সটেনশন সহ জটিল প্রজেক্টের জন্য, সাধারণ entitlement কীগুলি আলাদা ফাইলে সংরক্ষণ এবং Build Settings-এর মাধ্যমে ইম্পোর্ট করার পরামর্শ দেওয়া হয়।
// 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 Apple-এর সুরক্ষা মডেলে মূল ভূমিকা পালন করে। যেহেতু entitlements অ্যাপ্লিকেশনের ডিজিটাল সইয়ের অংশ, কোডে পুনরায় সই না করে তাদের সাথে কারচুপি করা অসম্ভব। Apple একাধিক স্তরে entitlements পরীক্ষা করে: বিল্ডের সময়, Xcode entitlements-কে এক্সিকিউটেবল ফাইলের সাথে সই করে; ইনস্টলেশনের সময়, সিস্টেম সইয়ের অখণ্ডতা পরীক্ষা করে; চালু করার সময়, entitlements পুনরায় যাচাই করে।
একটি গুরুত্বপূর্ণ নিরাপত্তা প্রয়োজনীয়তা হল ন্যূনতম entitlement নীতি। ডেভেলপারের কেবলমাত্র সেই entitlements অন্তর্ভুক্ত করা উচিত যা প্রকৃতপক্ষে অ্যাপ্লিকেশনে ব্যবহৃত হয়। অপ্রয়োজনীয় entitlements আক্রমণের পৃষ্ঠ বাড়ায় এবং App Review-তে অ্যাপ্লিকেশন প্রত্যাখ্যানের কারণ হতে পারে। Apple স্পষ্টভাবে পরীক্ষা করে যে entitlements অ্যাপ্লিকেশনের কার্যকারিতার সাথে মেলে কিনা।
কিছু entitlements সংবেদনশীল হিসাবে বিবেচিত হয় এবং 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) iOS-এর তুলনায় entitlements-এর বিস্তৃত সেট রয়েছে। উদাহরণস্বরূপ, entitlement com.apple.security.temporary-exception.* নির্দিষ্ট অপারেশনের জন্য অস্থায়ীভাবে স্যান্ডবক্স বাইপাস করার অনুমতি দেয় — iOS-এ এই ধরনের entitlements সম্পূর্ণ অনুপস্থিত।
Entitlements প্রভিশনিং প্রোফাইলের সাথে ঘনিষ্ঠভাবে জড়িত। একটি প্রভিশনিং প্রোফাইল হল একটি ফাইল যা ডেভেলপার সার্টিফিকেট, অনুমোদিত ডিভাইসের তালিকা এবং একটি নির্দিষ্ট অ্যাপ্লিকেশনের জন্য entitlements-এর সেটকে সংযুক্ত করে। অ্যাপ্লিকেশন ইনস্টল করার সময়, সিস্টেম কোডের entitlements-এর সঙ্গে প্রভিশনিং প্রোফাইলের entitlements-এর তুলনা করে। যদি কোনো entitlement কোডে উপস্থিত থাকে কিন্তু প্রোফাইলে অনুপস্থিত থাকে, তাহলে অ্যাপ্লিকেশন সংশ্লিষ্ট ফাংশনে অ্যাক্সেস পাবে না।
Entitlements নিয়ে সমস্যা নির্ণয়ের জন্য প্রথমে প্রভিশনিং প্রোফাইল পরীক্ষা করুন। Xcode Apple Developer পোর্টালে নির্বাচিত capabilities-এর ভিত্তিতে স্বয়ংক্রিয়ভাবে প্রোফাইল জেনারেট করে। যদি Xcode-এ capability যোগ করা হয় কিন্তু পোর্টালে সক্রিয় না হয়, তাহলে সুরক্ষিত ফাংশন ব্যবহার করার চেষ্টা করলে অ্যাপ্লিকেশন সই ত্রুটি সহ ক্র্যাশ হবে।
আসুন iOS ডেভেলপমেন্টে সবচেয়ে বেশি ব্যবহৃত entitlements দেখি। 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-এর জন্য।
এই প্রতিটি entitlement-এর জন্য একটি কঠোর কনফিগারেশন পদ্ধতি রয়েছে। Push Notifications-এর জন্য Apple Developer পোর্টালে APNs কী জেনারেট করা এবং Xcode-এ capability সক্ষম করা প্রয়োজন। তার পরে, entitlement স্বয়ংক্রিয়ভাবে .entitlements ফাইলে সেট হয়। iCloud-এর জন্য পোর্টালে কন্টেইনার সেটআপ করা এবং Xcode-এ ড্রপডাউন তালিকা থেকে এটি নির্বাচন করা প্রয়োজন।
Associated Domains — একটি entitlement যা অ্যাপ্লিকেশনকে একটি ওয়েব ডোমেনের সাথে সংযুক্ত করে। এটি Universal Links (ডিপ লিংক যা সরাসরি অ্যাপ্লিকেশনে খোলে) এবং Handoff (অন্য Apple ডিভাইসে কাজ চালিয়ে যাওয়া) জন্য ব্যবহৃত হয়। entitlement মানটিতে applinks:example.com ফরম্যাটে স্ট্রিংগুলির একটি অ্যারে থাকে। এর জন্য সার্ভারে apple-app-site-association ফাইল রাখা প্রয়োজন।
জনপ্রিয় entitlements এবং তাদের উদ্দেশ্যের সারণী:
| Entitlement কী | উদ্দেশ্য | পর্যালোচনা প্রয়োজন |
|---|---|---|
| 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 হল স্থির অধিকার যা অ্যাপ্লিকেশনের সইতে এম্বেড করা হয় এবং সিস্টেম দ্বারা চালু করার সময় যাচাই করা হয়। অনুমতিগুলি হল গতিশীল অনুমতি যা রানটাইমে ব্যবহারকারীর কাছ থেকে অনুরোধ করা হয় (ক্যামেরা, ভূ-অবস্থান)।
macOS টার্মিনালে codesign -d --entitlements কমান্ড ব্যবহার করুন। App Store অ্যাপ্লিকেশনের জন্য, ProvisionQL ইউটিলিটি বা Xcode Organizer-এর মাধ্যমে entitlements পরীক্ষা করা হয়।
Entitlements পরিবর্তনের জন্য নতুন বিল্ড এবং অ্যাপ্লিকেশন পুনরায় সই করা প্রয়োজন। যদি entitlement-এর জন্য Apple-এর অনুমোদনের প্রয়োজন হয়, তাহলে আবার App Review-এর মধ্য দিয়ে যেতে হবে। পুনরায় সই না করে, entitlements পরিবর্তন করা অসম্ভব।
.entitlements ফাইল হল plist ফরম্যাটে একটি XML নথি যা Xcode প্রজেক্টে সংরক্ষিত হয়। এটিতে গঠনমূলকভাবে অ্যাপ্লিকেশনের সমস্ত entitlements-এর তালিকা থাকে এবং এটি এক্সিকিউটেবল ফাইলের সাথে সই করা হয়।
Capabilities হল Xcode-এ Signing & Capabilities ট্যাবে উচ্চ-স্তরের সুইচ। একটি capability সক্ষম করলে স্বয়ংক্রিয়ভাবে .entitlements ফাইলে সংশ্লিষ্ট entitlements যোগ হয় এবং প্রভিশনিং প্রোফাইল কনফিগার হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন