Entitlements adalah hak dan izin digital yang diberikan kepada aplikasi pada tahap penandatanganan kode dan menentukan akses ke fitur-fitur yang dilindungi dari sistem operasi Apple. Berbeda dengan izin pengguna, Entitlements diperiksa oleh sistem saat aplikasi dijalankan dan tidak dapat diubah oleh pengguna. Menurut Apple Developer Documentation (2025), konfigurasi Entitlements yang benar wajib untuk menggunakan iCloud, Pemberitahuan Push, dan App Groups. Entitlements adalah elemen kunci dari model keamanan iOS dan macOS.
Poin Utama
Entitlements (diterjemahkan dari bahasa Inggris — "hak") — adalah pasangan kunci-nilai yang disertakan dalam tanda tangan kode aplikasi pada tahap pembangunan dan menentukan fungsi serta data sistem apa yang dapat diakses aplikasi. Entitlements telah tertanam dalam model keamanan Apple sejak kemunculan iOS SDK dan wajib untuk semua aplikasi yang didistribusikan melalui App Store.
Konsep Entitlements berbeda dari izin tradisional (permissions) di Android. Jika izin Android diminta dari pengguna saat pertama kali menggunakan fitur, Entitlements di iOS diperiksa oleh sistem saat startup aplikasi berdasarkan tanda tangan digital. Pengguna tidak dapat mencabut atau mengubah entitlement — hak ini diberikan kepada pengembang melalui App Store Connect dan ditetapkan dalam profil penandatanganan.
Setiap entitlement memiliki tujuan dan format yang ditentukan secara ketat. Misalnya, com.apple.security.application-groups mengizinkan akses ke wadah bersama untuk kumpulan aplikasi dari pengembang yang sama, dan aps-environment mengaktifkan dukungan untuk Pemberitahuan Push. Apple meninjau permintaan entitlement secara manual dalam proses App Review, yang mencegah penyalahgunaan hak.
Entitlements diklasifikasikan berdasarkan tujuan fungsional ke dalam beberapa kategori. Layanan Sistem — iCloud, Push Notifications, Siri. Keamanan dan Data — Keychain Access Groups, App Groups, Data Protection. Jaringan dan Komunikasi — Multipath TCP, VPN, Hotspot Configuration. Kemampuan Perangkat Keras — Camera, Microphone, Bluetooth (melalui capabilities terkait).
Xcode mengelompokkan entitlements terkait ke dalam Capabilities — sakelar tingkat tinggi di tab Signing & Capabilities. Mengaktifkan Capability secara otomatis menambahkan entitlements yang diperlukan ke file .entitlements. Misalnya, mengaktifkan Capability Push Notifications menambahkan entitlement aps-environment dengan nilai development atau production, dan mengaktifkan iCloud menambahkan kumpulan entitlements untuk CloudKit dan Key-Value storage.
Beberapa capabilities memerlukan konfigurasi tambahan di portal Apple Developer. Misalnya, untuk App Groups perlu mendaftarkan ID grup di portal, setelah itu tersedia untuk dipilih di Xcode. Untuk Push Notifications perlu menghasilkan kunci APNs atau sertifikat. Tanpa langkah awal ini, entitlement tidak akan berfungsi meskipun dengan file .entitlements yang benar.
Entitlement com.apple.security.application-groups memungkinkan beberapa aplikasi dari pengembang yang sama memiliki wadah bersama di sistem file. Ini digunakan untuk berbagi data antara aplikasi utama dan ekstensi (Widget, Watch App, Share Extension). Semua aplikasi dari satu grup dapat membaca dan menulis file di direktori bersama /Library/Group Containers/.
Keychain Access Groups (kunci keychain-access-groups) — entitlement penting lainnya yang memungkinkan aplikasi dari satu grup memiliki akses bersama ke elemen Keychain. Ini sangat penting untuk implementasi autentikasi terpadu: pengguna masuk di satu aplikasi dan secara otomatis mendapatkan akses ke akun yang sama di aplikasi lain tanpa memasukkan ulang kata sandi.
Konfigurasi Entitlements dilakukan di Xcode pada tab Signing & Capabilities di pengaturan target. Pengembang memilih Capabilities yang diperlukan dari daftar, dan Xcode secara otomatis membuat atau memperbarui file .entitlements. File ini disimpan di proyek dalam format XML dengan struktur plist dan berisi semua kunci entitlements untuk target ini.
<?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>
Saat membuat file entitlement secara manual, penting untuk mematuhi format kunci dan prefiks. Entitlements Apple menggunakan gaya domain terbalik (com.apple.*). Entitlements kustom untuk keperluan sendiri juga dimungkinkan, tetapi harus didaftarkan di portal pengembang. Xcode menyediakan pelengkapan otomatis untuk semua kunci entitlement standar.
Untuk men-debug Entitlements, gunakan perintah codesign di terminal macOS. Perintah codesign -d --entitlements :- <path_ke_aplikasi> menampilkan semua entitlements yang digunakan untuk menandatangani aplikasi. Ini berguna untuk mendiagnosis masalah: jika entitlement tidak ada dalam output, aplikasi tidak akan mendapatkan akses ke fungsi terkait terlepas dari pengaturan di Xcode.
Meskipun Xcode menghasilkan file entitlement secara otomatis saat mengaktifkan Capabilities, pengembang berpengalaman sering membuat atau mengeditnya secara manual untuk penyesuaian yang lebih presisi. File ini memiliki ekstensi .entitlements dan format plist (XML). Di dalamnya dapat ditambahkan kunci entitlement kustom yang tidak tersedia di antarmuka Xcode, atau menggabungkan entitlements dari berbagai capabilities dalam satu file.
Saat mengedit secara manual, penting untuk memantau kebenaran sintaksis XML. Kesalahan dalam struktur plist akan menyebabkan entitlements tidak diterapkan saat penandatanganan. Xcode memeriksa file .entitlements pada tahap kompilasi dan menampilkan kesalahan jika format tidak benar. Untuk proyek kompleks dengan banyak target dan ekstensi, disarankan untuk menyimpan kunci entitlement bersama di file terpisah dan mengimpornya melalui Build Settings.
// cli: memeriksa entitlements aplikasi yang terinstal
codesign -d --entitlements :- /Applications/Safari.app
// Contoh keluaran berisi daftar entitlements aktif
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Entitlements memainkan peran kunci dalam model keamanan Apple. Karena entitlements adalah bagian dari tanda tangan digital aplikasi, pemalsuannya tidak mungkin dilakukan tanpa menandatangani ulang kode. Apple memeriksa entitlements di beberapa tingkat: saat pembangunan, Xcode menandatangani entitlements bersama file yang dapat dieksekusi; saat instalasi, sistem memeriksa integritas tanda tangan; saat startup, memverifikasi entitlements kembali.
Salah satu persyaratan keamanan penting adalah prinsip entitlement minimal. Pengembang harus hanya mengaktifkan entitlements yang benar-benar digunakan dalam aplikasi. Entitlements berlebihan meningkatkan permukaan serangan dan dapat menyebabkan penolakan aplikasi di App Review. Apple secara eksplisit memeriksa kesesuaian entitlements dengan fungsionalitas aplikasi.
Beberapa entitlements dianggap sensitif (sensitive) dan memerlukan persetujuan tambahan dari Apple. Ini termasuk: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) dan com.apple.developer.nfc.readersession.formats (NFC). Untuk mendapatkan entitlements ini, perlu menjelaskan kebutuhannya dalam proses App Review.
Saat bekerja dengan entitlements, penting untuk mempertimbangkan perbedaan antara iOS dan macOS. Aplikasi desktop macOS (Sandboxed) memiliki kumpulan entitlements yang lebih luas dibandingkan iOS. Misalnya, entitlement com.apple.security.temporary-exception.* memungkinkan untuk sementara melewati sandbox untuk operasi tertentu — di iOS, entitlements semacam itu tidak ada sama sekali.
Entitlements terkait erat dengan profil penandatanganan (Provisioning Profiles). Profil penandatanganan adalah file yang menghubungkan sertifikat pengembang, daftar perangkat yang diizinkan, dan kumpulan entitlements untuk aplikasi tertentu. Saat instalasi aplikasi, sistem membandingkan entitlements dalam kode dengan entitlements dalam profil penandatanganan. Jika entitlement ada dalam kode tetapi tidak ada dalam profil, aplikasi tidak akan mendapatkan akses ke fungsi terkait.
Untuk mendiagnosis masalah dengan entitlements, pertama-tama periksa profil penandatanganan. Xcode secara otomatis menghasilkan profil berdasarkan capability yang dipilih di portal Apple Developer. Jika capability ditambahkan di Xcode tetapi tidak aktif di portal, aplikasi akan crash dengan kesalahan penandatanganan saat mencoba menggunakan fungsi yang dilindungi.
Mari kita lihat entitlements yang paling sering digunakan dalam pengembangan iOS. aps-environment (Push Notifications) — wajib untuk mengirim pemberitahuan push. com.apple.developer.ubiquity-container-identifiers (iCloud) — untuk sinkronisasi data melalui CloudKit. com.apple.security.application-groups — untuk berbagi data antara aplikasi dan ekstensi. com.apple.developer.associated-domains — untuk Universal Links dan Handoff.
Untuk setiap entitlements ini ada prosedur konfigurasi yang ketat. Push Notifications memerlukan pembuatan kunci APNs di portal Apple Developer dan mengaktifkan capability di Xcode. Setelah itu, entitlement secara otomatis ditambahkan ke file .entitlements. iCloud memerlukan konfigurasi wadah di portal dan memilihnya di Xcode dari daftar drop-down.
Associated Domains — entitlement yang menghubungkan aplikasi dengan domain web. Digunakan untuk Universal Links (tautan dalam yang terbuka langsung di aplikasi) dan Handoff (melanjutkan pekerjaan di perangkat Apple lain). Nilai entitlement berisi array string dalam format applinks:example.com. Untuk berfungsi, diperlukan penempatan file apple-app-site-association di server.
Tabel entitlements populer dan tujuannya:
| Entitlement Key | Tujuan | Perlu Peninjauan |
|---|---|---|
| aps-environment | Pemberitahuan Push | Tidak |
| com.apple.developer.ubiquity-* | Sinkronisasi iCloud | Tidak |
| application-groups | Wadah bersama aplikasi | Tidak |
| com.apple.developer.healthkit | Data HealthKit | Ya |
| com.apple.developer.nfc.* | Pembacaan tag NFC | Ya |
| associated-domains | Universal Links | Tidak |
Pertanyaan yang Sering Diajukan
Entitlements adalah hak statis yang tertanam dalam tanda tangan aplikasi dan diperiksa oleh sistem saat startup. Permissions adalah izin dinamis yang diminta dari pengguna saat runtime (kamera, geolokasi).
Gunakan perintah codesign -d --entitlements di terminal macOS. Untuk aplikasi dari App Store, entitlement diperiksa melalui utilitas ProvisionQL atau melalui Xcode Organizer.
Perubahan entitlements memerlukan pembangunan baru dan penandatanganan ulang aplikasi. Jika entitlement memerlukan persetujuan Apple, perlu melalui App Review lagi. Tanpa penandatanganan ulang, perubahan entitlement tidak mungkin dilakukan.
File .entitlements — dokumen XML dalam format plist yang disimpan di proyek Xcode. Ini berisi daftar semua entitlements aplikasi dalam bentuk terstruktur dan ditandatangani bersama file yang dapat dieksekusi.
Capabilities adalah sakelar tingkat tinggi di tab Signing & Capabilities di Xcode. Mengaktifkan capability secara otomatis menambahkan entitlements yang sesuai ke file .entitlements dan mengonfigurasi profil penandatanganan.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga