Mobil ishlab chiqishda konfiguratsiyalarni boshqarish: bu nima, qanday variantlar bor va qanday sozlash

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

Konfiguratsiyalarni boshqarish mobil ishlab chiqishning eng kam baholanadigan jihatlaridan biridir. CloudBees (2025) ma'lumotlariga ko'ra, production hodisalarining 47% noto'g'ri build konfiguratsiyalari bilan bog'liq. Build Variant, Scheme va .env fayllarining to'g'ri sozlanishi barqaror CI/CD va bashorat qilinadigan relizlarning kalitidir.

Asosiy nuqtalar

  • Mobil ilovalarda konfiguratsiyalarni boshqarish Build Variant (Android), Scheme (iOS) va .env (platformalararo) ga asoslanadi — production hodisalarining 47% noto'g'ri sozlamalar bilan bog'liq.
  • iOS Scheme + .xcconfig dan foydalanadi. Scheme qurish, sinash va arxivlashni boshqaradi. .xcconfig build sozlamalarini fayllarga ko'chiradi.
  • Platformalararo vositalar — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (atrof-muhit o'zgaruvchilari) — konfiguratsiyani markazlashtiradi.
  • Shartli kompilyatsiya — kompilyatsiya vaqtida kodni kiritish/chiqarish. #if DEBUG, BuildConfig.DEBUG — reliz xatti-harakatini o'zgartirmasdan nosozliklarni tuzatish uchun.
  • API kalitlari va sirlarni kodda saqlash mumkin emas. .env, Build Config yoki proksi serverdan foydalaning. .apk/.ipa ni dekompilyatsiya qilish juda oson.

Androidda konfiguratsiyalarni boshqarish: Build Variant va build.gradle

Build Variant — Build Type (debug/release/staging) va Product Flavor (free/paid, demo/full) ning kombinatsiyasi. Gradle har bir kombinatsiya uchun avtomatik ravishda variant yaratadi: freeDebug, freeRelease, paidDebug, paidRelease. Har bir variant o'z kodi, resurslari va bog'liqliklariga ega bo'lishi mumkin — bu Androiddagi mobil ilovalarda konfiguratsiyalarni boshqarishning asosidir.

Build Variant vs Product Flavor

Build Type — build sozlamalari: nosozliklarni tuzatish yoqilganmi, imzolash, ProGuard optimizatsiyasi. debug sukut bo'yicha debuggable=true, release — minifyEnabled=true ni o'z ichiga oladi.

Product Flavor — ilova varianti: bepul (free), pullik (paid), demo. Flavourlar turli xil applicationId, resurslar, SDK bog'liqliklariga ega bo'lishi mumkin.

groovy
// build.gradle — Android mahsulot flavourlarini sozlash
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')
        }
    }
}

Misolda ikkita flavour yaratilgan: free va paid. Free uchun alohida applicationId o'rnatilgan — bu ikkala ilovani bitta qurilmaga o'rnatish imkonini beradi. BuildConfig har bir variant uchun yaratiladi: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Shartli mantiq uchun kodda BuildConfig dan foydalaning.

settings.gradle va Gradle KTS

settings.gradle — loyiha modullarini tavsiflovchi ildiz Gradle fayli.

Gradle KTS — Kotlin DSL yordamida Groovy ga alternativa. KTS Android Studioda avtoto'ldirish va turlarni tekshirishni ta'minlaydi. Yangi loyihalar uchun tavsiya etiladi.

iOSda konfiguratsiyalarni boshqarish: Scheme va .xcconfig

iOSda konfiguratsiyalarni boshqarish Scheme ga asoslanadi — nima va qanday qurilishini belgilaydigan Xcode konfiguratsiyasi: Build Configuration (Debug/Release), testlar, tahlil, arxivlash. Schemelar turli muhitlar (Development, Staging, Production) uchun takrorlanishi mumkin. Schemelar xcshareddata jildidagi .xcscheme fayllarida saqlanadi.

.xcconfig fayllari

.xcconfig — build sozlamalarini matn shaklida saqlaydigan Xcode konfiguratsiya fayli. Mobil ilova konfiguratsiyalarini boshqarish uchun iOS .xcconfig dan foydalanadi: Git da versiyalash, loyihalar o'rtasida qayta foydalanish, kamroq qo'lda sozlash. .xcconfig da SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY o'rnatiladi.

Info.plist — ilova metama'lumotlar fayli. Unda versiya, identifikator, ruxsatlar saqlanadi. Info.plist Build Settingsdagi Info.plist File orqali har bir Scheme uchun farqli bo'lishi mumkin.

AndroidManifest.xml — Android uchun analog: ruxsatlar, komponentlar, meta-ma'lumotlarni saqlaydi.

Scheme vs Build Configuration

Scheme — qurish stsenariysi (nima qilish kerak). Build Configuration — sozlamalar to'plami (qanday qilish kerak). Bitta Scheme bitta Build Configuration (Debug yoki Release) dan foydalanadi. CI/CD uchun: bitta Schemeda Archive harakatini Release ga va Test harakatini Debug ga sozlang.

Flutter va React Nativeda konfiguratsiyalarni boshqarish: pubspec.yaml, Podfile, .env

pubspec.yaml — Flutter loyiha konfiguratsiya fayli. Bog'liqliklar, versiyalar, resurslarni o'z ichiga oladi. --dart-define orqali atrof-muhit o'zgaruvchilarini qo'llab-quvvatlaydi.

Podfile — iOS uchun CocoaPods bog'liqlik menejeri. Kutubxona versiyalari va platformani belgilaydi.

.env — barcha platformalar uchun atrof-muhit o'zgaruvchilari bo'lgan fayl. Flutter va React Native konfiguratsiyalarni boshqarish uchun boshqa yondashuvdan foydalanadi: Flutterda dart-define, React Nativeda react-native-config. Platformalararo loyihalarda konfiguratsiyalarni boshqarish stack ga qarab turli vositalarni o'z ichiga oladi.

.env va Atrof-muhit o'zgaruvchilari

.env — kalit=qiymat juftliklaridan iborat matn fayli. Git ga commit qilinmaydi (.gitignore ga qo'shing). Flutter uchun — flutter_dotenv, iOS uchun — #include bilan Config.xcconfig, Android uchun — BuildConfig. env o'zgaruvchilari: API_URL, SENTRY_DSN, APP_SECRET. Mobil ishlab chiqish konfiguratsiyalarini boshqarishda .env repozitariydan tashqarida sirlarni saqlashning de-fakto standartidir.

Podfile va pubspec.yaml

Podfile CocoaPods bog'liqliklari va platformani tavsiflaydi (platform :ios, '15.0'). Flutter uchun pubspec.yaml — dependencies va dev_dependencies. Ikkalasi ham shartli bog'liqliklarni qo'llab-quvvatlaydi: pod 'Analytics', :configs => ['Release'] yoki flutter pub add --flavor free. IT Sectrda mobil loyihalarda sirlar uchun .env + BuildConfig va mahalliy bog'liqliklar uchun Podfile dan foydalanamiz.

Parametr Android iOS Flutter
Konfiguratsiya birligiBuild VariantSchemeFlavor (--flavor)
Build faylibuild.gradle.xcconfigpubspec.yaml
Shartli kodBuildConfigActive Compilation Conditionsdart-define
SirlarBuildConfig/NDK.xcconfig.env/dart-define
Bog'liqlik menejeriGradle (Maven)SPM/CocoaPodspub (dart)

Jadval mobil platformalar o'rtasida konfiguratsiyalarni boshqarishdagi asosiy farqlarni ko'rsatadi. Android Build Variant orqali ko'proq moslashuvchanlikni ta'minlaydi. iOS soddaroq, ammo kamroq moslashuvchan. Flutter konfiguratsiyani dart-define da markazlashtiradi, ammo mahalliy bog'liqliklar hali ham Podfile/build.gradle sozlashni talab qiladi.

Konfiguratsiyalarni boshqarishda shartli kompilyatsiya

Shartli kompilyatsiya — bayroqlarga qarab kompilyatsiya vaqtida kodni kiritish yoki chiqarish. Bu konfiguratsiyalarni boshqarishning bir qismidir: nosozliklarni tuzatish vositalarini (loglash, inspektor) debug build ga joylashtirish va release dan olib tashlash imkonini beradi. Amalga oshirish platformalarda farqlanadi.

Swift da shartli kompilyatsiya

#if DEBUG — Swift preprotsessor direktivasi. Blok ichidagi kod faqat Debug konfiguratsiyasida kompilyatsiya qilinadi. Boshqa bayroqlar: #if !RELEASE, #if targetEnvironment(simulator). Build Settingsdagi Active Compilation Conditions — -D FLAG_NAME orqali o'z bayroqlaringizni qo'shing. Kompilyatsiya shartlari orqali build konfiguratsiyalarini boshqarish iOSda standart amaliyotdir.

Kotlin da shartli kompilyatsiya

BuildConfig.DEBUG — mantiqiy maydon, debug build da true. BuildConfig Gradle tomonidan avtomatik yaratiladi. Maxsus bayroqlar uchun build.gradle da buildConfigField dan foydalaning: buildConfigField "boolean", "REPORT_CRASHES", "true". Kodda: if (BuildConfig.REPORT_CRASHES) { ... }.

Flutter da shartli kompilyatsiya

dart-define — Flutter kompilyatsiya bayroqlari: flutter run --dart-define=ENV=staging. Kodda: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Shartli mobil ilova buildlari uchun kod yaratish bilan build_runner plaginidan foydalaning.

Tez-tez so'raladigan savollar

Android da Build Variant Product Flavor dan qanday farq qiladi?

Build Variant = Build Type (debug/release) + Product Flavor. Flavor ilova varianti (pullik/bepul, mijoz/server), Build Type build sozlamalari (nosozliklarni tuzatish/optimizatsiya). flavour + type kombinatsiyasi variantni hosil qiladi: masalan, paidDebug.

.xcconfig nima va nima uchun iOS da kerak?

.xcconfig build sozlamalarini matn shaklida saqlaydigan Xcode konfiguratsiya faylidir. U Xcode loyihasidan sozlamalarni Git ga mos fayllarga ko'chirish imkonini beradi, mobil loyihalarda CI/CD va jamoa ishini soddalashtiradi.

Mobil ilovada API kalitlarini xavfsiz qanday saqlash mumkin?

API kalitlari kodda saqlanmasligi kerak — har qanday .apk yoki .ipa dekompilyatsiya qilinishi mumkin. .env fayllari, backend proksi yoki Build Config orqali obfuskatsiyadan foydalaning. IT Sectr sirlarni serverda saqlash va autentifikatsiyadan so'ng mijozga berishni tavsiya qiladi.

Shartli kompilyatsiya nima va uni qachon ishlatish kerak?

Shartli kompilyatsiya bayroqlarga qarab kompilyatsiya vaqtida kodni kiritish/chiqarishdir. Swift da — #if DEBUG, Kotlin da — BuildConfig.DEBUG. Debug da loglashni yoqish va release da o'chirish uchun ishlatiladi. Bu mobil ishlab chiqishda konfiguratsiyalarni boshqarishning asosiy elementidir.

CocoaPods siz loyihada Podfile kerakmi?

Podfile faqat CocoaPods bilan ishlashda ishlatiladi. SPM yoki Carthage uchun kerak emas. Agar CocoaPods dan voz kechgan bo'lsangiz, loyihada Podfile qoldirmang — bu jamoani va CI/CD tizimini chalkashtiradi.

Xulosa

  • Mobil ilovalarda konfiguratsiyalarni boshqarish barqaror CI/CD ning asosidir. Android Build Variant dan foydalanadi, iOS Scheme dan, Flutter dart-define dan foydalanadi.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig har bir variant uchun yaratiladi.
  • iOS: Scheme + .xcconfig konfiguratsiyani boshqaradi. Info.plist — ilova metama'lumotlari.
  • Flutter: build o'zgaruvchilari uchun dart-define. Bog'liqliklar uchun pubspec.yaml.
  • Shartli kompilyatsiya (#if DEBUG, BuildConfig.DEBUG) — konfiguratsiyalarni boshqarishning bir qismi, release da debug kodini o'chirishning standart usuli.
  • .env — repozitariydan tashqarida sirlarni xavfsiz saqlash. .env ni Git ga commit qilmang.
  • Mobil loyihalarda konfiguratsiyalarni boshqarishga birinchi commit dan e'tibor berish kerak — to'g'ri build sozlamasi har bir relizda soatlab nosozliklarni tuzatish vaqtini tejaydi.

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