Gestionarea configurațiilor în dezvoltarea mobilă: ce este, ce opțiuni există și cum se configurează

Autor: IT Sectr Publicat: 2026-05-30 Timp de citire: 8 min

Gestionarea configurațiilor este unul dintre cele mai subestimate aspecte ale dezvoltării mobile. Potrivit CloudBees (2025), 47% din incidentele din producție sunt legate de configurații de build incorecte. Configurarea corectă a Build Variant, Scheme și fișierelor .env este cheia pentru un CI/CD stabil și lansări previzibile.

Puncte cheie

  • Gestionarea configurațiilor în aplicațiile mobile se bazează pe Build Variant (Android), Scheme (iOS) și .env (multi-platformă) — 47% din incidentele de producție sunt legate de setări incorecte.
  • iOS utilizează Scheme + .xcconfig. Scheme gestionează compilarea, testarea și arhivarea. .xcconfig mută setările de build în fișiere.
  • Instrumentele multi-platformă — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (variabile de mediu) — centralizează configurația.
  • Compilare condițională — includerea/excluderea codului la compilare. #if DEBUG, BuildConfig.DEBUG — pentru depanare fără a modifica comportamentul lansării.
  • Cheile API și secretele nu pot fi stocate în cod. Utilizați .env, Build Config sau un server proxy. Decompilarea .apk/.ipa este trivială.

Gestionarea configurațiilor în Android: Build Variant și build.gradle

Build Variant — o combinație de Build Type (debug/release/staging) și Product Flavor (free/paid, demo/full). Gradle creează automat un variant pentru fiecare combinație: freeDebug, freeRelease, paidDebug, paidRelease. Fiecare variant poate avea propriul cod, resurse și dependențe — aceasta este baza gestionării configurațiilor în aplicațiile mobile pe Android.

Build Variant vs Product Flavor

Build Type — setări de build: dacă depanarea este activată, semnarea, optimizarea ProGuard. debug implicit conține debuggable=true, release — minifyEnabled=true.

Product Flavor — varianta aplicației: gratuită (free), plătită (paid), demo. Flavoururile pot avea diferite applicationId, resurse, dependențe SDK.

groovy
// build.gradle — configurarea flavoururilor de produs în 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')
        }
    }
}

Exemplul creează două flavoururi: free și paid. Un applicationId separat este setat pentru free — aceasta permite instalarea ambelor aplicații pe un singur dispozitiv. BuildConfig este generat pentru fiecare variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Utilizați BuildConfig în cod pentru logică condițională.

settings.gradle și Gradle KTS

settings.gradle — fișierul rădăcină Gradle care descrie modulele proiectului.

Gradle KTS — o alternativă la Groovy folosind Kotlin DSL. KTS oferă autocompletare în Android Studio și verificare de tipuri. Recomandat pentru proiecte noi.

Gestionarea configurațiilor în iOS: Scheme și .xcconfig

Gestionarea configurațiilor în iOS se bazează pe Scheme — o configurație Xcode care definește ce și cum se compilează: Build Configuration (Debug/Release), teste, analiză, arhivare. Scheme-urile pot fi duplicate pentru diferite medii (Development, Staging, Production). Scheme-urile sunt stocate în fișiere .xcscheme în dosarul xcshareddata.

Fișiere .xcconfig

.xcconfig — un fișier de configurare Xcode care stochează setările de build în formă text. Pentru gestionarea configurațiilor aplicațiilor mobile, iOS utilizează .xcconfig: versionare în Git, reutilizare între proiecte, mai puține setări manuale. În .xcconfig se setează SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY.

Info.plist — fișierul de metadate al aplicației. Stochează versiunea, identificatorul, permisiunile. Info.plist poate fi diferit pentru fiecare Scheme — prin Info.plist File în Build Settings.

AndroidManifest.xml — echivalentul pentru Android: stochează permisiuni, componente, metadate.

Scheme vs Build Configuration

Scheme — scenariul de build (ce să faci). Build Configuration — setul de setări (cum să faci). Un Scheme utilizează o Build Configuration (Debug sau Release). Pentru CI/CD: configurați acțiunea Archive pe Release și acțiunea Test pe Debug în același Scheme.

Gestionarea configurațiilor în Flutter și React Native: pubspec.yaml, Podfile, .env

pubspec.yaml — fișierul de configurare a proiectului Flutter. Conține dependențe, versiuni, resurse. Suportă variabile de mediu prin --dart-define.

Podfile — managerul de dependențe CocoaPods pentru iOS. Definește versiunile bibliotecilor și platforma.

.env — un fișier cu variabile de mediu pentru toate platformele. Flutter și React Native utilizează o abordare diferită pentru gestionarea configurațiilor: dart-define în Flutter, react-native-config în React Native. Gestionarea configurațiilor în proiecte multi-platformă implică diferite instrumente în funcție de stack.

.env și Variabile de Mediu

.env — un fișier text cu perechi cheie=valoare. Nu se comitează în Git (adăugați la .gitignore). Pentru Flutter — flutter_dotenv, pentru iOS — Config.xcconfig cu #include, pentru Android — BuildConfig. Variabile env: API_URL, SENTRY_DSN, APP_SECRET. În gestionarea configurațiilor în dezvoltarea mobilă, .env este standardul de facto pentru stocarea secretelor în afara depozitului.

