React Native ve Expo ile App Store ve Google Play'e uygulama yayınlamak

React Native ve Expo ile App Store ve Google Play'e uygulama yayınlamak

Kod bitince iş bitmiyor. Geliştirici hesabı maliyetleri, Google'ın 12 test kullanıcısı kuralı, Apple'ın gizlilik bildirimi zorunluluğu ve EAS ile derleyip göndermenin gerçek sırası.

Furkan Özay·2 Eylül 2026·5 dk okuma

Mobil uygulama geliştirmenin zor kısmı sanıldığı gibi kod değil. Tek kod tabanından iki platform çıkarmak React Native ve Expo ile bugün oldukça rahat. Asıl sürprizi mağazalar yapıyor: hesaplar, gizlilik formları, test gereksinimleri ve red sebepleri.

Bu yazı o kısmı anlatıyor — kod yazmayı bitirdikten sonra uygulamanın gerçekten yayına girmesi için gerekenleri.

Önce maliyet

ÜcretBiçim
Apple Developer Program99 USDYıllık — ödemeyi bırakırsan uygulamaların mağazadan düşüyor
Google Play Console25 USDTek seferlik — hesap ömrü boyunca

Aradaki fark önemli: Apple'da bu bir abonelik. Uygulamayı yayınlayıp unutamıyorsun, her yıl yenilemen gerekiyor.

💡Hesap kimin adına?

Müşteri için uygulama yapıyorsan hesaplar müşterinin adına açılmalı. Uygulama senin hesabından yayınlanırsa, yollarınız ayrıldığında uygulamanın sahipliği sorun oluyor — Apple'da hesaplar arası transfer mümkün ama prosedürlü, bazı durumlarda hiç mümkün değil.

Google'ın 12 test kullanıcısı kuralı

Bu, hazırlıksız yakalananların takvimini en çok bozan şey ve Türkçe kaynaklarda neredeyse hiç geçmiyor.

Kural

13 Kasım 2023'ten sonra açılmış kişisel geliştirici hesapları için: bir uygulamayı üretime (production) alabilmek üzere önce kapalı test yürütmen gerekiyor — en az 12 test kullanıcısıyla, kesintisiz 14 gün boyunca. Ancak bunu tamamladıktan sonra Play Console'dan üretim erişimi başvurusu yapabiliyorsun.

Kural ilk çıktığında 20 kullanıcıydı; Aralık 2024'te 12'ye indirildi.

Ayrıntılar acıtıyor:

  • 14 gün kesintisiz olmalı. Bir kullanıcı katılıp çıkarsa sayılmıyor; tekrar katılırsa sayaç sıfırdan başlıyor.
  • 12 kullanıcı aynı anda kayıtlı olmalı. Farklı zamanlarda toplam 12 kişi test etmiş olması yetmiyor.
  • Bu süre kod yazma süresine ek. Uygulama bittiğinde en az iki hafta daha var demek.
⚠️Pratik sonuç

Müşteriye "üç haftada yayında olur" diye söz verdiysen ve hesap yeni açılmış bir kişisel hesapsa, bu sözü tutamıyorsun. Kurumsal (organizasyon) hesaplarda bu şart aranmıyor — takvimi belirleyen şey bu yüzden hesap tipi.

Ben bu yüzden zamanlamayı hesap açılışından değil, test kullanıcılarının toplandığı günden sayıyorum.

Apple'ın gizlilik bildirimi

1 Mayıs 2024'ten beri App Store'a gönderilen tüm yeni uygulamalar ve güncellemeler, "required reason API" kullanan üçüncü parti SDK'lar için gizlilik bildirimi (PrivacyInfo.xcprivacy) içermek zorunda. Bu bir plist dosyası ve uygulamanın hangi veri türlerini topladığını, belirli API'leri hangi gerekçeyle kullandığını beyan ediyor.

Bildirimi eksik olan uygulamalar inceleme aşamasında reddediliyor.

Expo tarafında bu yönetilebilir durumda: kütüphanelerin çoğu kendi bildirimini getiriyor, kendi ekleyeceklerini de yapılandırmadan tanımlıyorsun. Ama "kod bitti, gönderelim" dediğin gün ilk karşılaşacağın şey bu olabilir.

Formlar: ne topladığını beyan etmek

Her iki mağaza da veri toplama beyanı istiyor:

  • Apple — App Privacy: Hangi veriyi topluyorsun, ne için kullanıyorsun, kullanıcıyla ilişkilendiriliyor mu? Mağaza sayfasındaki "gizlilik etiketleri" buradan üretiliyor.
  • Google — Data Safety: Aynı soruların Google'daki karşılığı, artı verinin şifrelenip şifrelenmediği ve kullanıcının silme talebi yapıp yapamayacağı.

Beyanın uygulamanın gerçek davranışıyla uyuşması gerekiyor. Uyuşmazlık tespit edilirse uygulama kaldırılabiliyor.

💬Sunucusuz uygulamanın avantajı

BreakChain'i yazarken bilinçli bir karar verdim: hiç sunucu yok. Kullanıcı sigarayı bıraktığı tarihi, günlük adedi ve fiyatı giriyor; hesaplamaların tamamı cihazda yapılıyor ve veri AsyncStorage ile yalnız cihazda kalıyor. Bildirimler de yerel.

Bunun mağaza tarafındaki karşılığı büyük: toplanan veri yok, dolayısıyla beyan edilecek veri de yok. Gizlilik metni kısa, formlar birkaç dakika, veri ihlali riski sıfır — çünkü elinde tutulan veri sıfır.

Uygulamanın gerçekten sunucuya ihtiyacı var mı sorusunu baştan sormak, yalnız altyapı maliyetini değil hukuki yükü de belirliyor.

Gizlilik metni bir URL olmalı

İki mağaza da gizlilik politikasının erişilebilir bir adreste yayınlanmasını istiyor. Uygulamanın içinde bir metin olması yetmiyor; kayıtta bir bağlantı vermen gerekiyor.

Uygulamanın kendi sitesi yoksa en pratik yol, mevcut bir siteye alt sayfa açmak. Bu sitede /privacy-policy/breakchain böyle duruyor — mağaza kaydının işaret ettiği adres o.

EAS ile derleme ve gönderme

Expo kullanıyorsan derleme için yerel bir Mac'e ihtiyacın yok; EAS Build imzalama sertifikalarını da yönetiyor.

Bash
# Kurulum
npm install -g eas-cli
eas login
eas build:configure
 
# Mağaza için derleme
eas build --platform ios
eas build --platform android
 
# Mağazaya gönderme
eas submit --platform ios
eas submit --platform android

Sertifika ve profil yönetimi buradaki en büyük kolaylık: iOS imzalama geleneksel olarak sürecin en can sıkıcı kısmıydı, EAS bunu senin yerine yapıyor.

⚠️Sürüm numaraları

Her mağaza gönderiminde derleme numarasının (buildNumber / versionCode) artmış olması gerekiyor. Aynı numarayla ikinci kez gönderemiyorsun ve hata mesajı ilk bakışta anlaşılmıyor. EAS bunu otomatik artırabiliyor; açmakta fayda var.

Mağaza listelemesi

Kod bittikten sonra hazırlanacaklar:

  • Uygulama simgesi — köşeleri sen yuvarlamıyorsun, mağaza kendi maskesini uyguluyor. Kare ve dolu gönder.
  • Ekran görüntüleri — belirli cihaz boyutlarında, belirli sayıda. Bu, çoğu kişinin son güne bıraktığı ve en çok vakit alan iş.
  • Açıklama metni — mağaza içi aramada da kullanılıyor.
  • Kategori, yaş sınırı, iletişim bilgisi.
  • Test hesabı — uygulamada giriş varsa, inceleyene çalışan bir hesap vermen gerekiyor. Vermezsen reddediliyor.

Sık görülen red sebepleri

📋Gönderim öncesi kontrol
  • Gizlilik metni URL'si çalışmıyor ya da boş sayfa
  • Beyan edilen veri toplama, uygulamanın gerçek davranışıyla uyuşmuyor
  • Giriş gerektiren uygulamada inceleyene test hesabı verilmemiş
  • Uygulama "tamamlanmamış" görünüyor: boş ekranlar, çalışmayan düğmeler
  • Ekran görüntüleri uygulamanın gerçek hâlini göstermiyor
  • Gerekli izin isteniyor ama neden istendiği açıklanmamış
  • iOS'ta gizlilik bildirimi eksik

Yayın işin sonu değil

Uygulama yayına girdikten sonra da bakım gerekiyor: platform sürümleri değişiyor, Apple ve Google zaman zaman yeni beyan zorunlulukları getiriyor, kütüphaneler eskiyor. "Bir kez yaz, unut" bir mobil uygulamada web'e göre daha az geçerli — çünkü altındaki iki platform da kendi takvimiyle ilerliyor.

Bu yüzden mobil işlerde sürüm güncellemesini baştan konuşuyorum: uygulamayı kim, hangi sıklıkla güncelleyecek?

💡Bu işi birlikte yapalım

React Native ile geliştirme ve mağaza yayın süreçlerinin yürütülmesi verdiğim hizmetlerden biri — kapsamı ve nasıl ilerlediğimizi mobil uygulama sayfasında yazdım. Yayında olan bir örnek için BreakChain'e bakabilirsin.

📝Kaynak

Google Play'in test gereksinimi Play Console Yardım sayfasına, Apple'ın gizlilik bildirimi zorunluluğu Expo dokümantasyonuna dayanıyor. Mağaza kuralları değişiyor; göndermeden önce güncel hâlini kontrol et.

Bu yazıyı faydalı bulduysan paylaşabilirsin.

Furkan Özay

Yazılım geliştirici ve eğitmen; Next.js, React ve altyapı üzerine yazıyor.

czay.dev

Bunu da oku

Yorumlar