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
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 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.
// 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 — 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 ü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 — 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 — 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.
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 — 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, 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 birimi | Build Variant | Scheme | Flavor (--flavor) |
| Build dosyası | build.gradle | .xcconfig | pubspec.yaml |
| Koşullu kod | BuildConfig | Active Compilation Conditions | dart-define |
| Sırlar | BuildConfig/NDK | .xcconfig | .env/dart-define |
| Bağımlılık yöneticisi | Gradle (Maven) | SPM/CocoaPods | pub (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.
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.
#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.
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) { ... }.
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
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, 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.
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, 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.
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
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.