Upravljanje konfiguracijama u mobilnom razvoju: šta je to, koje opcije postoje i kako podesiti

Аутор: IT Sectr Објављено: 2026-05-30 Време читања: 8 мин

Upravljanje konfiguracijama je jedan od najpotcenjenijih aspekata mobilnog razvoja. Prema CloudBees (2025), 47% incidenata u produkciji povezano je sa pogrešnim konfiguracijama izgradnje. Pravilno podešavanje Build Variant, Scheme i .env fajlova je ključ stabilnog CI/CD i predvidivog izdanja.

Glavno

  • Upravljanje konfiguracijama u mobilnim aplikacijama se zasniva na Build Variant (Android), Scheme (iOS) i .env (višeplatformski) — 47% produkcijskih incidenata povezano je sa pogrešnim podešavanjima.
  • iOS koristi Scheme + .xcconfig. Scheme upravlja izgradnjom, testiranjem i arhiviranjem. .xcconfig prenosi podešavanja izgradnje u fajlove.
  • Višeplatformski alati — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (promenljive okruženja) — centralizuju konfiguraciju.
  • Uslovno kompajliranje — uključivanje/isključivanje koda u fazi kompajliranja. #if DEBUG, BuildConfig.DEBUG — za otklanjanje grešaka bez menjanja ponašanja izdanja.
  • API ključevi i tajne ne mogu se čuvati u kodu. Koristite .env, Build Config ili proxy server. Dekompilacija .apk/.ipa je trivijalna.

Upravljanje konfiguracijama u Android: Build Variant i build.gradle

Build Variant — kombinacija Build Type (debug/release/staging) i Product Flavor (free/paid, demo/full). Gradle automatski kreira variant za svaku kombinaciju: freeDebug, freeRelease, paidDebug, paidRelease. Svaki variant može imati svoj kod, resurse i zavisnosti — ovo je osnova upravljanja konfiguracijama u mobilnim aplikacijama na Android-u.

Build Variant vs Product Flavor

Build Type — podešavanja izgradnje: da li je otklanjanje grešaka uključeno, potpisivanje, ProGuard optimizacija. debug podrazumevano sadrži debuggable=true, release — minifyEnabled=true.

Product Flavor — varijanta aplikacije: besplatna (free), plaćena (paid), demo. Flavour-i mogu imati različite applicationId, resurse, SDK zavisnosti.

groovy
// build.gradle — podešavanje product flavour-a u Android
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')
        }
    }
}

U primeru su kreirana dva flavour-a: free i paid. Za free je postavljen poseban applicationId — ovo omogućava instaliranje obe aplikacije na jednom uređaju. BuildConfig se generiše za svaki variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Koristite BuildConfig u kodu za uslovnu logiku.

settings.gradle i Gradle KTS

settings.gradle — koreni Gradle fajl koji opisuje module projekta.

Gradle KTS — alternativa Groovy-u koristeći Kotlin DSL. KTS daje autodopunu u Android Studio i proveru tipova. Preporučuje se za nove projekte.

Upravljanje konfiguracijama u iOS: Scheme i .xcconfig

Upravljanje konfiguracijama u iOS se zasniva na Scheme — Xcode konfiguraciji koja određuje šta i kako se gradi: Build Configuration (Debug/Release), testovi, analiza, arhiviranje. Scheme se može duplirati za različita okruženja (Development, Staging, Production). Scheme se čuva u .xcscheme fajlu u folderu xcshareddata.

.xcconfig fajlovi

.xcconfig — Xcode konfiguracioni fajl koji čuva build settings u tekstualnom obliku. Za upravljanje konfiguracijama u mobilnoj aplikaciji iOS koristi .xcconfig: verzionisanje u Git-u, ponovna upotreba između projekata, manje ručnih podešavanja. U .xcconfig se postavljaju SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY.

Info.plist — fajl metapodataka aplikacije. U njemu se čuvaju verzija, identifikator, dozvole. Info.plist može biti različit za svaki Scheme — preko Info.plist File u Build Settings.

AndroidManifest.xml — analog za Android: čuva dozvole, komponente, meta-podatke.

Scheme vs Build Configuration

Scheme — scenario izgradnje (šta raditi). Build Configuration — skup podešavanja (kako raditi). Jedan Scheme koristi jednu Build Configuration (Debug ili Release). Za CI/CD: podesite Archive akciju na Release i Test akciju na Debug u jednom Scheme.

Upravljanje konfiguracijama u Flutter i React Native: pubspec.yaml, Podfile, .env

pubspec.yaml — konfiguracioni fajl Flutter projekta. Sadrži zavisnosti, verzije, resurse. Podržava promenljive okruženja putem --dart-define.

Podfile — menadžer zavisnosti CocoaPods za iOS. Određuje verzije biblioteka i platformu.

.env — fajl sa promenljivama okruženja za sve platforme. Flutter i React Native koriste drugačiji pristup upravljanju konfiguracijama: dart-define u Flutter-u, react-native-config u React Native-u. Upravljanjem konfiguracijama u višeplatformskim projektima bave se različiti alati u zavisnosti od steka.

.env i Environment Variables

.env — tekstualni fajl sa parovima ključ=vrednost. Ne komituje se u Git (dodajte u .gitignore). Za Flutter — flutter_dotenv, za iOS — Config.xcconfig sa uključivanjem putem #include, za Android — BuildConfig. env promenljive: API_URL, SENTRY_DSN, APP_SECRET. U upravljanju konfiguracijama u mobilnom razvoju .env je de facto standard za čuvanje tajni van repozitorijuma.

Podfile i pubspec.yaml

Podfile opisuje CocoaPods zavisnosti i platformu (platform :ios, '15.0'). pubspec.yaml za Flutter — dependencies i dev_dependencies. Oba podržavaju uslovne zavisnosti: pod 'Analytics', :configs => ['Release'] ili flutter pub add --flavor free. U IT Sectr koristimo .env + BuildConfig za tajne i Podfile za native zavisnosti u mobilnim projektima.

Parametar Android iOS Flutter
Jedinica konfiguracijeBuild VariantSchemeFlavor (--flavor)
Fajl izgradnjebuild.gradle.xcconfigpubspec.yaml
Uslovni kodBuildConfigActive Compilation Conditionsdart-define
TajneBuildConfig/NDK.xcconfig.env/dart-define
Menadžer zavisnostiGradle (Maven)SPM/CocoaPodspub (dart)

Tabela prikazuje ključne razlike u upravljanju konfiguracijama između mobilnih platformi. Android daje više fleksibilnosti kroz Build Variant. iOS — jednostavniji, ali manje fleksibilan. Flutter centralizuje konfiguraciju u dart-define, ali za native zavisnosti ipak treba podešavati Podfile/build.gradle.

Uslovno kompajliranje u upravljanju konfiguracijama

Uslovno kompajliranje — uključivanje ili isključivanje koda u fazi kompajliranja u zavisnosti od zastavica. Ovo je deo upravljanja konfiguracijama: omogućava ugrađivanje alata za otklanjanje grešaka (logovanje, inspektor) u debug izgradnju i njihovo izbacivanje iz release. Implementacija se razlikuje na različitim platformama.

Uslovno kompajliranje u Swift

#if DEBUG — direktiva pretprocesora Swift. Kod unutar bloka se kompajlira samo u Debug konfiguraciji. Druge zastavice: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions u Build Settings — dodajte svoje zastavice putem -D FLAG_NAME. Upravljanje konfiguracijama izgradnje kroz uslove kompajliranja je standardna praksa u iOS.

Uslovno kompajliranje u Kotlin

BuildConfig.DEBUG — bulovo polje, true u debug izgradnji. BuildConfig generiše Gradle automatski. Za prilagođene zastavice koristite buildConfigField u build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". U kodu: if (BuildConfig.REPORT_CRASHES) { ... }.

Uslovno kompajliranje u Flutter

dart-define — zastavice kompajliranja Flutter: flutter run --dart-define=ENV=staging. U kodu: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Za uslovnu izgradnju mobilnih aplikacija koristite plugin build_runner sa generisanjem koda.

Često postavljana pitanja

Po čemu se Build Variant razlikuje od Product Flavor u Android?

Build Variant = Build Type (debug/release) + Product Flavor. Flavor je varijanta aplikacije (plaćena/besplatna, klijentska/serverska), Build Type su podešavanja izgradnje (otklanjanje grešaka/optimizacija). Kombinacija flavour + type formira variant: na primer, paidDebug.

Šta je .xcconfig i zašto je potreban u iOS?

.xcconfig je konfiguracioni fajl Xcode koji čuva build settings u tekstualnom obliku. Omogućava izmeštanje podešavanja iz Xcode projekta u Git-friendly fajlove, pojednostavljujući CI/CD i timski rad u mobilnim projektima.

Kako bezbedno čuvati API ključeve u mobilnoj aplikaciji?

API ključevi ne mogu se čuvati u kodu — bilo koji .apk ili .ipa može se dekompajlirati. Koristite .env fajlove, backend proxy ili obfuskaciju kroz Build Config. IT Sectr preporučuje čuvanje tajni na serveru i izdavanje klijentu nakon autorizacije.

Šta je uslovno kompajliranje i kada ga koristiti?

Uslovno kompajliranje je uključivanje/isključivanje koda u fazi kompajliranja u zavisnosti od zastavica. U Swift — #if DEBUG, u Kotlin — BuildConfig.DEBUG. Koristi se za uključivanje logovanja u debug i isključivanje u release. Ovo je ključni element upravljanja konfiguracijama u mobilnom razvoju.

Da li je Podfile potreban u projektu bez CocoaPods?

Podfile se koristi samo pri radu sa CocoaPods. Za SPM ili Carthage nije potreban. Ne ostavljajte Podfile u projektu ako ste odustali od CocoaPods — to zbunjuje tim i CI/CD sistem.

Zaključci

  • Upravljanje konfiguracijama u mobilnim aplikacijama je osnova stabilnog CI/CD. Android koristi Build Variant, iOS — Scheme, Flutter — dart-define.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig se generiše za svaki variant.
  • iOS: Scheme + .xcconfig upravljaju konfiguracijom. Info.plist — metapodaci aplikacije.
  • Flutter: dart-define za promenljive izgradnje. pubspec.yaml za zavisnosti.
  • Uslovno kompajliranje (#if DEBUG, BuildConfig.DEBUG) — deo upravljanja konfiguracijama, standardni način isključivanja debug koda u release.
  • .env — bezbedno čuvanje tajni van repozitorijuma. Ne komitujte .env u Git.
  • Upravljanju konfiguracijama u mobilnim projektima treba posvetiti pažnju od prvog komita — pravilno podešavanje izgradnje štedi sate otklanjanja grešaka na svakom izdanju.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту