Provisioning Profile, iOS uygulamalarının kod imzalaması için geliştirici sertifikalarını, uygulama tanımlayıcısını ve izin verilen cihazların listesini birbirine bağlar. Apple Developer Documentation, 2026'ya göre, fiziksel bir cihazda herhangi bir uygulama başlatmak için profil gereklidir — onsuz Xcode bir iPhone veya iPad'e yapı kuramaz. Bu makalede profillerin yapısını, türlerini ve oluşturma sürecini inceleyeceğiz.
Anahtar Noktalar
Provisioning Profile, Apple'ın cihazlarda uygulama kurulumunu ve çalıştırılmasını kontrol etmek için kullandığı, .mobileprovision (iOS için) veya .provisionprofile (macOS için) biçiminde bir dijital yapılandırma dosyasıdır. Profil, kod imzalama meta verilerini içerir ve bunlar olmadan uygulama fiziksel bir iPhone, iPad veya Apple Watch'ta çalıştırılamaz — simülatör, kod gerçek bir işlemcide çalıştırılmak üzere imzalanmadığı için profil gerektirmez.
Profil, Apple Developer Portal üzerinden yayınlanır ve bir son kullanma tarihi vardır — genellikle Development ve Distribution profilleri için bir yıl. Apple politikasına göre profil, imzalandığı Apple Developer Program sertifikasına otomatik olarak bağlanır: sertifika iptal edilir veya süresi dolarsa profil çalışmayı durdurur.
Her profil, Xcode'un anahtar zincirinde profili tanımlamak için kullandığı benzersiz bir UUID içerir. Xcode derleme sırasında uygun profili otomatik olarak seçer, ancak geliştirici Signing & Capabilities ayarlarında seçimi geçersiz kılabilir. Tek bir cihaza sınırsız sayıda profil yüklenebilir — Apple'ın mobil cihaz yönetimi (MDM) sistemi bunu kurumsal uygulama dağıtımı için kullanır.
Kod imzalama profillerin var olmasının ana nedenidir. Apple, bir iOS cihazında çalıştırılan her uygulamanın Apple tarafından yayınlanmış bir sertifikayla imzalanmasını şart koşar. Provisioning Profile bir bağlantı görevi görür: geliştiricinin o cihazda uygulamayı çalıştırma hakkına sahip olduğunu onaylar. Apple Security Guide (2025)'e göre profil mekanizması, geliştirici sertifikası tehlikeye girse bile kullanıcı cihazlarına kötü amaçlı yazılım yüklenmesini önler.
Profil ayrıca uygulama için hangi sistem hizmetlerinin kullanılabilir olduğunu belirler. Uygulama Push bildirimleri kullanıyorsa, Apple Push Notification service (APNs) profil içinde doğru entitlements gerektirir. Bunlar olmadan sunucu bildirimleri cihaza iletilmez. Aynı kural iCloud, App Groups, Wallet, HealthKit ve diğer Apple framework'leri için de geçerlidir.
Geliştiriciler genellikle Provisioning Profile ile Apple Sertifikasını karıştırır. Sertifika, kimliği onaylayan (kimin imzaladığı) dijital bir belgedir, profil ise bir yapılandırmadır (hangi uygulama, hangi cihazlarda, hangi izinlerle). Bir sertifika birden fazla profilde kullanılabilir ve bir profil tam olarak bir sertifikaya bağlıdır. Apple, her uygulama ve her senaryo için ayrı bir profil oluşturulmasını önerir — Development, Ad Hoc, App Store.
Uygulama imzalama süreci birkaç ardışıl adımdan oluşur. Xcode uygulama ikili dosyasını (App Bundle) alır, geliştiricinin özel anahtarıyla imzalar, içine Provisioning Profile'i gömer ve cihaza gönderir. Cihaz, Apple'ın açık anahtarıyla imzayı doğrular, profil UUID'sini sistemdeki güvenilir profiller listesiyle karşılaştırır ve tüm kontroller başarılı olursa uygulamayı başlatır.
Bir kullanıcı App Store'dan uygulama indirdiğinde mekanizma farklıdır. App Store Connect, uygulamayı Apple'ın kendi Distribution sertifikasıyla yeniden imzalar ve geliştiricinin profilini bir Store profiliyle değiştirir. Bu, App Store üzerinden yayınlanan bir uygulamanın teknik olarak geliştirici tarafından değil, Apple tarafından imzalandığı anlamına gelir — ancak orijinal geliştirici imzası, App Store Connect'e yapı yüklenirken doğrulanır.
Ad Hoc dağıtımı için profil, uygulamanın çalıştırılmasına izin verilen belirli cihaz UDID'lerini kaydeder. Ücretsiz bir Apple Developer Program hesabı, testleri yılda 100 cihazla sınırlar. Enterprise profilleri (bir kuruluş içinde dahili dağıtım için) cihaz sınırı yoktur ancak yıllık $299 maliyetinde aktif bir Apple Developer Enterprise Program aboneliği gerektirir.
Provisioning Profile'in geçerlilik süresi oluşturulduğu tarihten itibaren bir yıldır. Süresinin dolmasına 30 gün kala Apple, Xcode ve Developer Portal üzerinden geliştiriciye push bildirimleri göndermeye başlar. Profilin süresi dolarsa, daha önce yüklenmiş bir uygulama çalışmaya devam eder ancak bu profille yeni bir yapı kurulamaz. Xcode, süresi dolmuş bir profille derlemeye çalışırken -402620394 kodlu kod imzalama hatası verir. Apple, Xcode Accounts Preferences üzerinden otomatik profil yenileme ayarlanmasını önerir — böylece Xcode, süresinin dolmasından 24 saat önce profili yeniler.
Apple, her biri uygulama yaşam döngüsünün belirli bir aşaması için tasarlanmış dört ana Provisioning Profile türü sunar. Development profili, Apple Developer Portal'a eklenen fiziksel cihazlarda uygulamayı çalıştırmaya izin verir ve geliştirme ve QA testleri sırasında kullanılır. Development profili oluşturmak için ücretsiz bir Apple geliştirici hesabı yeterlidir.
Ad Hoc profili, App Store'u kullanmadan sınırlı bir test grubuna uygulama dağıtmak için tasarlanmıştır. Profil, UDID ile 100'e kadar cihaz kaydeder ve uygulama doğrudan iTunes, Apple Configurator veya MDM çözümleri aracılığıyla kurulabilir. Ad Hoc yapılarının geçerlilik süresi 12 aydır ve Apple incelemesi gerektirmez.
App Store profili, yalnızca uygulamayı App Store'da yayınlamak için kullanılır ve cihaz listesi içermez — yapı onayından sonra Apple'ın kendisi dağıtımı yönetir. App Store Connect'e bir arşiv yüklerken Xcode, sistemde yüklüyse otomatik olarak App Store profilini kullanır. Enterprise profili, Apple Developer Enterprise Program'lı kuruluşlar içindir ve cihaz sınırı veya Apple incelemesi olmadan dahili uygulama dağıtımına izin verir.
| Profil Türü | Amaç | Cihazlar | Abonelik Ücreti |
|---|---|---|---|
| Development | Geliştirme ve test | 100 UDID'e kadar | Ücretsiz / yıllık $99 |
| Ad Hoc | Test uzmanlarına dağıtım | 100 UDID'e kadar | yıllık $99 |
| App Store | App Store'da yayınlama | Herhangi biri (Apple aracılığıyla) | yıllık $99 |
| Enterprise | Dahili dağıtım | Sınırsız | yıllık $299 |
Provisioning Profile, Apple tarafından imzalanmış DER biçiminde bir dosyadır ve içeriği komut satırından görüntülenebilir. macOS'in Security framework'i, .mobileprovision'ı okunabilir bir XML plist'e dönüştürmeye olanak tanır. Profilin içinde şunlar bulunur: profil UUID'si, App ID (takım öneki + Bundle Identifier), sertifika listesi, izin verilen cihaz listesi (yalnızca Development ve Ad Hoc için), entitlements ve son kullanma tarihi.
App ID, bir Team ID (Apple tarafından atanan 10 karakter) ve bir Bundle Identifier'dan (örn. com.example.myapp) oluşan benzersiz bir uygulama tanımlayıcısıdır. App ID açık (Bundle Identifier ile birebir eşleşme) veya wildcard (birden çok uygulama için *.example.com deseni) olabilir. Apple, Push bildirimleri veya iCloud kullanan uygulamalar için wildcard kullanılmasını önermez — bu hizmetler açık bir App ID gerektirir.
Entitlements, profil içinde uygulamanın sistem kaynaklarına erişim haklarını tanımlayan bir XML bloğudur. Tipik entitlements şunları içerir: aps-environment (Push bildirimleri), com.apple.developer.icloud-services (iCloud), com.apple.security.application-groups (Widget ve Share Extension için App Groups). Apple, Xcode'da etkinleştirilen Capabilities'e göre profile otomatik olarak entitlements ekler. Profildeki entitlements ile kodda talep edilen entitlements arasındaki herhangi bir uyuşmazlık imzalama hatasına neden olur.
Profil oluşturma iki şekilde mümkündür: Apple Developer Portal web arayüzü üzerinden veya Xcode aracılığıyla otomatik olarak. Tipik bir proje için Xcode, Automatically manage signing seçeneği etkinken profilleri otomatik olarak yönetir. Xcode, Apple Developer Portal ile senkronize olarak saniyeler içinde bir sertifika, profil ve App ID oluşturur. Ancak CI/CD boru hatları manuel yönetim gerektirir.
Apple Developer Portal'da manuel olarak profil oluşturmak için: Certificates, Identifiers & Profiles bölümüne gidin, Profiles'i seçin ve "+"ya basın. Ardından profil türünü (Development, Ad Hoc, App Store veya Enterprise) seçin, kayıtlı listeden bir App ID seçin, bir geliştirici sertifikası seçin ve (Development ve Ad Hoc için) cihazları seçin. Oluşturulduktan sonra profil .mobileprovision biçiminde indirilir ve Xcode'da çift tıklanarak kurulur.
CI/CD sunucuları özel bir yaklaşım gerektirir: profil ve sertifika güvenli bir depoda (örn. GitHub Actions sırları) saklanmalıdır. Derleme sırasında profil aracıya yüklenir, ~/Library/MobileDevice/Provisioning Profiles klasörüne yerleştirilir ve sertifika anahtar zincirine aktarılır. Fastlane — imzalama otomasyonu için popüler bir araç — şifrelenmiş bir git deposu aracılığıyla geliştiriciler arasında profilleri ve sertifikaları senkronize eden match komutunu sağlar.
Kod imzalama sorunlarını teşhis etmek için .mobileprovision'ı kodu çözebilir ve içeriğini kontrol edebilirsiniz. Aşağıdaki komut, profilden XML plist'i çıkarır ve okunabilir bir biçimde kaydeder:
# .mobileprovision'ı XML'e dönüştürme
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# Profil son kullanma tarihini kontrol etme
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
Security yardımcı programı macOS Command Line Tools'un bir parçasıdır ve CMS ile imzalanmış profil dosyasının kodunu çözer. -D bayrağı kod çözmeyi, -i giriş dosyasını belirtir. Kod çözme işleminden sonra plist yardımcı programı ikili plist'i XML'e dönüştürür ve grep son kullanma tarihini çıkarır. Bu yöntem, bir sürüm derlemeden önce profilin süresinin dolmadığını doğrulamak için CI/CD'de kullanışlıdır.
En yaygın hata, Xcode'da derleme sırasında "No matching provisioning profiles found" hatasıdır. Xcode'un derleme yapılandırmasıyla eşleşen bir profil bulamaması durumunda ortaya çıkar: Bundle Identifier profildeki App ID ile eşleşmez, sertifika anahtar zincirinde yüklü değildir veya profilin süresi dolmuştur. Çözüm — hedefteki Signing & Capabilities ayarlarını kontrol edin ve gerekirse Automatically manage signing'e geçin.
"Provisioning profile doesn't include the selected device" hatası, UDID'si profile eklenmemiş bir cihazda Development veya Ad Hoc yapısı çalıştırılmaya çalışıldığında görülür. Apple Developer Portal, mevcut bir profile cihaz eklemeye izin verir — bundan sonra profil yeniden indirilmeli ve kurulmalıdır. Xcode, otomatik imzalama yönetimiyle bağlı cihazı otomatik olarak profile ekler.
Entitlements ile ilgili bir sorun, App Store Connect'e yükleme sırasında "The executable was signed with invalid entitlements" hatası olarak kendini gösterir. Nedeni, profildeki entitlements ile projenin .entitlements dosyasındakiler arasındaki uyuşmazlıktır. Apple, profildeki haklar kümesinin uygulama tarafından talep edilen hakların bir üst kümesi olmasını şart koşar. Çözüm — Xcode hedefindeki Capabilities'i kontrol edin ve etkinleştirilen tüm hizmetlerin profilde karşılık gelen entitlements'a sahip olduğundan emin olun. Fastlane, App ID'leri ve profilleri mevcut entitlements ile senkronize eden produce komutunu içerir.
Sıkça Sorulan Sorular
Evet, profildeki App ID, com.example.* şeklinde bir wildcard tanımlayıcısı kullanıyorsa. Ancak wildcard profilleri Push bildirimlerini, iCloud'u, Game Center'ı ve App Groups'u desteklemez. Apple, gelişmiş Capabilities kullanan her uygulama için ayrı bir açık profil oluşturulmasını önerir.
App Store üzerinden yüklenen bir uygulama, geliştiricinin profilinden bağımsız olan Apple'ın Store profilini kullanır. Kullanıcılar uygulamayı indirmeye ve çalıştırmaya devam edebilir. Süresi dolmuş bir profil yalnızca App Store Connect'e yeni bir yapı yüklenmesini engeller — Apple, gönderim sırasında Distribution profilinin geçerli olmasını şart koşar.
Profil, yeni bilgisayardaki ~/Library/MobileDevice/Provisioning Profiles klasörüne kopyalanabilir. Ancak profil, özel anahtarı anahtar zincirinde bulunan bir sertifikaya bağlıdır. Keychain Access aracılığıyla özel anahtarlı sertifikayı dışa aktarmanız ve yeni cihazda içe aktarmanız da gerekir.
Bir bilgisayardaki profil sayısında herhangi bir sınırlama yoktur. Profiller ~/Library/MobileDevice/Provisioning Profiles klasöründe saklanır ve UUID ile tanımlanır. Xcode, App ID ve derleme türüne göre uygun profili otomatik olarak seçer. Yönetimi basitleştirmek için kullanılmayan profillerin Xcode Accounts Preferences üzerinden kaldırılması önerilir.
İmzalama Sertifikası geliştiricinin kimliğini onaylar — Apple tarafından yayınlanan kriptografik bir anahtardır. Provisioning Profile, hangi uygulamanın (App ID) hangi sertifika altında ve hangi cihazlarda çalıştırılabileceğini belirten bir yapılandırma dosyasıdır. Profil her zaman belirli bir sertifikaya atıfta bulunur ancak onun yerine geçmez.
Özet
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.
Ayrıca okuyun