Ortam Değişkenleri: Mobil Projelerde Nedir, Kullanımı ve Yapılandırması

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

Ortam değişkenleri, kodu değiştirmeden davranışı yapılandırmak için uygulama başlatılırken iletilen dinamik değerlerdir. Geliştirme, test ve üretim yapılandırmalarını ayırmaya olanak tanırlar. Twelve-Factor App, 2025'e göre, yapılandırma kodda değil, ortam değişkenlerinde saklanmalıdır. Ortam değişkenleri, API anahtarlarının, backend URL'sinin ve özellik bayraklarının güvenli yönetimini sağlar.

Önemli Noktalar

  • Ortam değişkenleri, farklı çalışma ortamları için uygulama yapılandırmasını kaynak kodundan ayırır
  • .env dosyaları değişkenleri KEY=VALUE formatında saklar ve .gitignore ile depodan hariç tutulur
  • iOS, derleme zamanında değişkenleri iletmek için xcconfig ve Build Settings kullanır
  • Android, yapılandırma alanları oluşturmak için BuildConfig ve gradle.properties kullanır
  • Güvenlik: anahtarlar ve tokenlar CI/CD ile yüklenmeli, kodda veya depoda saklanmamalıdır

Ortam Değişkenleri Nedir

Ortam değişkenleri, işletim sistemi API'si aracılığıyla uygulama süreci tarafından erişilebilen anahtar-değer çiftleridir. Süreç oluşturulduğunda iletilir ve yalnızca çalışma süresi boyunca var olurlar. Kaynak koduna gömülü yapılandırma parametrelerinin aksine, ortam değişkenleri değerleri değiştirmek için yeniden derleme gerektirmez. Bu, Twelve-Factor App'in temel bir ilkesidir ve kod ile yapılandırma arasında net bir ayrım sağlar.

Mobil geliştirmede, ortam değişkenleri farklı ortamlar için farklı yapılandırma sorununu çözer: geliştirici yerel bir sunucu kullanır, test uzmanı staging kullanır ve kullanıcılar üretim kullanır. Kodda if-else koşullarıyla üç backend URL'si depolamak yerine, geliştirici derleme zamanında bir ortam değişkeni aracılığıyla tek bir URL iletir. Bu, kodu basitleştirir ve test ortamında yanlışlıkla üretim sunucusunu kullanma riskini ortadan kaldırır.

Ana avantaj güvenliktir: hassas veriler kod deposuna sızmaz. API anahtarları, Firebase sırları, backend erişim tokenları ve sertifikalar CI/CD aracılığıyla doğrudan derleme ortamına yüklenir. Bir saldırgan kod deposuna erişirse, orada sır bulamaz çünkü bunlar CI sisteminin korumalı depolarında saklanır ve yalnızca ikili dosya derleme aşamasında iletilir.

Mobil Geliştirmede Ortam Değişkenlerine Neden İhtiyaç Duyulur

Mobil projeler en az üç ortama sahiptir: geliştirme, staging ve üretim. Her ortam kendi yapılandırma kümesini gerektirir: sunucu URL'si, paket adı, imzalama şeması ve push bildirimi sertifikaları. Ortam değişkenleri olmadan, geliştirici her derlemeden önce yapılandırmayı manuel olarak değiştirmek zorunda kalır ve bu da hatalara yol açar: test derlemesinde unutulan bir üretim anahtarı, gerçek kullanıcılara bildirim gönderilmesine veya ücretli API tüketimine neden olabilir.

Ortam Ayrımı

Ortam değişkenleri, kodu değiştirmeden backend değiştirmeye olanak tanır: sadece API_BASE_URL değişkenindeki değeri değiştirin. Özellik bayrakları FEATURE_CHAT_ENABLED=true gibi değişkenler aracılığıyla yönetilir ve üretimi etkilemeden staging'de yeni özelliklerin etkinleştirilmesine olanak tanır. Her ortamın derleme zamanında yüklenen kendi .env dosyası vardır.

dart
class AppConfig {
  static final String apiBaseUrl =
    const String.fromEnvironment('API_BASE_URL',
      defaultValue: 'http://localhost:8080');
}

Anahtar Güvenliği

Sabit kodlanmış anahtarlar, mobil uygulamalarda yaygın bir güvenlik açığıdır. Bir saldırgan jadx veya Hopper gibi araçlar kullanarak APK veya IPA'yı derlemesinden çıkarır ve ikili dosyadan sırları çıkarır. Karartma bile dize değişmezlerini korumaz — derleme çözme işleminden sonra kodda kolayca bulunurlar. Ortam değişkenleri, CI/CD aracılığıyla derleme zamanında anahtarları ileterek bu sorunu çözer ve burada günlüklerde maskelenirler.

kotlin
object Config {
    val apiKey: String =
        System.getenv("API_KEY") ?: throw
            IllegalStateException("API_KEY not set")
}

CI/CD Entegrasyonu

Ortam değişkenleri derleme boru hatlarıyla entegre olur: GitHub Actions, GitLab CI, Bitrise ve CircleCI, günlüklerde görüntülenmeyen gizli değişkenleri destekler. Derleme zamanında, CI dal veya etikete bağlı olarak uygun değerleri değiştirir: develop dalı için staging kullanılır, v* etiketi için üretim kullanılır. Bu, süreci otomatikleştirir ve insan faktörünü ortadan kaldırarak her derlemenin doğru yapılandırma kümesini almasını sağlar.

.env Dosyaları ve Yönetim Kütüphaneleri

.env dosyası, ortam değişkenlerini KEY=VALUE formatında saklamanın standart bir yoludur. Depoya dahil edilmez; bunun yerine, tüm değişkenlerin bir şablonu ve boş değerlerle .env.example eklenir. Her geliştirici, ekip üyelerinin yapılandırmalarını etkilemeden kendi .env dosyasını yerel ayarlarla oluşturur. Farklı ortamlar için ayrı dosyalar kullanılır: .env.dev, .env.stage, .env.prod.

bash
# .env.example — geliştiriciler için şablon
API_BASE_URL=http://localhost:8080
FEATURE_CHAT_ENABLED=true
SENTRY_DSN=

Mobil projeler için .env dosyalarıyla çalışmak üzere özel kütüphaneler bulunmaktadır:

  • flutter_dotenv (Flutter) — dotenv.load() aracılığıyla çalışma zamanında .env'den değişkenleri yükler
  • BuildConfig (Android) — build.gradle değerlerinden tür belirtilmiş alanlar oluşturur
  • xcconfig (iOS) — yapılandırma dosyalarını farklı Xcode derleme şemalarına bağlar
  • react-native-config (React Native) — .env dosyaları aracılığıyla değişken yönetimi

CI/CD'de dal ayarları, farklı .env dosyalarının değiştirilmesine olanak tanır: test sunucuları için .env.dev, ön sürüm için .env.stage ve uygulama mağazalarında yayınlama için .env.prod. Sır içeren dosyalar güvenli bir depodan (Vault, AWS Secrets Manager) yüklenir ve depoda saklanmaz. Bu, sürüm kontrol sistemi tehlikeye girse bile sırların korunmasını sağlar.

iOS Projelerinde Ortam Değişkenleri

iOS ekosistemi, derleme seviyesinde değişkenleri yönetmek için xcconfig dosyaları kullanır. Bunlar Xcode şemalarına eklenir ve Debug ile Release yapılandırmaları için değerlerin geçersiz kılınmasına olanak tanır. xcconfig dosyaları kalıtımı destekler: ortak ayarlarla bir temel dosya ve her ortam için belirli dosyalar oluşturulabilir.

xcconfig Dosyalarının Yapılandırması

xcconfig dosyaları değişkenleri KEY = VALUE formatında saklar ve Configuration ayarları aracılığıyla Xcode'da bir derleme şemasına eklenir. xcconfig'ten değişkenler $(DEĞİŞKEN_ADI) sözdizimi aracılığıyla Info.plist'te kullanılabilir ve farklı şemalar için farklı paket tanımlayıcıları ve uygulama adlarına olanak tanır. Hızlı ortam tanımlaması için uygulama adına Dev veya Staging soneki eklenir.

bash
# Config/Dev.xcconfig — geliştirme yapılandırması
API_BASE_URL = http://localhost:3000
BUNDLE_ID_SUFFIX = .dev
APP_DISPLAY_NAME = MyApp Dev

Değişkenleri Okumak için Swift Kodu

iOS'te çalışma zamanında değişkenlere erişim için Configuration.swift dosyası kullanılır ve Bundle.main.object(forInfoDictionaryKey:) aracılığıyla Info.plist'ten değerleri okur. Bu yaklaşım, değişkenlerin derleme zamanında tanımlanmasını ve başlatmadan hemen sonra uygulama tarafından kullanılabilir olmasını garanti eder. Değerler modül başlatma sırasında bir kez okunur ve uygulama yaşam döngüsü boyunca hızlı erişim için önbelleğe alınır.

swift
enum AppEnvironment {
    static var apiBaseURL: URL {
        guard let urlString = Bundle.main
            .object(forInfoDictionaryKey: "API_BASE_URL"),
              let url = URL(string: urlString as! String)
        else { fatalError("API_BASE_URL is not configured") }
        return url
    }

    static var isChatEnabled: Bool {
        Bundle.main.object(
            forInfoDictionaryKey: "FEATURE_CHAT_ENABLED"
        ) as? Bool ?? false
    }
}

Android Projelerinde Ortam Değişkenleri

Android, ortam değişkenlerini BuildConfig aracılığıyla destekler — alanları modülün build.gradle dosyasında tanımlanan otomatik olarak oluşturulan bir sınıf. BuildConfig, her flavor ve derleme türü için ayrı ayrı derleme zamanında oluşturulur. Bu, kodda koşullu işleçler kullanmadan hata ayıklama ve sürüm için farklı değerlere sahip olmayı sağlar, performansı ve güvenliği artırır.

BuildConfig Alanlarının Yapılandırması

BuildConfig alanları, defaultConfig veya belirli buildTypes'da buildConfigField aracılığıyla ayarlanır. Her ortam için ayrı bir buildType veya productFlavor oluşturulur. Bu, katı yapılandırma izolasyonu sağlar: hata ayıklama yerel sunucu kullanır, sürüm üretim kullanır. BuildConfig alanları statik olarak tür belirtilmiştir, bu da kodda bunlara erişirken hataları ortadan kaldırır.

groovy
// build.gradle (Module: app)
android {
    defaultConfig {
        buildConfigField "String", "API_BASE_URL",
            "\"http://localhost:8080\""
    }
    buildTypes {
        debug {
            buildConfigField "String", "API_BASE_URL",
                "\"http://dev.api.itsectr.com\""
        }
        release {
            buildConfigField "String", "API_BASE_URL",
                "\"https://api.itsectr.com\""
        }
    }
}

Ortak Değerler için gradle.properties

Proje kökündeki gradle.properties dosyası, global Gradle değişkenlerini saklar. Bunlar $variableName sözdizimi aracılığıyla tüm modüllerde kullanılabilir ve bağımlılık sürümlerini, derleme bayraklarını ve API anahtarlarını belirtmek için kullanılır. BuildConfig'un aksine, gradle.properties yalnızca Gradle yapılandırma aşamasında çalışır, uygulama çalışma zamanında değil. Bu nedenle, gradle.properties'te belirtilen şifreler ve API anahtarları derlenmiş kodu çözülmüş kodda görünmez, çünkü bunlar yalnızca derleme zamanında BuildConfig oluşturmak için kullanılır.

groovy
# gradle.properties
SENTRY_DSN=https://key@sentry.io/project
MAPS_API_KEY=AIzaSy...

Android projelerinde sırların güvenli aktarımı için, local.properties (VCS dışında) kullanılması veya System.getenv() aracılığıyla build.gradle'da CI/CD değişkenlerinden değerlerin yüklenmesi önerilir. Bu, anahtarların depoya sızmamasını sağlar. Google Play Console'da yayınlarken, tüm hata ayıklama anahtarlarının ilgili BuildConfig değerlerine sahip farklı buildTypes veya productFlavors aracılığıyla üretim sürümleriyle değiştirildiğinden emin olun.

Sıkça Sorulan Sorular

Flutter'da ortam değişkenleri kullanılabilir mi?

Evet, Flutter, çalışma zamanı erişimi için flutter_dotenv paketi veya platform değişkenleri için yerel kanallar aracılığıyla ortam değişkenlerini destekler. Dart ayrıca --dart-define aracılığıyla derleme zamanında değerleri iletmek için String.fromEnvironment yapıcısını sunar ve bu Flutter projeleri için tercih edilen yöntemdir.

BuildConfig ve gradle.properties arasındaki fark nedir?

BuildConfig, her buildType ve flavor için derleme zamanında oluşturulan tür belirtilmiş alanlara sahip bir Java sınıfıdır. gradle.properties, derleme yapılandırma aşamasında tüm Gradle modülleri tarafından erişilebilen anahtar-değer çiftlerine sahip bir metin dosyasıdır. BuildConfig uygulama çalışma zamanında çalışır, gradle.properties — yalnızca Gradle betiklerinde.

.env dosyasının depoya sızması nasıl önlenir?

Deponuzun .gitignore dosyasına .env ekleyin. Depoya yalnızca boş değerler ve her değişkenin açıklamasıyla .env.example ekleyin. CI/CD için, GitHub Actions, GitLab CI veya Bitrise ayarlarında günlüklerde maskelenen ve derleme tamamlandıktan sonra okunamayan şifrelenmiş sırlar kullanın.

CI/CD aracılığıyla ortam değişkenleri nasıl iletilir?

Çoğu CI sistemi gizli ortam değişkenlerini destekler. GitHub Actions'ta bunlar Secrets, GitLab CI'da — CI/CD Değişkenleri, Bitrise'te — Secrets'tır. Derleme zamanında, process.env veya System.getenv() aracılığıyla derleme betiğine iletilirler. Gizli değişkenler derleme günlüklerinde görüntülenmez ve depo çatallarında kullanılamaz.

Ortam değişkenleri aracılığıyla özellik bayrakları nedir?

Özellik bayrakları, kodu yeniden derlemeden işlevselliğin etkinleştirilmesini veya devre dışı bırakılmasını kontrol eden boolean değişkenlerdir. Örnek: FEATURE_NEW_PAYMENT=true, test için staging'de yeni bir ödeme sistemini etkinleştirir. Üretimde, backend tamamen dağıtılana kadar aynı bayrak false olarak ayarlanır. Bu, değişikliklerin aşamalı olarak güvenli bir şekilde dağıtılmasına ve sorun olması durumunda geri alınmasına olanak tanır.

Özet

  • Ortam değişkenleri, farklı geliştirme ortamları için yapılandırmayı kaynak kodundan ayırır
  • .env dosyaları .env.example şablonuyla — ortam ayrımı olan ekiplerde değişken yönetimi standardı
  • iOS xcconfig, kalıtım desteği ve Info.plist entegrasyonu ile yapılandırma dosyalarını Xcode şemalarına bağlar
  • Android BuildConfig, her buildType için ayrı ayrı build.gradle'dan tür belirtilmiş alanlar oluşturur
  • CI/CD sırları, depoda saklamadan derleme zamanında hassas verileri iletir
  • Özellik bayrakları değişkenler aracılığıyla yeniden derleme olmadan belirli bir ortamda işlevselliği etkinleştirmeye olanak tanır
  • Güvenlik: anahtarlar CI'da şifrelenir ve uygulamanın derlemesi çözülebilir ikili dosyasına sızmaz

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

Ayrıca okuyun