TB
← Tüm yazılar

App store yayinlama süreci

Flutter uygulamalarinin iOS App Store ve Google Play'e hazirlanmasi, imzalama, metadata ve inceleme surecindeki teknik adimlari ozetler.

Flutter ile geliştirilen uygulama, geliştirme ortaminda sorunsuz calissa bile store yayininda imzalama, izin aciklamalari, bundle kimligi ve inceleme politikalarina takilabilir. App store yayinlama süreci yalnizca "build al ve yükle" degildir; sürüm yönetimi, gizlilik beyani, crash raporlama ve kullanıcı geri bildirim dongusu ile birlikte dusunulmelidir. Bu makale Flutter odaklı teknik adimlari iOS ve Android icin ayri ayri ele alir.

Yayın oncesi hazirlik kontrol listesi

Store'a cikmadan once su maddeler gozden gecirilmelidir:

  • pubspec.yaml sürüm numarasi: version: 1.2.0+42 formati
  • Üretim API endpoint'leri ve feature flag'ler
  • Debug banner, log ve test hesaplarinin kaldirilmasi
  • Gizlilik politikasi URL'si ve veri toplama aciklamalari
  • Izin metinleri (kamera, konum, bildirim) platform dosyalarinda
  • Obfuscation ve symbol dosyasi yedegi (crash cozumleme icin)

Sürüm kodu (+42) her store yuklemesinde artirilmalidir; ayni kodla tekrar yükleme reddedilir.

Android: imzalama ve App Bundle

Google Play artik çoğu yeni uygulama icin APK yerine Android App Bundle (AAB) ister. Flutter'da release build:

flutter build appbundle --release   --obfuscate --split-debug-info=build/debug-info/

Imzalama icin upload keystore oluşturulur ve android/key.properties ile build.gradle dosyasina baglanir. Keystore dosyasi ve sifreler repoya konmamali; CI secret manager uzerinden enjekte edilmelidir.

Play Console yapilandirmasi

Play Console'da uygulama olusturduktan sonra:

  1. Internal testing track ile ilk AAB yuklemesi
  2. Data safety formunu doldurma
  3. Content rating anketi
  4. Store listing: baslik, açıklama, ekran goruntuleri
  5. Production'a promote etme

Flutter uygulamalarinda target SDK surumu Google'in güncel gereksinimine uygun olmalidir; eski targetSdk degerleri incelemede red sebebi olabilir.

iOS: sertifika, profil ve Archive

iOS tarafinda Apple Developer hesabi, App ID, Distribution sertifikasi ve provisioning profile gerekir. Xcode'da Runner hedefinde bundle identifier, signing team ve release configuration ayarlanir. Flutter komutu:

flutter build ipa --release   --obfuscate --split-debug-info=build/debug-info/

Alternatif olarak flutter build ios --release sonrasi Xcode Organizer uzerinden Archive alinip App Store Connect'e yuklenebilir.

App Store Connect ve TestFlight

Ilk yuklemeden sonra build islenir; eksik export compliance veya encryption sorulari yanitlanmalidir. TestFlight ile internal ve external test kullanıcıları davet edilir. Flutter'da platform özel kod varsa (push, deep link, in-app purchase) test cihazlarinda ayri dogrulama yapin.

Metadata ve ASO temelleri

Store gorunurlugu icin baslik, alt baslik (iOS), kisa açıklama (Android) ve anahtar kelimeler stratejik secilmelidir. Ekran goruntuleri farklı cihaz boyutlari icin hazirlanmali; Flutter uygulamasinin Material ve Cupertino karisiminda tutarlı marka dili korunmali. Video preview opsiyoneldir ancak donusumde etkilidir.

Gizlilik ve uyumluluk

App Tracking Transparency (iOS), GDPR/KVKK metinleri ve üçüncü parti SDK veri paylasimi store incelemesinde sik incelenir. Firebase Analytics, Crashlytics, reklam SDK'lari gibi paketlerin topladigi veriler Data safety ve Privacy Nutrition Label formlarinda açıkça belirtilmelidir. Yanlış beyan uygulamanin kaldirilmasina yol acabilir.

CI/CD ile otomatik yayın

Codemagic, GitHub Actions, Bitrise gibi platformlarda Flutter pipeline tanimlanabilir. Tipik akis: test çalıştır, sürüm numarasini artir, imzali build uret, store API ile yükle. Fastlane supply ve deliver lane'leri Android ve iOS yuklemelerini otomatiklestirir.

# Ornek: surum kodunu CI'da artirma
flutter pub run build_runner build --delete-conflicting-outputs
flutter test
flutter build appbundle --release

Otomasyonda imza materyallerinin güvenliği en kritik konudur. Keystore ve App Store Connect API key'leri yalnizca şifreli secret olarak tutulmalidir.

Obfuscation ve crash sembolizasyonu

--obfuscate release binary boyutunu ve tersine muhendisligi zorlastirir; ancak stack trace'ler anlamsizlasir. --split-debug-info ile uretilen sembol dosyalari Firebase Crashlytics veya Sentry'ye yuklenmelidir. Her store surumu icin eslesen symbol setini arsivlemek zorunludur.

Inceleme reddi ve sik nedenler

Flutter uygulamalarinda sik karsilasilan red nedenleri:

  • Login olmadan calismayan demo hesap bilgisi sunmama
  • WebView icindeki odeme akisi (IAP politikasi)
  • Eksik izin aciklamasi (Info.plist usage strings)
  • Crash veya bos ekran inceleme sirasinda
  • Metadata ile gerçek uygulama davranisinin uyumsuzlugu

Inceleme notlarina test kullanıcısı, VPN gereksinimi ve özel yapılandırma adimlarini açıkça yazmak süreci hizlandirir.

Surumleme stratejisi

Semantic versioning kullanın: breaking değişiklik, yeni özellik, patch. Store'da staged rollout (Android) ve phased release (iOS) ile kademeli acilis riski azaltir. Hotfix gerektiginde branch'ten patch surumu cikarip yalnizca kritik duzeltmeyi tasiyin; feature flag ile yarim kalmis isleri kapali tutun.

Release sonrasi izleme

Yayinlandiktan sonra crash-free users, ANR orani, store yorumlari ve retention metrikleri izlenmelidir. Flutter tarafinda firebase_performance ile ilk acilis suresi, firebase_crashlytics ile hata trendi takip edilir. Kritik hata artisinda once rollback veya hızlı patch degerlendirilir.

Platform özel farklar

Ayni Flutter kodu olsa bile iOS ve Android store kurallari farklidir. Örneğin arka plan konum kullanımı Android'de foreground service bildirimi gerektirebilir; iOS'ta ise "Always" izni icin güçlü gerekce sarttir. Platform channel ile native SDK entegre edildiyse her iki tarafta da ilgili manifest ve plist guncellemeleri release checklist'ine eklenmelidir.

Deep linking ve universal links

Store'dan indirme sonrasi kullanıcıyı doğru ekrana tasimak icin deep link yapilandirmasi release oncesi test edilmelidir. Android App Links ve iOS Universal Links icin domain dogrulama dosyalari, intent filter ve associated domains ayarlari birlikte calismalidir. Flutter tarafinda go_router veya app_links paketi ile gelen URI'nin cold start ve warm start senaryolarinda parse edildigini otomatik testlerle dogrulayin.

In-app purchase ve abonelik

Dijital ürün satan uygulamalarda store politikasi platform odeme sistemini zorunlu kilar. in_app_purchase paketi ile receipt dogrulama, restore purchases ve fiyat yerellestirmesi release checklist'ine eklenmelidir. Sandbox test hesaplari ile abonelik yenileme ve iptal akislari TestFlight ve Play internal track uzerinde ayri ayri dogrulanir.

Localization ve bolgesel gereksinimler

Store listing birden fazla dilde hazirlanabilir; uygulama icindeki flutter_localizations ile tutarlı olmali. Bazi bolgelerde veri ikamet gereksinimi veya yas dogrulamasi ek metadata ister. Sürüm notlarinda kullanıcıya gorunen dilde anlamli değişiklik maddeleri yazmak, güncelleme kabul oranini artirir.

Özet

Flutter uygulamasini store'a tasimak; doğru imzali build, eksiksiz metadata, gizlilik formlari ve test edilmis release adayini bir araya getirmeyi gerektirir. Android'de AAB ve Play Console track'leri, iOS'ta Archive ve TestFlight süreci teknik omurgayi oluşturur. CI otomasyonu ve symbol yönetimi ile tekrarlanabilir, güvenli yayın dongusu kurulabilir.

Store ekran goruntulerini otomatik üretmek icin integration test ve screenshot callback kullanılabilir. Boylece her major surumde görsel set güncel kalir.

iOS'ta dSYM dosyalarini her Archive sonrasi yedekleyin; Crashlytics sembol yuklemesi olmadan stack trace cozulemez. Android tarafinda mapping.txt ayni rolu oynar.

Uygulama icerisinde acilacak web sayfalari ve deeplink scheme'leri store metadata ile uyumlu olmali. App Links ve Universal Links yapilandirmasi eksikse pazarlama kampanyasi kirilabilir.

Store incelemesine gondermeden once gerçek cihazda düşük depolama ve düşük ag senaryolarini test edin; incelemeci cihazlari her zaman optimal kosullarda olmayabilir.

Her release adayinda CHANGELOG ve known issues listesini ekip icinde paylasin; store sürüm notlari ile uyum saglanmali.

Play App Signing etkinse upload key kaybini onlemek icin Google'in yedekleme politikasini okuyun; iOS tarafinda Distribution sertifika suresi dolmadan once yenileme takvimi olusturun.