Atrof-muhit o‘zgaruvchilari: bu nima, ishlatish va mobil loyihalarda sozlash

Muallif: IT Sectr Nashr etilgan: 2026-05-31 O'qish vaqti: 8 daq

Atrof-muhit o‘zgaruvchilari — bu dasturni ishga tushirishda uning xatti-harakatini kodni o‘zgartirmasdan sozlash uchun uzatiladigan dinamik qiymatlardir. Ular ishlab chiqish, test va ishlab chiqarish muhitlari konfiguratsiyalarini ajratish imkonini beradi. Twelve-Factor App, 2025 ma’lumotlariga ko‘ra, konfiguratsiya atrof-muhit o‘zgaruvchilarida saqlanishi kerak, koddagidek emas. Atrof-muhit o‘zgaruvchilari API kalitlari, backend URL va funksionallik bayroqlarini xavfsiz boshqarishni ta’minlaydi.

Asosiy fikrlar

  • Atrof-muhit o‘zgaruvchilari dastur konfiguratsiyasini turli ishga tushirish muhitlari uchun manba kodidan ajratadi
  • .env fayllari o‘zgaruvchilarni KEY=VALUE formatida saqlaydi va .gitignore orqali repozitariydan chiqariladi
  • iOS kompilyatsiya bosqichida o‘zgaruvchilarni uzatish uchun xcconfig va Build Settings dan foydalanadi
  • Android konfiguratsiya maydonlarini yaratish uchun BuildConfig va gradle.properties dan foydalanadi
  • Xavfsizlik: kalitlar va tokenlar CI/CD orqali yuklanishi kerak, kodda yoki repozitariyda saqlanmasligi kerak

Atrof-muhit o‘zgaruvchilari nima

Atrof-muhit o‘zgaruvchilari — operatsion tizim API orqali dastur jarayoniga taqdim etiladigan kalit-qiymat juftligidir. Ular jarayon yaratilganda unga uzatiladi va faqat uning ishlash vaqti davomida mavjud bo‘ladi. Manba kodiga o‘rnatilgan konfiguratsiya parametrlaridan farqli o‘laroq, atrof-muhit o‘zgaruvchilari qiymatlarni o‘zgartirish uchun qayta kompilyatsiyani talab qilmaydi. Bu kod va konfiguratsiya o‘rtasida aniq ajratishni ta’minlaydigan Twelve-Factor App ning asosiy printsipidir.

Mobil ishlanmada atrof-muhit o‘zgaruvchilari turli muhitlar uchun konfiguratsiya muammosini hal qiladi: ishlab chiqaruvchi mahalliy serverdan, sinovchi staging-dan, foydalanuvchilar ishlab chiqarish muhitidan foydalanadi. Koddagi if-else shart operatorlari bilan uchta backend URL saqlash o‘rniga, ishlab chiqaruvchi qurish bosqichida bitta URL ni atrof-muhit o‘zgaruvchisi orqali uzatadi. Bu kodni soddalashtiradi va sinov muhitida tasodifan ishlab chiqarish serveridan foydalanish xavfini bartaraf etadi.

Asosiy afzallik xavfsizlikdir: maxfiy ma’lumotlar kod repozitariysiga tushmaydi. API kalitlari, Firebase sirlari, backend kirish tokenlari va sertifikatlar CI/CD orqali to‘g‘ridan-to‘g‘ri qurish muhitiga yuklanadi. Agar tajovuzkor kod repozitariysiga kirish imkoniyatiga ega bo‘lsa, u yerda sirlarni topmaydi, chunki ular CI tizimining himoyalangan omborlarida saqlanadi va faqat ikkilik faylni qurish bosqichida uzatiladi.

Nima uchun mobil ishlanmada atrof-muhit o‘zgaruvchilari kerak

Mobil loyihalar kamida uchta muhitga ega: development, staging va ishlab chiqarish. Har bir muhit o‘z konfiguratsiya to‘plamini talab qiladi: server URL, paket nomi, imzo sxemasi va push bildirishnomalari sertifikatlari. Atrof-muhit o‘zgaruvchilari bo‘lmasa, ishlab chiqaruvchi har bir qurishdan oldin konfiguratsiyani qo‘lda o‘zgartirishi kerak, bu esa xatolarga olib keladi: unutilgan ishlab chiqarish kaliti test qurilishida haqiqiy foydalanuvchilarga bildirishnomalar yuborilishiga yoki pulli API sarflanishiga sabab bo‘lishi mumkin.

Muhitlarni ajratish

Atrof-muhit o‘zgaruvchilari kodni o‘zgartirmasdan backendni o‘zgartirish imkonini beradi: API_BASE_URL o‘zgaruvchisidagi qiymatni almashtirish kifoya. Funksionallik bayroqlari (feature flags) FEATURE_CHAT_ENABLED=true tipidagi o‘zgaruvchilar orqali boshqariladi, bu esa ishlab chiqarish muhitiga ta’sir qilmasdan staging-da yangi imkoniyatlarni yoqish imkonini beradi. Har bir muhit uchun qurish bosqichida yuklanadigan o‘z .env fayli yaratiladi.

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

Kalitlar xavfsizligi

Qattiq kodlangan kalitlar mobil ilovalarning keng tarqalgan zaifligidir. Tajovuzkor jadx yoki Hopper kabi vositalar bilan APK yoki IPA ni dekompilyatsiya qiladi va ikkilik fayldan sirlarni chiqaradi. Hatto obfuskatsiya ham string literal himoya qilmaydi — ular dekompilyatsiyadan keyin koddan osonlikcha topiladi. Atrof-muhit o‘zgaruvchilari bu muammoni hal qiladi, kalitlarni CI/CD orqali qurish bosqichida uzatadi, bu erda ular jurnallarda maskalanadi.

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

CI/CD integratsiyasi

Atrof-muhit o‘zgaruvchilari qurish pipeline-lari bilan integratsiyalanadi: GitHub Actions, GitLab CI, Bitrise va CircleCI jurnallarda ko‘rsatilmaydigan maxfiy o‘zgaruvchilarni qo‘llab-quvvatlaydi. Qurish bosqichida CI filial yoki teg ga qarab tegishli qiymatlarni almashtiradi: develop filiali uchun staging, v* tegi uchun ishlab chiqarish ishlatiladi. Bu jarayonni avtomatlashtiradi va inson omilini bartaraf etadi, har bir qurishning to‘g‘ri konfiguratsiya to‘plamini olishini kafolatlaydi.

.env fayllari va boshqaruv kutubxonalari

.env fayli atrof-muhit o‘zgaruvchilarini KEY=VALUE formatida saqlashning standart usulidir. Repozitariyga kiritilmaydi, uning o‘rniga repozitariyga barcha o‘zgaruvchilarning shabloni va bo‘sh qiymatlari bilan .env.example qo‘shiladi. Har bir ishlab chiqaruvchi jamoa a’zolarining konfiguratsiyasiga ta’sir qilmasdan o‘z .env faylini yaratadi. Turli muhitlar uchun alohida fayllar ishlatiladi: .env.dev, .env.stage, .env.prod.

bash
# .env.example — ishlab chiquvchilar uchun shablon
API_BASE_URL=http://localhost:8080
FEATURE_CHAT_ENABLED=true
SENTRY_DSN=

Mobil loyihalar uchun .env fayllari bilan ishlash uchun ixtisoslashgan kutubxonalar mavjud:

  • flutter_dotenv (Flutter) — o‘zgaruvchilarni .env dan dotenv.load() orqali runtime da yuklaydi
  • BuildConfig (Android) — build.gradle qiymatlaridan tiplangan maydonlar yaratadi
  • xcconfig (iOS) — konfiguratsiya fayllarini turli Xcode qurish sxemalariga ulaydi
  • react-native-config (React Native) — .env fayllari orqali o‘zgaruvchi boshqaruvi

CI/CD da filial sozlamalari turli .env fayllarini almashtirish imkonini beradi: test serverlari uchun .env.dev, chiqarish oldi uchun .env.stage va ilova do‘konlarida nashr qilish uchun .env.prod. Sirlari bor fayllar xavfsiz ombordan (Vault, AWS Secrets Manager) yuklanadi va repozitariyda saqlanmaydi. Bu versiya nazorat tizimi buzilgan taqdirda ham sirlarning himoyalanganligini kafolatlaydi.

iOS loyihalarida atrof-muhit o‘zgaruvchilari

iOS ekotizimi qurish darajasida o‘zgaruvchilarni boshqarish uchun xcconfig fayllaridan foydalanadi. Ular Xcode sxemalariga ulanadi va Debug va Release konfiguratsiyalari uchun qiymatlarni bekor qilish imkonini beradi. xcconfig fayllari meros olishni qo‘llab-quvvatlaydi: umumiy sozlamalar bilan asosiy fayl va har bir muhit uchun maxsus fayllar yaratilishi mumkin.

xcconfig fayllarini sozlash

xcconfig fayllari o‘zgaruvchilarni KEY = VALUE formatida saqlaydi va Xcode da Configuration sozlamalari orqali qurish sxemasiga ulanadi. xcconfig dan o‘zgaruvchilar Info.plist da $(VARIABLE_NAME) sintaksisi orqali mavjud bo‘lib, bu turli sxemalar uchun turli paket identifikatorlari va ilova nomlaridan foydalanish imkonini beradi. Muhitni tez aniqlash uchun ilova nomiga Dev yoki Staging qo‘shimchasi qo‘shiladi.

bash
# Config/Dev.xcconfig — ishlab chiqish konfiguratsiyasi
API_BASE_URL = http://localhost:3000
BUNDLE_ID_SUFFIX = .dev
APP_DISPLAY_NAME = MyApp Dev

O‘zgaruvchilarni o‘qish uchun Swift kodi

iOS da o‘zgaruvchilarga runtime kirish uchun Bundle.main.object(forInfoDictionaryKey:) orqali Info.plist dan qiymatlarni o‘qiyadigan Configuration.swift fayli ishlatiladi. Bu yondashuv o‘zgaruvchilarning qurish bosqichida aniqlanishini va ilova ishga tushgandan so‘ng darhol mavjud bo‘lishini kafolatlaydi. Qiymatlar modul ishga tushirilganda bir marta o‘qiladi va ilova hayot davri davomida tez kirish uchun keshga olinadi.

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 loyihalarida atrof-muhit o‘zgaruvchilari

Android atrof-muhit o‘zgaruvchilarini BuildConfig — maydonlari modulning build.gradle faylida aniqlanadigan avtomatik yaratiladigan sinf orqali qo‘llab-quvvatlaydi. BuildConfig har bir flavor va qurish turi uchun alohida kompilyatsiya bosqichida yaratiladi. Bu koddagi shart operatorlaridan foydalanmasdan debug va release uchun turli qiymatlarga ega bo‘lish imkonini beradi, bu esa unumdorlik va xavfsizlikni oshiradi.

BuildConfig maydonlarini sozlash

BuildConfig maydonlari defaultConfig da yoki aniq buildTypes da buildConfigField orqali o‘rnatiladi. Har bir muhit uchun alohida buildType yoki productFlavor yaratiladi. Bu konfiguratsiyalarning qat’iy izolyatsiyasini ta’minlaydi: debug mahalliy serverdan, release ishlab chiqarishdan foydalanadi. BuildConfig maydonlari statik tiplangan bo‘lib, bu koddagi murojaatlarda xatolarni bartaraf etadi.

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\""
        }
    }
}

Umumiy qiymatlar uchun gradle.properties

Loyiha ildizidagi gradle.properties fayli global Gradle o‘zgaruvchilarini saqlaydi. Ular $variableName sintaksisi orqali barcha modullarda mavjud va bog‘liqlik versiyalari, qurish bayroqlari va API kalitlarini ko‘rsatish uchun ishlatiladi. BuildConfig dan farqli o‘laroq, gradle.properties faqat Gradle konfiguratsiyasi bosqichida ishlaydi, ilovaning runtime ida emas. Shuning uchun gradle.properties da ko‘rsatilgan parollar va API kalitlari dekompilyatsiya qilingan kodda ko‘rinmaydi, chunki ular faqat kompilyatsiya bosqichida BuildConfig yaratish uchun ishlatiladi.

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

Android loyihalarida sirlarni xavfsiz uzatish uchun local.properties (VCS dan chiqarilgan) dan foydalanish yoki System.getenv() orqali CI/CD o‘zgaruvchilaridan qiymatlarni build.gradle ga yuklash tavsiya etiladi. Bu kalitlarning repozitariyga tushmasligini kafolatlaydi. Google Play Console da nashr qilishda barcha debug kalitlarining tegishli BuildConfig qiymatlari bilan turli buildTypes yoki productFlavors orqali ishlab chiqarish versiyalari bilan almashtirilganligiga ishonch hosil qiling.

Tez-tez so‘raladigan savollar

Flutter da atrof-muhit o‘zgaruvchilaridan foydalanish mumkinmi?

Ha, Flutter atrof-muhit o‘zgaruvchilarini runtime kirish uchun flutter_dotenv paketi orqali yoki platforma o‘zgaruvchilari uchun native kanallar orqali qo‘llab-quvvatlaydi. Dart da shuningdek --dart-define orqali kompilyatsiya bosqichida qiymatlarni uzatish uchun String.fromEnvironment konstruktori mavjud, bu Flutter loyihalari uchun afzal qilingan usuldir.

BuildConfig va gradle.properties o‘rtasidagi farq nima?

BuildConfig — har bir buildType va flavor uchun kompilyatsiya bosqichida yaratiladigan tiplangan maydonlarga ega Java sinfidir. gradle.properties — barcha Gradle modullari uchun qurish konfiguratsiyasi bosqichida mavjud bo‘lgan kalit-qiymat juftliklaridan iborat matn faylidir. BuildConfig ilovaning runtime ida ishlaydi, gradle.properties esa faqat Gradle skriptlarida ishlaydi.

.env faylining repozitariyga sizib chiqishini qanday oldini olish mumkin?

Repozitariyingizning .gitignore fayliga .env qo‘shing. Repozitariyga faqat bo‘sh qiymatlar va har bir o‘zgaruvchining tavsifi bilan .env.example ni commit qiling. CI/CD uchun GitHub Actions, GitLab CI yoki Bitrise sozlamalarida jurnallarda maskalanadigan va qurish tugagandan so‘ng o‘qib bo‘lmaydigan shifrlangan sirlardan foydalaning.

Atrof-muhit o‘zgaruvchilarini CI/CD orqali qanday uzatish mumkin?

Ko‘pchilik CI tizimlari maxfiy atrof-muhit o‘zgaruvchilarini qo‘llab-quvvatlaydi. GitHub Actions da bular Secrets, GitLab CI da — CI/CD Variables, Bitrise da — Secrets deb ataladi. Qurish bosqichida ular process.env yoki System.getenv() orqali qurish skriptiga uzatiladi. Maxfiy o‘zgaruvchilar qurish jurnallarida ko‘rsatilmaydi va repozitariy fork larida mavjud emas.

Atrof-muhit o‘zgaruvchilari orqali feature flags nima?

Feature flags — kodni qayta kompilyatsiya qilmasdan funksionallikni yoqish yoki o‘chirishni boshqaradigan mantiqiy o‘zgaruvchilardir. Misol: FEATURE_NEW_PAYMENT=true test uchun staging da yangi to‘lov tizimini yoqadi. Ishlab chiqarishda xuddi shu bayroq backend to‘liq joylashtirilgunga qadar false ga o‘rnatilgan. Bu o‘zgarishlarni bosqichma-bosqich xavfsiz joriy qilish va muammolar bo‘lganda qaytarish imkonini beradi.

Xulosa

  • Atrof-muhit o‘zgaruvchilari konfiguratsiyani turli ishlab chiqish muhitlari uchun manba kodidan ajratadi
  • .env fayllari .env.example shabloni bilan muhitlarni farqlovchi jamoalarda o‘zgaruvchi boshqaruvi standartidir
  • iOS xcconfig meros va Info.plist integratsiyasini qo‘llab-quvvatlash bilan konfiguratsiya fayllarini Xcode sxemalariga ulaydi
  • Android BuildConfig har bir buildType uchun alohida build.gradle dan tiplangan maydonlar yaratadi
  • CI/CD sirlari maxfiy ma’lumotlarni repozitariyda saqlamasdan qurish bosqichida uzatadi
  • Feature flags o‘zgaruvchilar orqali qayta kompilyatsiya qilmasdan muayyan muhitda funksionallikni yoqish imkonini beradi
  • Xavfsizlik: kalitlar CI da shifrlanadi va ilovaning dekompilyatsiya qilinadigan ikkilik fayliga tushmaydi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing