Mobil geliştirmede .env Dosyası: nedir, amacı ve çalışma prensibi

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

.env dosyası, ortam değişkenlerini basit bir anahtar-değer biçiminde depolar ve yapılandırmayı uygulamanın kaynak kodundan ayırır. The Twelve-Factor App (2011)'e göre, yapılandırma koddan kesin olarak ayrılmalıdır ve .env dosyaları bu yaklaşımın standardı haline gelmiştir. .env File, projeyi yeniden derlemeden API anahtarları, sunucu URL'leri ve derleme bayraklarının farklı değerlerini yerleştirmeye olanak tanır.

Ana Noktalar

  • .env File — proje kök dizininde bulunan, KEY=VALUE biçiminde ortam değişkenlerine sahip bir metin dosyası.
  • Twelve-Factor App, yapılandırmanın kod yerine ortam değişkenlerinde saklanmasını önerir.
  • Güvenlik — .env asla Git'e girmemelidir; dosya .gitignore'a eklenir.
  • Yükleyici Kütüphaneler — Android'de gradle-dotenv, iOS'te Config.xcconfig, Flutter'da flutter_dotenv kullanılır.
  • Çalışma Zamanı — .env'deki değerler derleme aşamasında değiştirilir, uygulama çalışması sırasında değil.

.env Dosyası Nedir ve Neden Gereklidir

.env File, ortam değişkenlerini basit bir metin biçimi olan KEY=VALUE'da depolayan bir yapılandırma dosyasıdır. Her satır bir değişken içerir: anahtar adı ve değeri, eşittir işaretiyle ayrılmış.

.env dosyaları modern geliştirmenin temel bir sorununu çözer: farklı ortamlar (yerel, test, üretim) tamamen farklı ayarlar gerektirir. Yerel bir makinede API sunucu URL'si http://localhost:8080 iken, üretim sunucusunda https://api.production.com'dur. Bu değerler doğrudan uygulama koduna sabit kodlanmışsa, farklı bir ortam için her derleme kaynak kodunun değiştirilmesini gerektirir.

Yapılandırmayı ana uygulama kodunun dışında saklama uygulaması, The Twelve-Factor App manifestosunda (2011) standartlaştırılmış ve ortam değişkenlerini bir uygulamayı yapılandırmanın tek doğru yolu olarak belirlemiştir. JetBrains Developer Ecosystem anketine (2024) göre, mobil geliştiricilerin %67'sinden fazlası projelerinde .env dosyaları kullanmaktadır.

Mobil geliştirme için .env ek bir avantaj sağlar: değerler derleme aşamasında Gradle (Android) veya xcconfig (iOS) aracılığıyla değiştirilir, böylece kaynak kodunu değiştirmeden geliştirme, hazırlık ve üretim için ayrı derlemeler oluşturulabilir.

.env özellikle ekip halinde çalışırken kullanışlıdır: her geliştirici kendi ortamına göre ayarlarla (yerel DB yolu, hata ayıklama API anahtarları) kendi yerel .env'sini oluştururken, ortak ayarlar depoda .env.example olarak sabitlenir. Bu, git pull'dan sonra bir geliştiricinin derlemesinin bilmediği bir ortam değişkeninin eksikliği nedeniyle bozulduğu durumu ortadan kaldırır. Yeni bir ekip üyesi .env.example'ı .env'ye kopyalar ve kendi yerel değerlerini doldurur.

.env Dosyasının Sözdizimi ve Yapısı

.env biçimi son derece basittir: her satır KEY=VALUE biçiminde bir değişkendir. Eşittir işareti etrafındaki boşluklar genellikle yok sayılır, ancak çoğu kütüphanede değerin bir parçası olarak kabul edilir, bu nedenle bunlardan kaçınmak daha iyidir.

Temel Yazım Kuralları

Yorumlar # karakteriyle başlar — ondan sonraki tüm satır yok sayılır. Boş satırlar da atlanır. Değer boşluk içeriyorsa, çift veya tek tırnak içine alınır.

env
# Temel ortam ayarları
APP_NAME=MyMobileApp
APP_ENV=development

# API yapılandırması
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000

# Hassas veriler
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key

Değer Türleri ve Kaçış

.env'deki tüm değişkenler dizelerdir, ancak yükleyici kütüphaneler bunları gerekli türe dönüştürebilir. Özel karakterleri kaçış için ters eğik çizgi ve tırnak işaretleri kullanılır. Bir değer metnin parçası olarak # karakterini içeriyorsa, \# olarak kaçış yapılmalıdır.

  • Dizeler — tırnak işareti olmadan veya tırnak içinde: KEY=value veya KEY="value with spaces"
  • Sayılar — tırnak işareti olmadan yazılır: PORT=8080
  • Boolean değerler — true/false dizeleri: DEBUG=true
  • Çok satırlı — satır sonunda ters eğik çizgi: KEY=line1\
    line2
  • Değiştirme — bazı ayrıştırıcılarda: DB_URL=${DB_HOST}:${DB_PORT}

.env yüklenirken, kütüphaneler değişken enterpolasyonu gerçekleştirebilir — bir anahtarın değerini diğerinin içine yerleştirebilir. Örneğin, DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db değişkeni aynı dosyadaki DB_USER ve DB_PASS'ı genişletecektir.

.env Dosyasının Mobil Projelere Entegrasyonu

.env'yi bağlama yöntemi platforma bağlıdır. Android Gradle eklentilerini, iOS — xcconfig yapılandırma dosyalarını ve Flutter gibi çapraz platform çözümleri — özelleşmiş kütüphaneleri kullanır.

Android ve Gradle: BuildConfig Kurulumu

Android'de .env, gradle-dotenv eklentisi aracılığıyla yüklenir. Eklenti, proje kökünden .env'yi okur ve değerleri BuildConfig'e ekler, ardından oluşturulan alanlar aracılığıyla Kotlin veya Java kodunda kullanılabilir hale gelir.

kotlin
// build.gradle.kts (uygulama seviyesi)
plugins {
    id("co.uzzu.dotenv") version "4.0.0"
}

android {
    buildFeatures {
        buildConfig = true
    }
}

kotlin {
    // Kodda erişim: BuildConfig.API_BASE_URL
    buildConfigField("String", "API_BASE_URL",
        "\"" + dotenv.get("API_BASE_URL") + "\"")
}

iOS ve Xcode: Config Bağlantısı

iOS'te ortam değişkenleri genellikle xcconfig dosyaları aracılığıyla yapılandırılır. Swift'te .env'yi yüklemek için DotEnv kütüphanesi veya özel anahtarlarla yerleşik Info.plist mekanizması kullanılır.

swift
// Swift projesinde .env yükleniyor
import DotEnv

struct AppConfig {
    static func load() {
        let env = DotEnv(Bundle.main)
        env.load()

        let apiURL = ProcessInfo.processInfo
            .environment["API_BASE_URL"] ??
            "https://default.api.com"
    }
}

Flutter ve Dart: flutter_dotenv Kütüphanesi

Flutter için flutter_dotenv paketi bulunur ve uygulama başlatılırken .env'den değişkenleri yükler. .env dosyası proje köküne yerleştirilir ve değişkenler dotenv sınıfı aracılığıyla kullanılabilir hale gelir.

dart
// pubspec.yaml
dependencies:
  flutter_dotenv: ^5.1

// main.dart — başlangıçta yükleniyor
import 'package:flutter_dotenv/flutter_dotenv.dart';

void main() async {
  await dotenv.load(fileName: '.env');
  var apiUrl = dotenv.get('API_BASE_URL');
  runApp(MyApp(baseUrl: apiUrl));
}

Her üç yaklaşım da ortak bir prensibi paylaşır: .env derleme aşamasında veya uygulama başlatıldığında yüklenir, değerler önbelleğe alınır ve oluşturulan sabitler aracılığıyla kodda kullanılır. Bu, hassas verilerin depoya ulaşmasını engeller.

React Native için react-native-config paketi kullanılır ve derleme aşamasında proje kökündeki tek bir .env dosyasından Android için BuildConfig sınıfını ve iOS için Info.plist'te sabitleri otomatik olarak oluşturur. Bu, Expo veya bare workflow kullanan startuplar için özellikle uygundur: kök seviyesinde tek bir .env, tüm platformların yapılandırmaları çoğaltmadan aynı ortam değişkenlerini alması için yeterlidir.

.env Dosyası Güvenliği ve En İyi Uygulamalar

Tüm avantajlara rağmen, .env üretim ortamında sırları depolamak için tam teşekküllü bir çözüm değildir. Temel bir koruma seviyesi sağlar, ancak yanlış kullanıldığında gizli verilerin sızmasına yol açabilir.

.gitignore ile Koruma

En önemli kural — .env asla deponun sürüm kontrol sistemine girmemelidir. Dosya oluşturulduktan hemen sonra .gitignore'a eklenir ve depoya yalnızca boş veya sahte değerlere sahip örnek dosya .env.example eklenir.

env
# .env.example — depoya commit edildi
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — örnekte bile belirtmeyin!
# JWT_SECRET — örnekte bile belirtmeyin!
env
# .gitignore
# Dotenv dosyaları
.env
.env*.local

Üretim Ortamı için Alternatifler

Üretim projeleri için profesyonel sır yönetimi çözümlerinin kullanılması önerilir. Üretimde .env yalnızca dosya sunucunun document-root'u dışında bulunuyorsa ve katı erişim izinlerine sahipse kabul edilebilir.

  • AWS Secrets Manager — anahtar döndürme ve erişim denetimi ile bulut sır deposu
  • Google Secret Manager — API anahtarlarını ve şifreleri depolamak için Google Cloud hizmeti
  • HashiCorp Vault — dinamik sırlar ve sunucu tarafı şifreleme ile araç
  • Firebase Remote Config — mobil uygulamalar için A/B testi ile bulut yapılandırması
  • GitLab CI/CD Variables — derleme hatları için yerleşik sır deposu

Snyk State of Open Source Security (2024)'e göre, depolar aracılığıyla .env dosyası sızıntıları, ankete katılan şirketler arasındaki tüm API anahtarı ifşa olaylarının %12'sinden fazlasının nedeni olmuştur. Özel bir sır yöneticisi kullanmak bu riski sıfıra indirir.

Ön-commit kancaları uygulanarak ek koruma sağlanır; husky ve lint-staged gibi araçlar kullanılarak geliştiricinin yanlışlıkla .env'yi bir commit'e ekleyip eklemediği kontrol edilir. git-secrets (AWS) ve talisman gibi araçlar her commit'i API anahtarı, token ve şifre kalıpları için tarar, tespit edilirse commit'i engeller. CI hatları için, geliştirici hata yapsa bile .env dosyasının depoya girmesine izin vermeyecek otomatik bir tarayıcı olan detect-secrets eklenmesi önerilir.

Sıkça Sorulan Sorular

.env Git'e commit edilmeli mi?

Hayır, .env Git'e commit edilmemelidir. Dosya hassas veriler içerir ve .gitignore'a eklenmelidir. Bunun yerine, depoya gerekli tüm değişkenlerin şablonuyla .env.example konulur.

.env ve .env.example arasındaki fark nedir?

.env, üretim değerlerine sahip gerçek dosyadır ve asla commit edilmez. .env.example dosyası aynı anahtarları içerir ancak boş veya sahte değerlerle — yeni geliştiriciler için örnek olarak depoya commit edilir.

.env üretimde kullanılabilir mi?

Evet, ancak ek koruma olmadan önerilmez. .env üretim sunucusunda kullanılıyorsa, dosya web sunucusunun document-root'u dışında 600 (yalnızca sahip) erişim izinleriyle bulunmalıdır. Kritik projeler için sır yöneticileri tercih edilir.

Android projesinde .env nasıl yüklenir?

gradle-dotenv eklentisi (co.uzzu.dotenv) aracılığıyla. Eklenti, proje kökünden .env'yi okur ve değerleri BuildConfig'e aktarır. Değişkenler derleme aşamasında kodda BuildConfig.VARIABLE_NAME olarak kullanılabilir.

.env değişken enterpolasyonunu destekliyor mu?

Evet, birçok ayrıştırıcı ${VAR_NAME} biçiminde enterpolasyonu destekler. Örneğin, URL=${HOST}:${PORT} aynı dosyadaki HOST ve PORT değerlerini değiştirecektir. Ancak bu yetenek belirli yükleyici kütüphanesine bağlıdır.

Özet

  • .env File — ortam değişkenlerini depolamak için basit bir metin biçimi, yapılandırmayı uygulama kodundan ayırır.
  • Twelve-Factor App, modern uygulama geliştirmenin standardı olarak yapılandırmanın ortam değişkenlerinde saklanmasını temellendirmiştir.
  • Entegrasyon mobil projelerde gradle-dotenv eklentisi (Android), xcconfig (iOS) veya flutter_dotenv (Flutter) aracılığıyla yapılır.
  • Güvenlik, .env'yi .gitignore'a ekleyerek ve depoda .env.example kullanarak sağlanır.
  • Üretim profesyonel çözümler gerektirir — AWS Secrets Manager, Google Secret Manager veya HashiCorp Vault.
  • Değer değiştirme, kaynak kodunu değiştirmeden derleme aşamasında Android'de BuildConfig veya iOS'te Info.plist aracılığıyla gerçekleşir.
  • Sızıntı riski — API anahtarı olaylarının %12'si depolara .env eklenmesiyle ilişkilidir (Snyk, 2024), bu nedenle CI'da otomatik kontrol zorunludur.

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