# iOS geliştirici sertifikası: provisioning profile ve Expo

> Sertifika imzalayanı kanıtlar, provisioning profile uygulamayı ve cihazları belirtir. Expo'da EAS ikisini de oluşturup yeniler.

Orijinal sayfa: [iOS geliştirici sertifikası: provisioning profile ve Expo](https://devoria.fr/tr/blog/ios-gelistirici-sertifikasi-provisioning-profile-expo)
Yazar: [Mehdi Azizi](https://devoria.fr/tr/mehdi-azizi)
Yayın: 2026-11-04
İçeriğin son gözden geçirilmesi: 2026-11-04


iOS geliştirici sertifikası, uygulamanı kimin imzaladığını kanıtlar. Provisioning profile ise bu sertifikayı belirli bir uygulamaya bağlar ve uygulamanın nerede çalışmaya yetkili olduğunu söyler. **Expo kullanıyorsan bunları elle oluşturman neredeyse hiç gerekmez: build başlattığında EAS onları oluşturur, saklar ve yeniler.**

Yine de her dosyanın ne işe yaradığını bilmek faydalı. Bir build'in yüklenmeyi reddettiği ya da gönderimin takıldığı gün, sana bir gün kazandıran şey bu bilgi olur. Bu rehber dört öğeyi, ömürlerini, Apple'ın sınırlarını ve tipik hataları, her birinin çözümüyle birlikte ele alıyor.

iOS uygulamalarımı, Solys ve TradaZen dahil, Expo ve EAS ile yayınlıyorum. Sürecin tamamı [Mac olmadan iOS uygulaması yayınlamak](https://devoria.fr/tr/blog/mac-olmadan-ios-uygulama-yayinlamak-expo-eas) yazısında. Burada imzalamanın kaputunu açıyoruz.

## Apple neden imza istiyor

Bir iOS uygulamasının iPhone'a yüklenebilmesi ya da App Store Connect'e gidebilmesi için imzalı olması gerekir. İmza, uygulamanın Apple'ın tanıdığı bir geliştiriciden geldiğini ve o zamandan beri kimsenin onu değiştirmediğini garanti eder.

App Store için içini rahatlatacak bir ayrıntı var. [Apple'ın TN3161 teknik notuna](https://developer.apple.com/documentation/technotes/tn3161-inside-code-signing-certificates) göre App Store, gönderim anında dağıtım sertifikanın geçerli olduğunu kontrol eder, sonra uygulamayı yeniden imzalar. Böylece uygulama artık sertifikanın son kullanma tarihine bağlı kalmaz. **Yani sertifikaların uygulamanın tüm ömrü boyunca değil, gönderim anında geçerli olmalı.**

## Bilmen gereken dört öğe

[Expo'nun kimlik bilgileri dokümantasyonu](https://docs.expo.dev/app-signing/app-credentials/) iOS için üç tane sayıyor: dağıtım sertifikası, profiller ve push bildirim anahtarı. Ben bir de App ID'yi ekliyorum, çünkü o olmadan hiçbir profil var olamaz.

### Dağıtım sertifikası

Bu senin geliştirici imzan. [Apple'ın sertifikalarla ilgili yardım sayfası](https://developer.apple.com/help/account/certificates/certificates-overview) iki aileyi ayırıyor:

- **Apple Development**, geliştirme sırasında uygulamanı kendi cihazlarında çalıştırmaya yarar. Bir kişiye aittir.
- **Apple Distribution**, belirlenmiş test cihazlarına dağıtmaya ya da App Store Connect'e göndermeye yarar. Ekibe aittir ve yalnızca hesap sahibi veya bir admin oluşturabilir.

Dağıtım sertifikası belirli bir uygulamaya ait değildir: aynı sertifika tüm uygulamalarını imzalar. Bir private key ile birlikte gelir ve imzalamayı mümkün kılan bu anahtardır. TN3161'e göre bir Apple sertifikası genellikle oluşturulduğu andan itibaren bir yıl geçerlidir.

### Uygulama kimliği (App ID)

App ID, uygulamanı bir profilin içinde tanımlar. Bundle identifier'ını içerir, örneğin `com.example.myapp` (hayali bir örnek). [Apple'ın yardım sayfasına](https://developer.apple.com/help/account/identifiers/register-an-app-id) göre izin verilen yeteneklerin listesini de taşır: push bildirimleri, App Groups, Sign in with Apple…

Expo'da bu, yapılandırmandaki `ios.bundleIdentifier` alanıdır. **Bunu bir kere ve kalıcı olarak seç**: her yerde, hem yapılandırmanda hem App Store Connect'te aynı olmalı. App ID'nin süresi dolmaz. Ayrıca [Expo'nun iOS yetenekleri dokümantasyonuna](https://docs.expo.dev/build-reference/ios-capabilities/) göre EAS, her build'de yeteneklerini yapılandırmanla senkronize eder.

### Provisioning profile

Profil bağlantıyı kurar. Bir App ID, bir sertifika ve türüne göre yetkili cihazların listesini içerir. Seni ilgilendiren üç tür var:

- **Development**: kayıtlı cihazlarındaki test uygulaman.
- **Ad hoc**: her biri UDID ile tanımlanan belirli bir cihaz listesine yüklenebilen build. EAS'teki "internal distribution" budur.
- **App Store**: App Store Connect ve TestFlight için. [TN3125 notunun](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles) açıkladığı gibi hiçbir cihaz listesi içermez.

Her profilin bir son kullanma tarihi var: Apple'a göre genellikle en fazla bir yıl, Expo'ya göre 12 ay.

### Push bildirim anahtarı (APNs)

APNs anahtarı, senin sunucunun ya da Expo'nunkinin uygulamana bildirim göndermesine izin verir. Yalnızca bir kez indirilebilen bir .p8 dosyasıdır: [Apple onu hesabında saklamaz](https://developer.apple.com/help/account/keys/create-a-private-key). Aynı anahtar tüm uygulamalarında kullanılır ve [süresi hiç dolmaz](https://developer.apple.com/support/expiration/).

## Özet tablo

| Öğe                    | Ne işe yarar          | Süre               | Expo'da kim yönetir       |
| ---------------------- | --------------------- | ------------------ | ------------------------- |
| Dağıtım sertifikası    | Build'lerini imzalar  | Genellikle bir yıl | Giriş yaptıktan sonra EAS |
| App ID                 | Uygulamanı tanımlar   | Süresi dolmaz      | Sen, sonra EAS            |
| App Store profili      | Apple'a gönderim      | En fazla 12 ay     | EAS                       |
| Ad hoc profil          | iPhone'larına yükleme | En fazla 12 ay     | EAS ve cihazların         |
| APNs push anahtarı     | Bildirim gönderme     | Süresi dolmaz      | EAS veya sen              |
| Ücretsiz hesap profili | Xcode ile test        | 7 gün              | Xcode, EAS değil          |

"Sen, sonra EAS": bundle identifier'ı sen seçersin, yeteneklerle EAS ilgilenir. "EAS ve cihazların": her test iPhone'unu sen kaydedersin, profili EAS oluşturur. Son satır ücretsiz Apple hesabıyla ilgili: [Apple'ın hesaplarla ilgili yardım sayfasına](https://developer.apple.com/help/account/basics/about-your-developer-account) göre bu hesabın profilleri oluşturulduktan 7 gün sonra sona erer.

## Bilmen gereken Apple sınırları

- **Dağıtım sertifikaları**: hesap başına çok az. Apple'ın yardım sayfası dağıtım türü ve ekip başına bir taneden, Expo'nun tablosu 2 sınırından bahsediyor. Kuralı aklında tut: **her build'de ya da her bilgisayarda yeni bir sertifika oluşturma.**
- **APNs anahtarları**: Expo'ya göre hesap başına en fazla 2.
- **Profiller**: Expo'ya göre sınır yok.
- **Cihazlar**: [Apple'ın cihazlarla ilgili yardım sayfasına](https://developer.apple.com/help/account/devices/devices-overview) göre ürün ailesi ve üyelik yılı başına 100'e kadar. Bir cihazı devre dışı bırakmak yer açmaz. Cihazları kaldırırsan sayaç bir sonraki üyelik yılının başında 100'e döner.

## EAS senin için ne yapıyor

[Expo'nun yönetilen kimlik bilgileri sayfasına](https://docs.expo.dev/app-signing/managed-credentials/) göre ilk iOS build'in eksik olanları oluşturmayı teklif eder. Apple Developer hesabına giriş yaparsın, EAS dağıtım sertifikasını, profili ve push anahtarını oluşturur, sonra bunları kendi sunucularında saklar. Sonraki build'ler bunları yeniden kullanır.

İşine yarayacak üç nokta:

- **Apple şifren kendi makinende kalır.** [Expo'nun güvenlik sayfası](https://docs.expo.dev/app-signing/security/) şifrenin sunucularına gönderilmediğini ve saklanan kimlik bilgilerinin şifrelendiğini belirtiyor.
- **`eas credentials` her şeyi gösterir**: sertifika, profiller, push anahtarı. Bu komutla bunları değiştirebilir ya da kaldırabilirsin.
- **EAS'te silmek Apple'da silmek demek değildir.** Yer açmak için Apple portalında revoke etmen gerekir.

Kontrolü elinde tutmak istersen yerel kimlik bilgilerini de kullanabilirsin: bir `credentials.json` dosyası sertifikanı (.p12) ve profilini (.mobileprovision) gösterir. Expo bu dosyaları `.gitignore`'a eklemeni istiyor. Bu, [bir Expo uygulamasındaki API anahtarları](https://devoria.fr/tr/blog/expo-gizli-api-anahtari-koruma) için geçerli olan kuralla aynı: bir sır asla repoya gitmez.

## Tipik hatalar ve çözümleri

### Süresi dolmuş profil

Bir ad hoc build profilini içinde taşır: profilin süresi dolunca uygulama test iPhone'larında açılmaz. Öte yandan App Store'da Expo, son kullanma tarihinin yayındaki uygulamaya hiçbir etkisi olmadığını doğruluyor. **Çözüm: yeni bir build başlat.** EAS yeni bir profil oluşturur, ya da bunu `eas credentials` ile kendin yaparsın. Sonra yeni build'i cihazlarına tekrar yükle.

TestFlight ile karıştırma: bir TestFlight build'i, sertifikan ne olursa olsun 90 gün sonra sona erer. Ayrıntılar [iPhone uygulamanı TestFlight ile test etmek](https://devoria.fr/tr/blog/testflight-iphone-uygulama-test-etme) yazısında.

### Süresi dolmuş veya revoke edilmiş sertifika

Apple bu konuda net: üyeliğin geçerliyse App Store'daki uygulamaların etkilenmez. Ama artık bu sertifikayla imzalanmış bir build gönderemezsin. Gönderilmiş ama henüz incelemeye sunulmamış bir build, sertifikası revoke edildiyse Invalid Binary olarak işaretlenebilir. Ayrıca [revoke edilmiş bir sertifika içeren profiller geçersiz hale gelir](https://developer.apple.com/help/account/certificates/revoke-a-certificate).

**Çözüm: `eas credentials` ile ya da bir sonraki build'de yeni bir sertifika oluştur**, sonra profilleri EAS'in yeniden yapmasına izin ver. Ve çalışan bir sertifikayı asla refleksle revoke etme.

### Cihaz ad hoc profilde yok

Yükleme linki sende çalışıyor ama bir test kullanıcısının iPhone'unda çalışmıyor. Nedeni: [Expo'nun internal distribution dokümantasyonu](https://docs.expo.dev/build/internal-distribution/), uygulamayı yalnızca build anında profilde bulunan cihazların yükleyebileceğini açıklıyor.

Çözüm:

1. Cihazı `eas device:create` ile kaydet.
2. EAS'in profili güncellemesi için Apple hesabına bağlı olarak, interaktif modda yeni bir build başlat. Ya da her şeyi yeniden derlemeden mevcut build'i `eas build:resign` ile yeniden imzala.
3. CI ortamında interaktif olmayan mod, profili listesini güncellemeden yeniden kullanır. `--refresh-ad-hoc-provisioning-profile` seçeneğini ekle.

Yeni ya da yeni yenilenmiş bir hesapta Apple'ın yeni bir cihazı işlemesi 24 ila 72 saat sürebilir. Yani cihazı içeren ilk build başarısız olabilir: bekle, sonra yeniden başlat.

### Sertifika sınırına ulaşıldı

Apple yeni bir dağıtım sertifikası oluşturmayı reddediyor. Çoğu zaman eski sertifikalar ortalıkta kalmıştır: başka bir Mac'te Xcode ile ya da başka bir build servisiyle oluşturulmuş. **.p12 dosyası sendeyse mevcut sertifikayı yeniden kullan. Değilse artık kullanılmayanı** Apple portalında **revoke et.** Revoke işlemi yayındaki uygulamalarını etkilemez ama o sertifikayı içeren profilleri geçersiz kılar.

### "Provisioning profile doesn't include signing certificate"

Xcode'un bu mesajı, profilin private key'i makinende olan sertifikayı içermediği anlamına gelir. Tipik neden: Xcode'un otomatik imzalamasını EAS kimlik bilgileriyle karıştırmak. **Tek bir doğruluk kaynağı seç**: ya yönetilen kimlik bilgileriyle EAS build'leri ya da yerel kimlik bilgileri, ikisi birden değil.

### Anahtar revoke edildikten sonra kesilen bildirimler

APNs anahtarını revoke edersen Expo, onu kullanan tüm uygulamaların artık bildirim almayacağı konusunda uyarıyor. Yeni bir anahtar oluştur ve `eas credentials` ile yükle. Kullanıcılarının Expo Push token'ları değişmez.

### Eklenen yetenek, geçersiz profil

Push bildirimleri ya da App Groups gibi bir servisi etkinleştirmek [profili geçersiz kılar](https://developer.apple.com/help/account/provisioning-profiles/edit-download-or-delete-profiles): yeniden oluşturman gerekir. EAS ile yetenek senkronizasyonu her build'de yapılır. Profil yine de reddedilirse `eas credentials` ile yenisini oluşturabilirsin.

## İmzadan sonrası

İmzalı bir build sadece bir adım. Mağaza sayfası, ekran görüntüleri, gizlilik ve incelemeye gönderim [App Store'da uygulama yayınlamak](https://devoria.fr/tr/expertise/app-storeda-uygulama-yayinlama) sayfasında bir arada. Henüz üyeliğin yoksa [Apple geliştirici hesabı](https://devoria.fr/tr/blog/apple-gelistirici-hesabi-ucreti) ile başla. Yeni başlayanlara neden Expo önerdiğimi anlamak için de [mobil uygulama için React Native ve Expo](https://devoria.fr/tr/expertise/react-native-expo-mobil-uygulama) yazısını oku.

## İlk yayınına hazırlanıyorsan

İlk gönderiminden önce [ücretsiz tanılamayı](https://devoria.fr/tr/diagnostic) yap: projende gerçekten neyin engel olduğunu söyler ve sana Apple reddine karşı kontrol listemi gönderir.

Uygulamayı geliştirmek, abonelikleri bağlamak ve imzalamayla boğuşmadan yayınlamak için [iOS & Android Kit](https://devoria.fr/tr/kits/ios), uygulamalarımın başlangıç koduyla dört adımlık süreci kendi temponda takip ettiriyor.

## Sık sorulan sorular

### Provisioning profile nedir?

Uygulamanın çalışmasına ya da Apple'a gitmesine izin veren dosyadır. Bir App ID'yi, bir sertifikayı ve türüne göre bir cihaz listesini birbirine bağlar. App Store profili hiç cihaz içermez, ad hoc profil birkaç cihazı listeler.

### iOS geliştirici sertifikası ücretsiz mi?

Ayrı bir fiyatı yok: dağıtım sertifikası yılda 99 $ olan Apple Developer Program'a dahil. Ücretsiz bir Apple hesabıyla Xcode en fazla 3 cihazda test etmene izin verir, ama profiller 7 gün sonra sona erer ve yayınlamak mümkün değildir.

### Apple dağıtım sertifikası ne kadar süre geçerli?

Apple'a göre genellikle oluşturulduğu andan itibaren bir yıl. Provisioning profile'lar da en fazla 12 ay geçerli. Push bildirim anahtarının ise süresi hiç dolmaz.

### Dağıtım sertifikamın süresi dolarsa ne olur?

Üyeliğin geçerli olduğu sürece App Store'daki uygulamalarına bir şey olmaz. Sadece bu sertifikayla imzalanmış yeni bir build gönderemezsin. EAS ile bir sonraki build'de ya da `eas credentials` ile yeni bir sertifika oluşur.

### iOS sertifikası oluşturmak için Mac gerekir mi?

EAS kullanıyorsan hayır. Komut satırından Apple hesabına giriş yaparsın, EAS da sertifikayı ve profili hem Windows'ta hem Linux'ta oluşturur. EAS olmadan klasik yöntem Xcode'dan ya da bir Mac'teki Anahtar Zinciri Erişimi'nden geçer.

### Bir ad hoc profil kaç cihaz içerebilir?

Hesabın üyelik yılı başına 100 iPhone'a kadar kaydedebilir, diğer her cihaz ailesi için de aynı sayıda. Devre dışı bırakılan bir cihaz yine sayılır. Daha fazla kişiyle test etmek için TestFlight'ı kullan.


## Projen

[Review Kit](https://devoria.fr/tr/kits/app-review): App Store inceleme kontrol listem, düzelttiğim Apple retlerim, Google Play kontrol listesi ve üç Claude Code skill'i. ₺2.699.

[iOS & Android Kit](https://devoria.fr/tr/kits/ios): Claude Code ile iPhone ve Android uygulamanı yap: uygulamalarımın başlangıç kodu, mağazalara kadar giden yol ve tüm kitler. ₺5.499.

[Analiz: Seni iPhone uygulamandan ayıran ne?](https://devoria.fr/tr/diagnostic): 7 soru, 60 saniye: iPhone uygulamanı yayınlamanı asıl neyin engellediğini, 4 adımlık yolunu ve sana uygun kiti öğren.