Podfile și pubspec.yaml

Podfile descrie dependențele CocoaPods și platforma (platform :ios, '15.0'). pubspec.yaml pentru Flutter — dependencies și dev_dependencies. Ambele suportă dependențe condiționale: pod 'Analytics', :configs => ['Release'] sau flutter pub add --flavor free. La IT Sectr, folosim .env + BuildConfig pentru secrete și Podfile pentru dependențe native în proiecte mobile.

Parametru Android iOS Flutter
Unitate de configurareBuild VariantSchemeFlavor (--flavor)
Fișier de buildbuild.gradle.xcconfigpubspec.yaml
Cod condiționalBuildConfigActive Compilation Conditionsdart-define
SecreteBuildConfig/NDK.xcconfig.env/dart-define
Manager de dependențeGradle (Maven)SPM/CocoaPodspub (dart)

Tabelul arată diferențele cheie în gestionarea configurațiilor între platformele mobile. Android oferă mai multă flexibilitate prin Build Variant. iOS este mai simplu, dar mai puțin flexibil. Flutter centralizează configurația în dart-define, dar dependențele native necesită în continuare configurarea Podfile/build.gradle.

Compilare condițională în gestionarea configurațiilor

Compilare condițională — includerea sau excluderea codului la compilare în funcție de flaguri. Aceasta face parte din gestionarea configurațiilor: permite încorporarea instrumentelor de depanare (logare, inspector) în buildurile debug și eliminarea lor din release. Implementarea diferă între platforme.

Compilare condițională în Swift

#if DEBUG — directivă de preprocesor Swift. Codul din interiorul blocului se compilează doar în configurația Debug. Alte flaguri: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions în Build Settings — adăugați flaguri personalizate prin -D FLAG_NAME. Gestionarea configurațiilor de build prin condiții de compilare este o practică standard în iOS.

Compilare condițională în Kotlin

BuildConfig.DEBUG — câmp boolean, true în buildul debug. BuildConfig este generat automat de Gradle. Pentru flaguri personalizate utilizați buildConfigField în build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". În cod: if (BuildConfig.REPORT_CRASHES) { ... }.

Compilare condițională în Flutter

dart-define — flaguri de compilare Flutter: flutter run --dart-define=ENV=staging. În cod: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Pentru builduri condiționale de aplicații mobile, utilizați pluginul build_runner cu generare de cod.

Întrebări frecvente

Prin ce diferă Build Variant de Product Flavor în Android?

Build Variant = Build Type (debug/release) + Product Flavor. Flavor este varianta aplicației (plătită/gratuită, client/server), Build Type sunt setările de build (depanare/optimizare). Combinația flavour + type formează un variant: de exemplu, paidDebug.

Ce este .xcconfig și de ce este necesar în iOS?

.xcconfig este un fișier de configurare Xcode care stochează setările de build în formă text. Permite mutarea setărilor din proiectul Xcode în fișiere compatibile Git, simplificând CI/CD și munca în echipă în proiecte mobile.

Cum se stochează în siguranță cheile API într-o aplicație mobilă?

Cheile API nu pot fi stocate în cod — orice .apk sau .ipa poate fi decompilat. Utilizați fișiere .env, un proxy backend sau ofuscare prin Build Config. IT Sectr recomandă stocarea secretelor pe server și eliberarea lor clientului după autentificare.

Ce este compilarea condițională și când se utilizează?

Compilarea condițională constă în includerea/excluderea codului la compilare în funcție de flaguri. În Swift — #if DEBUG, în Kotlin — BuildConfig.DEBUG. Se utilizează pentru a activa logarea în debug și a o dezactiva în release. Acesta este un element cheie al gestionării configurațiilor în dezvoltarea mobilă.

Este necesar Podfile într-un proiect fără CocoaPods?

Podfile este utilizat doar când se lucrează cu CocoaPods. Nu este necesar pentru SPM sau Carthage. Nu lăsați Podfile într-un proiect dacă ați renunțat la CocoaPods — confundă echipa și sistemul CI/CD.

Rezumat

  • Gestionarea configurațiilor în aplicațiile mobile este fundația unui CI/CD stabil. Android utilizează Build Variant, iOS utilizează Scheme, Flutter utilizează dart-define.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig este generat pentru fiecare variant.
  • iOS: Scheme + .xcconfig gestionează configurația. Info.plist — metadatele aplicației.
  • Flutter: dart-define pentru variabile de build. pubspec.yaml pentru dependențe.
  • Compilare condițională (#if DEBUG, BuildConfig.DEBUG) — parte a gestionării configurațiilor, metodă standard de eliminare a codului de depanare în release.
  • .env — stocare sigură a secretelor în afara depozitului. Nu comitați .env în Git.
  • Gestionarea configurațiilor în proiecte mobile necesită atenție de la primul commit — configurarea corectă a buildului economisește ore de depanare la fiecare lansare.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul