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
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 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.
// 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 — 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 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 — 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 — 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.
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 — 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 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 konfiguracije | Build Variant | Scheme | Flavor (--flavor) |
| Fajl izgradnje | build.gradle | .xcconfig | pubspec.yaml |
| Uslovni kod | BuildConfig | Active Compilation Conditions | dart-define |
| Tajne | BuildConfig/NDK | .xcconfig | .env/dart-define |
| Menadžer zavisnosti | Gradle (Maven) | SPM/CocoaPods | pub (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 — 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.
#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.
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) { ... }.
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
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.
.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.
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.
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.
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
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.