iOS geliştirmede Entitlements: nedir, türleri ve nasıl yapılandırılır

Yazar: IT Sectr Yayınlanma: 2026-05-18 Okuma süresi: 8 dk

Entitlements, kod imzalama aşamasında bir uygulamaya atanan ve Apple işletim sisteminin korunan özelliklerine erişimi belirleyen dijital haklar ve izinlerdir. Kullanıcı izinlerinin aksine, Entitlements uygulama başlatıldığında sistem tarafından kontrol edilir ve kullanıcı tarafından değiştirilemez. Apple Developer Documentation (2025)'a göre, iCloud, Push Notifications ve App Groups kullanımı için Entitlements'ın doğru yapılandırılması zorunludur. Entitlements, iOS ve macOS güvenlik modelinin temel bir öğesidir.

Temel Noktalar

  • Entitlements, uygulamanın imzasına gömülü dijital izinlerdir ve iOS ile macOS'un korunan özelliklerine erişimi belirler.
  • İzinlerden Farkı — Entitlements başlangıçta sistem tarafından kontrol edilir ve kullanıcıdan istenmez; izinler çalışma zamanında sistem diyalogları aracılığıyla istenir.
  • Capabilities — Xcode, Entitlements'ı Capabilities altında gruplar: Push Notifications, iCloud, App Groups, In-App Purchase ve diğerleri.
  • Entitlements Dosyası — (.entitlements), Xcode projesinde anahtar-değer formatında haklar listesi içeren, Apple tarafından imzalanmış bir XML dosyasıdır.
  • Güvenlik — entitlements kod imzalama sırasında doğrulanır; yüklü bir uygulamada entitlements'ların kurcalanması dijital imzayı bozar ve başlatmayı engeller.

Entitlements Nedir?

Entitlements (İngilizceden “haklar” olarak çevrilir), derleme zamanında uygulamanın kod imzasına dahil edilen ve uygulamanın hangi sistem yeteneklerine ve verilerine erişebileceğini belirleyen anahtar-değer çiftleridir. Entitlements, iOS SDK'nın tanıtılmasından bu yana Apple'ın güvenlik modeline yerleşiktir ve App Store aracılığıyla dağıtılan tüm uygulamalar için zorunludur.

Entitlements kavramı, Android'deki geleneksel izinlerden farklıdır. Android izinleri bir özelliğin ilk kullanımında kullanıcıdan istenirken, iOS'ta Entitlements dijital imzaya dayalı olarak uygulama başlatıldığında sistem tarafından doğrulanır. Kullanıcı bir entitlement'ı iptal edemez veya değiştiremez — bu hak geliştiriciye App Store Connect aracılığıyla verilir ve sağlama profiline gömülür.

Her entitlement'ın kesin olarak tanımlanmış bir amacı ve formatı vardır. Örneğin, com.apple.security.application-groups aynı geliştiricinin uygulama seti için paylaşılan bir kapsayıcıya erişime izin verirken, aps-environment Push Notifications desteğini etkinleştirir. Apple, App Review süreci sırasında entitlement taleplerini manuel olarak inceler ve bu da hakların kötüye kullanılmasını önler.

iOS'ta Entitlements Türleri

Entitlements, işlevsel amaçlarına göre birkaç kategoriye ayrılır. Sistem Hizmetleri — iCloud, Push Notifications, Siri. Güvenlik ve Veri — Keychain Access Groups, App Groups, Data Protection. Ağ ve İletişim — Multipath TCP, VPN, Hotspot Configuration. Donanım Yetenekleri — Kamera, Mikrofon, Bluetooth (ilgili capabilities aracılığıyla).

Capabilities ve Hizmet Entitlements

Xcode, ilgili entitlements'ları Capabilities altında gruplar — Signing & Capabilities sekmesindeki üst düzey anahtarlar. Bir Capability'i etkinleştirmek, gerekli entitlements'ları .entitlements dosyasına otomatik olarak ekler. Örneğin, Push Notifications capability'sini etkinleştirmek aps-environment entitlement'ını development veya production değeriyle eklerken, iCloud'u etkinleştirmek CloudKit ve Key-Value depolama için bir dizi entitlement ekler.

Bazı capabilities, Apple Developer portalında ek yapılandırma gerektirir. Örneğin, App Groups portalda bir grup tanımlayıcısının kaydedilmesini gerektirir, ardından Xcode'da seçilebilir hale gelir. Push Notifications için bir APNs anahtarı veya sertifikası oluşturulmalıdır. Bu ön adımlar olmadan, doğru bir .entitlements dosyası olsa bile entitlement çalışmaz.

App Groups ve Keychain Erişimi

com.apple.security.application-groups entitlement'ı, aynı geliştiricinin birden çok uygulamasının dosya sisteminde ortak bir kapsayıcıyı paylaşmasına olanak tanır. Bu, ana uygulama ile uzantılar (Widget, Watch App, Share Extension) arasında veri paylaşımı için kullanılır. Aynı gruptaki tüm uygulamalar, paylaşılan /Library/Group Containers/ dizinindeki dosyaları okuyabilir ve yazabilir.

Keychain Access Groups (anahtar keychain-access-groups), aynı gruptaki uygulamaların Keychain öğelerine paylaşımlı erişime sahip olmasını sağlayan bir başka önemli entitlement'dır. Bu, tek oturum açma (SSO) uygulamak için kritiktir: kullanıcı bir uygulamada oturum açar ve şifreyi yeniden girmeden başka bir uygulamada aynı hesaba otomatik olarak erişir.

Entitlements Nasıl Yapılandırılır

Entitlements yapılandırması, Xcode'da hedef ayarlarının Signing & Capabilities sekmesinde yapılır. Geliştirici listeden gerekli Capabilities'leri seçer ve Xcode otomatik olarak .entitlements dosyasını oluşturur veya günceller. Bu dosya, projede plist yapısına sahip XML formatında saklanır ve bu hedef için tüm entitlement anahtarlarını içerir.

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>

Manuel olarak bir entitlement dosyası oluştururken anahtar formatına ve ön eklere dikkat etmek önemlidir. Apple entitlement'ları ters domain stili (com.apple.*) kullanır. Kendi amaçlarınız için özel entitlement'lar da mümkündür, ancak geliştirici portalında kaydedilmelidir. Xcode, tüm standart entitlement anahtarları için otomatik tamamlama sağlar.

Entitlements'ları hata ayıklamak için macOS terminalinde codesign komutunu kullanın. codesign -d --entitlements :- <uygulama_yolu> komutu, uygulamanın imzalandığı tüm entitlements'ları gösterir. Bu, sorunları teşhis etmek için yararlıdır: çıktıda bir entitlement eksikse, uygulama Xcode ayarlarından bağımsız olarak ilgili işleve erişemez.

Manuel Olarak Entitlement Dosyası Oluşturma

Xcode, Capabilities etkinleştirildiğinde entitlement dosyasını otomatik olarak oluştursa da deneyimli geliştiriciler ince ayar için bunu genellikle manuel olarak oluşturur veya düzenler. Dosyanın uzantısı .entitlements ve formatı plist'tir (XML). Xcode arayüzünde bulunmayan özel entitlement anahtarları eklenebilir veya farklı capabilities'lerin entitlement'ları tek bir dosyada birleştirilebilir.

Manuel olarak düzenlerken XML'in sözdizimsel doğruluğunu sağlamak önemlidir. plist yapısındaki bir hata, imzalama sırasında entitlement'ların uygulanmamasına neden olur. Xcode, .entitlements dosyasını derleme zamanında kontrol eder ve format yanlışsa hata verir. Birden çok hedef ve uzantıya sahip karmaşık projeler için, ortak entitlement anahtarlarının ayrı dosyalarda saklanması ve Build Settings aracılığıyla içe aktarılması önerilir.

cpp
// 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 ve Uygulama Güvenliği

Entitlements, Apple'ın güvenlik modelinde anahtar bir rol oynar. Entitlements, uygulamanın dijital imzasının bir parçası olduğu için, kodu yeniden imzalamadan kurcalamak imkansızdır. Apple, entitlements'ları birden çok düzeyde kontrol eder: derleme sırasında Xcode, entitlements'ları yürütülebilir dosyayla birlikte imzalar; yükleme sırasında sistem imza bütünlüğünü kontrol eder; başlangıçta entitlements'ları yeniden doğrular.

Önemli bir güvenlik gereksinimi minimum entitlement ilkesidir. Geliştirici, yalnızca uygulamada gerçekten kullanılan entitlements'ları eklemelidir. Gereksiz entitlements, saldırı yüzeyini artırır ve App Review'da uygulamanın reddedilmesine neden olabilir. Apple, entitlements'ların uygulamanın işlevselliğiyle eşleşip eşleşmediğini açıkça kontrol eder.

Bazı entitlements hassas kabul edilir ve Apple'ın ek onayını gerektirir. Bunlar şunları içerir: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) ve com.apple.developer.nfc.readersession.formats (NFC). Bu entitlements'ları elde etmek için, App Review sürecinde gerekliliklerini gerekçelendirmek gerekir.

Entitlements ile çalışırken iOS ve macOS arasındaki farkları dikkate almak önemlidir. macOS masaüstü uygulamaları (Sandboxed), iOS'a kıyasla daha geniş bir entitlements setine sahiptir. Örneğin, com.apple.security.temporary-exception.* entitlement'ı belirli işlemler için geçici olarak sandbox'ı atlamaya izin verir — bu tür entitlements iOS'ta tamamen bulunmaz.

Entitlements ve Sağlama Profilleri

Entitlements, Sağlama Profilleri (Provisioning Profiles) ile yakından ilişkilidir. Bir sağlama profili, geliştirici sertifikasını, izin verilen cihazların listesini ve belirli bir uygulama için bir dizi entitlement'ı birbirine bağlayan bir dosyadır. Bir uygulama yüklenirken sistem, koddaki entitlement'ları sağlama profilindeki entitlement'larla karşılaştırır. Bir entitlement kodda mevcutsa ancak profilde yoksa, uygulama ilgili işleve erişemez.

Entitlements ile ilgili sorunları teşhis etmek için önce sağlama profilini kontrol edin. Xcode, Apple Developer portalında seçilen capabilities'lere göre profilleri otomatik olarak oluşturur. Xcode'da bir capability eklenmiş ancak portalda etkin değilse, korunan bir işlevi kullanmaya çalıştığında uygulama bir imza hatasıyla çökecektir.

Sık Kullanılan Entitlements

iOS geliştirmede en sık kullanılan entitlements'lara bakalım. aps-environment (Push Notifications) — push bildirimleri göndermek için zorunludur. com.apple.developer.ubiquity-container-identifiers (iCloud) — CloudKit aracılığıyla veri senkronizasyonu için. com.apple.security.application-groups — uygulamalar ve uzantılar arasında veri paylaşımı için. com.apple.developer.associated-domains — Universal Links ve Handoff için.

Bu entitlements'ların her biri için sıkı bir yapılandırma prosedürü vardır. Push Notifications, Apple Developer portalında bir APNs anahtarı oluşturulmasını ve Xcode'da capability'nin etkinleştirilmesini gerektirir. Bundan sonra entitlement, .entitlements dosyasında otomatik olarak ayarlanır. iCloud, portalda bir kapsayıcı yapılandırmayı ve Xcode'da açılır listeden seçmeyi gerektirir.

Associated Domains — uygulamayı bir web alan adına bağlayan bir entitlement'dır. Universal Links (doğrudan uygulamada açılan derin bağlantılar) ve Handoff (başka bir Apple cihazında çalışmaya devam etme) için kullanılır. Entitlement değeri, applinks:example.com formatında bir dizi içerir. Sunucuda bir apple-app-site-association dosyasının bulunmasını gerektirir.

Popüler entitlements ve amaçlarının tablosu:

Entitlement AnahtarıAmaçİnceleme Gerekli
aps-environmentPush BildirimleriHayır
com.apple.developer.ubiquity-*iCloud SenkronizasyonuHayır
application-groupsPaylaşılan Uygulama KapsayıcısıHayır
com.apple.developer.healthkitHealthKit VerileriEvet
com.apple.developer.nfc.*NFC Etiket OkumaEvet
associated-domainsUniversal LinksHayır

Sıkça Sorulan Sorular

Entitlements, iOS'taki İzinlerden nasıl farklıdır?

Entitlements, uygulamanın imzasına gömülü statik haklardır ve başlangıçta sistem tarafından doğrulanır. İzinler, çalışma zamanında kullanıcıdan istenen dinamik yetkilerdir (kamera, konum).

Yüklü bir uygulamanın Entitlements'ları nasıl kontrol edilir?

macOS terminalinde codesign -d --entitlements komutunu kullanın. App Store uygulamaları için, ProvisionQL yardımcı programı veya Xcode Organizer aracılığıyla entitlements kontrol edilir.

Yayınlandıktan sonra Entitlements değiştirilebilir mi?

Entitlements'ları değiştirmek yeni bir derleme ve uygulamayı yeniden imzalamayı gerektirir. Entitlement, Apple'ın onayını gerektiriyorsa, App Review'dan tekrar geçmeniz gerekir. Yeniden imzalama olmadan, entitlements'ları değiştirmek imkansızdır.

Xcode'da Entitlements Dosyası nedir?

.entitlements dosyası, Xcode projesinde saklanan plist formatında bir XML belgesidir. Uygulamanın tüm entitlement'larının yapılandırılmış bir listesini içerir ve yürütülebilir dosyayla birlikte imzalanır.

Xcode'da Capabilities nedir?

Capabilities, Xcode'da Signing & Capabilities sekmesindeki üst düzey anahtarlardır. Bir capability etkinleştirmek, ilgili entitlements'ları otomatik olarak .entitlements dosyasına ekler ve sağlama profilini yapılandırır.

Özet

  • Entitlements, iOS ve macOS'un korunan sistem işlevlerini kullanmak için uygulamanın kod imzasına gömülü dijital haklarıdır.
  • İzinlerden farkı — entitlements başlangıçta imzaya dayalı olarak sistem tarafından doğrulanır, kullanıcıdan istenmez ve iptal edilemez.
  • Capabilities, Push Notifications, iCloud, App Groups, In-App Purchase ve diğer işlevler için entitlements'ların Xcode gruplamalarıdır.
  • Kontrol — yüklü uygulama haklarını teşhis etmek için macOS terminalinde codesign komutu aracılığıyla.
  • Hassas entitlements — HealthKit, NFC, PassKit, App Review aracılığıyla Apple'ın ek onayını gerektirir.
  • Minimum ayrıcalık ilkesi — saldırı yüzeyini azaltmak ve incelemeyi başarıyla geçmek için yalnızca gerekli entitlements'ları ekleyin.
  • Güvenlik — entitlements dijital imza ile korunur; tüm uygulamayı yeniden imzalamadan kurcalamak imkansızdır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun