Mobil Geliştirmede Yapılandırma Yönetimi: Nedir, Hangi Seçenekler Var ve Nasıl Ayarlanır

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

Yapılandırma yönetimi, mobil geliştirmenin en hafife alınan yönlerinden biridir. CloudBees (2025)'e göre, production olaylarının %47'si yanlış build yapılandırmalarıyla ilişkilidir. Build Variant, Scheme ve .env dosyalarının doğru ayarlanması, kararlı CI/CD ve öngörülebilir sürümlerin anahtarıdır.

Önemli Noktalar

  • Mobil uygulamalarda yapılandırma yönetimi, Build Variant (Android), Scheme (iOS) ve .env (çapraz platform) üzerine kuruludur — production olaylarının %47'si yanlış ayarlarla ilişkilidir.
  • iOS, Scheme + .xcconfig kullanır. Scheme, derleme, test ve arşivlemeyi yönetir. .xcconfig, build ayarlarını dosyalara taşır.
  • Çapraz platform araçları — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (ortam değişkenleri) — yapılandırmayı merkezileştirir.
  • Koşullu Derleme — derleme zamanında kod ekleme/çıkarma. #if DEBUG, BuildConfig.DEBUG — sürüm davranışını değiştirmeden hata ayıklama için.
  • API anahtarları ve sırlar kodda saklanamaz. .env, Build Config veya proxy sunucu kullanın. .apk/.ipa'yı tersine derlemek önemsizdir.

Android'de Yapılandırma Yönetimi: Build Variant ve build.gradle

Build Variant — Build Type (debug/release/staging) ve Product Flavor'un (free/paid, demo/full) bir kombinasyonudur. Gradle, her kombinasyon için otomatik olarak bir variant oluşturur: freeDebug, freeRelease, paidDebug, paidRelease. Her variant'ın kendi kodu, kaynakları ve bağımlılıkları olabilir — bu, Android'de mobil uygulamalarda yapılandırma yönetiminin temelidir.

Build Variant vs Product Flavor

Build Type — build ayarları: hata ayıklamanın etkin olup olmadığı, imzalama, ProGuard optimizasyonu. debug varsayılan olarak debuggable=true içerir, release — minifyEnabled=true.

Product Flavor — uygulama çeşidi: ücretsiz (free), ücretli (paid), demo. Flavor'lar farklı applicationId, kaynaklar ve SDK bağımlılıklarına sahip olabilir.

groovy
// build.gradle — Android ürün flavor yapılandırması
android {
    productFlavors {
        free {
            applicationId "com.example.app.free"
            versionName "1.0-free"
        }
        paid {
            applicationId "com.example.app.paid"
            versionName "1.0-paid"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
}

Örnek iki flavor oluşturur: free ve paid. Free için ayrı bir applicationId ayarlanmıştır — bu, her iki uygulamanın tek bir cihaza yüklenmesine izin verir. BuildConfig her variant için oluşturulur: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Koşullu mantık için kodda BuildConfig'u kullanın.

settings.gradle ve Gradle KTS

settings.gradle — proje modüllerini tanımlayan kök Gradle dosyası.

Gradle KTS — Kotlin DSL kullanan Groovy alternatifi. KTS, Android Studio'da otomatik tamamlama ve tip denetimi sağlar. Yeni projeler için önerilir.

iOS'te Yapılandırma Yönetimi: Scheme ve .xcconfig

iOS'te yapılandırma yönetimi Scheme üzerine kuruludur — neyin ve nasıl oluşturulacağını tanımlayan Xcode yapılandırması: Build Configuration (Debug/Release), testler, analiz, arşivleme. Scheme'ler farklı ortamlar (Development, Staging, Production) için çoğaltılabilir. Scheme'ler xcshareddata klasöründe .xcscheme dosyalarında saklanır.

.xcconfig Dosyaları

.xcconfig — build ayarlarını metin biçiminde depolayan Xcode yapılandırma dosyası. Mobil uygulama yapılandırma yönetimi için iOS, .xcconfig kullanır: Git'te sürümleme, projeler arasında yeniden kullanım, daha az manuel ayar. .xcconfig'te SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY ayarlanır.

Info.plist — uygulama meta veri dosyası. Sürüm, tanımlayıcı, izinleri depolar. Info.plist, Build Settings'teki Info.plist File aracılığıyla her Scheme için farklı olabilir.

AndroidManifest.xml — Android karşılığı: izinleri, bileşenleri, meta verileri depolar.

Scheme vs Build Configuration

Scheme — build senaryosu (ne yapılacağı). Build Configuration — ayarlar kümesi (nasıl yapılacağı). Bir Scheme, bir Build Configuration (Debug veya Release) kullanır. CI/CD için: aynı Scheme'de Archive eylemini Release'e, Test eylemini Debug'a yapılandırın.

Flutter ve React Native'de Yapılandırma Yönetimi: pubspec.yaml, Podfile, .env

pubspec.yaml — Flutter proje yapılandırma dosyası. Bağımlılıkları, sürümleri, kaynakları içerir. --dart-define aracılığıyla ortam değişkenlerini destekler.

Podfile — iOS için CocoaPods bağımlılık yöneticisi. Kütüphane sürümlerini ve platformu tanımlar.

.env — tüm platformlar için ortam değişkenlerini içeren dosya. Flutter ve React Native, yapılandırma yönetimi için farklı yaklaşımlar kullanır: Flutter'da dart-define, React Native'de react-native-config. Çapraz platform projelerinde yapılandırma yönetimi, stack'e bağlı olarak farklı araçlar içerir.

.env ve Ortam Değişkenleri

.env — anahtar=değer çiftlerinden oluşan metin dosyası. Git'e commit edilmez (.gitignore'a ekleyin). Flutter için — flutter_dotenv, iOS için — #include ile Config.xcconfig, Android için — BuildConfig. env değişkenleri: API_URL, SENTRY_DSN, APP_SECRET. Mobil geliştirme yapılandırma yönetiminde, .env, sırları depo dışında saklamak için fiili standarttır.

Podfile ve pubspec.yaml

Podfile, CocoaPods bağımlılıklarını ve platformu tanımlar (platform :ios, '15.0'). Flutter için pubspec.yaml — dependencies ve dev_dependencies. Her ikisi de koşullu bağımlılıkları destekler: pod 'Analytics', :configs => ['Release'] veya flutter pub add --flavor free. IT Sectr'de, mobil projelerde sırlar için .env + BuildConfig ve yerel bağımlılıklar için Podfile kullanıyoruz.

Parametre Android iOS Flutter
Yapılandırma birimiBuild VariantSchemeFlavor (--flavor)
Build dosyasıbuild.gradle.xcconfigpubspec.yaml
Koşullu kodBuildConfigActive Compilation Conditionsdart-define
SırlarBuildConfig/NDK.xcconfig.env/dart-define
Bağımlılık yöneticisiGradle (Maven)SPM/CocoaPodspub (dart)

Tablo, mobil platformlar arasında yapılandırma yönetimindeki temel farklılıkları gösterir. Android, Build Variant aracılığıyla daha fazla esneklik sunar. iOS daha basittir ancak daha az esnektir. Flutter, yapılandırmayı dart-define'da merkezileştirir, ancak yerel bağımlılıklar yine de Podfile/build.gradle yapılandırmasını gerektirir.

Yapılandırma Yönetiminde Koşullu Derleme

Koşullu Derleme — bayraklara bağlı olarak derleme zamanında kod ekleme veya çıkarma. Bu, yapılandırma yönetiminin bir parçasıdır: hata ayıklama araçlarının (günlük kaydı, denetçi) debug build'lerine gömülmesine ve release'den çıkarılmasına olanak tanır. Uygulama platformlara göre farklılık gösterir.

Swift'te Koşullu Derleme

#if DEBUG — Swift ön işlemci yönergesi. Blok içindeki kod yalnızca Debug yapılandırmasında derlenir. Diğer bayraklar: #if !RELEASE, #if targetEnvironment(simulator). Build Settings'te Active Compilation Conditions — -D FLAG_NAME ile özel bayraklarınızı ekleyin. Derleme koşulları aracılığıyla build yapılandırma yönetimi, iOS'te standart uygulamadır.

Kotlin'de Koşullu Derleme

BuildConfig.DEBUG — boolean alan, debug build'inde true. BuildConfig, Gradle tarafından otomatik olarak oluşturulur. Özel bayraklar için build.gradle'da buildConfigField kullanın: buildConfigField "boolean", "REPORT_CRASHES", "true". Kodda: if (BuildConfig.REPORT_CRASHES) { ... }.

Flutter'da Koşullu Derleme

dart-define — Flutter derleme bayrakları: flutter run --dart-define=ENV=staging. Kodda: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Koşullu mobil uygulama build'leri için, kod oluşturma ile build_runner eklentisini kullanın.

Sıkça Sorulan Sorular

Android'de Build Variant, Product Flavor'dan nasıl farklıdır?

Build Variant = Build Type (debug/release) + Product Flavor. Flavor, uygulama çeşididir (ücretli/ücretsiz, istemci/sunucu), Build Type ise build ayarlarıdır (hata ayıklama/optimizasyon). flavour + type kombinasyonu variant'ı oluşturur: örneğin, paidDebug.

.xcconfig nedir ve iOS'te neden gereklidir?

.xcconfig, build ayarlarını metin biçiminde depolayan bir Xcode yapılandırma dosyasıdır. Xcode projesinden ayarları Git dostu dosyalara taşımayı sağlayarak mobil projelerde CI/CD ve ekip çalışmasını basitleştirir.

Mobil uygulamada API anahtarları güvenli bir şekilde nasıl saklanır?

API anahtarları kodda saklanamaz — herhangi bir .apk veya .ipa tersine derlenebilir. .env dosyaları, bir backend proxy veya Build Config aracılığıyla karartma kullanın. IT Sectr, sırları sunucuda saklamayı ve kimlik doğrulamadan sonra istemciye vermeyi önerir.

Koşullu derleme nedir ve ne zaman kullanılır?

Koşullu derleme, bayraklara bağlı olarak derleme zamanında kod ekleme/çıkarmadır. Swift'te — #if DEBUG, Kotlin'de — BuildConfig.DEBUG. Debug'da günlük kaydını etkinleştirmek ve release'de devre dışı bırakmak için kullanılır. Bu, mobil geliştirmede yapılandırma yönetiminin önemli bir öğesidir.

CocoaPods olmayan bir projede Podfile gerekli midir?

Podfile yalnızca CocoaPods ile çalışırken kullanılır. SPM veya Carthage için gerekli değildir. CocoaPods'u terk ettiyseniz projede Podfile bırakmayın — ekibi ve CI/CD sistemini karıştırır.

Özet

  • Mobil uygulamalarda yapılandırma yönetimi kararlı CI/CD'nin temelidir. Android Build Variant kullanır, iOS Scheme kullanır, Flutter dart-define kullanır.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig her variant için oluşturulur.
  • iOS: Scheme + .xcconfig yapılandırmayı yönetir. Info.plist — uygulama meta verileri.
  • Flutter: build değişkenleri için dart-define. Bağımlılıklar için pubspec.yaml.
  • Koşullu derleme (#if DEBUG, BuildConfig.DEBUG) — yapılandırma yönetiminin parçası, release'de hata ayıklama kodunu kaldırmanın standart yolu.
  • .env — sırların depo dışında güvenli depolanması. .env'yi Git'e commit etmeyin.
  • Mobil projelerde yapılandırma yönetimi ilk commit'ten itibaren dikkat gerektirir — doğru build ayarı her sürümde saatlerce hata ayıklamayı önler.

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ış