Configuratiebeheer is een van de meest onderschatte aspecten van mobiele ontwikkeling. Volgens CloudBees (2025) is 47% van de incidenten in productie gerelateerd aan onjuiste buildconfiguraties. Het juist instellen van Build Variant, Scheme en .env-bestanden is de sleutel tot stabiele CI/CD en voorspelbare releases.
Belangrijkste punten
Build Variant — een combinatie van Build Type (debug/release/staging) en Product Flavor (free/paid, demo/full). Gradle maakt automatisch een variant voor elke combinatie: freeDebug, freeRelease, paidDebug, paidRelease. Elke variant kan zijn eigen code, resources en afhankelijkheden hebben — dit is de basis van configuratiebeheer in mobiele apps op Android.
Build Type — buildinstellingen: of debuggen is ingeschakeld, ondertekenen, ProGuard-optimalisatie. debug bevat standaard debuggable=true, release — minifyEnabled=true.
Product Flavor — app-variant: gratis (free), betaald (paid), demo. Flavors kunnen verschillende applicationId, resources en SDK-afhankelijkheden hebben.
// build.gradle — configuratie van product flavors in 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')
}
}
}
Het voorbeeld maakt twee flavors: free en paid. Voor free is een aparte applicationId ingesteld — dit maakt het mogelijk beide apps op één apparaat te installeren. BuildConfig wordt gegenereerd voor elke variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Gebruik BuildConfig in code voor conditionele logica.
settings.gradle — het root Gradle-bestand dat de projectmodules beschrijft.
Gradle KTS — een alternatief voor Groovy met Kotlin DSL. KTS biedt automatisch aanvullen in Android Studio en typecontrole. Aanbevolen voor nieuwe projecten.
Configuratiebeheer in iOS is gebaseerd op Scheme — een Xcode-configuratie die bepaalt wat en hoe te bouwen: Build Configuration (Debug/Release), tests, analyse, archivering. Schemes kunnen worden gedupliceerd voor verschillende omgevingen (Development, Staging, Production). Schemes worden opgeslagen in .xcscheme-bestanden in de map xcshareddata.
.xcconfig — een Xcode-configuratiebestand dat buildinstellingen in tekstvorm opslaat. Voor configuratiebeheer van mobiele apps gebruikt iOS .xcconfig: versiebeheer in Git, herbruikbaarheid tussen projecten, minder handmatige instellingen. In .xcconfig worden SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY ingesteld.
Info.plist — het metadatabestand van de app. Het slaat de versie, identifier en rechten op. Info.plist kan voor elk Scheme verschillend zijn — via Info.plist File in Build Settings.
AndroidManifest.xml — het Android-equivalent: slaat rechten, componenten en metadata op.
Scheme — het bouwscenario (wat te doen). Build Configuration — de set instellingen (hoe te doen). Eén Scheme gebruikt één Build Configuration (Debug of Release). Voor CI/CD: configureer de Archive-actie op Release en de Test-actie op Debug in hetzelfde Scheme.
pubspec.yaml — het configuratiebestand van het Flutter-project. Bevat afhankelijkheden, versies, resources. Ondersteunt omgevingsvariabelen via --dart-define.
Podfile — de CocoaPods-afhankelijkheidsbeheerder voor iOS. Bepaalt bibliotheekversies en platform.
.env — een bestand met omgevingsvariabelen voor alle platforms. Flutter en React Native gebruiken een andere benadering voor configuratiebeheer: dart-define in Flutter, react-native-config in React Native. Configuratiebeheer in cross-platform projecten omvat verschillende tools afhankelijk van de stack.
.env — een tekstbestand met sleutel=waarde paren. Niet committen naar Git (toevoegen aan .gitignore). Voor Flutter — flutter_dotenv, voor iOS — Config.xcconfig met #include, voor Android — BuildConfig. env-variabelen: API_URL, SENTRY_DSN, APP_SECRET. In configuratiebeheer bij mobiele ontwikkeling is .env de facto standaard voor het opslaan van geheimen buiten de repository.
Podfile beschrijft CocoaPods-afhankelijkheden en platform (platform :ios, '15.0'). pubspec.yaml voor Flutter — dependencies en dev_dependencies. Beide ondersteunen conditionele afhankelijkheden: pod 'Analytics', :configs => ['Release'] of flutter pub add --flavor free. Bij IT Sectr gebruiken we .env + BuildConfig voor geheimen en Podfile voor native afhankelijkheden in mobiele projecten.
| Parameter | Android | iOS | Flutter |
|---|---|---|---|
| Configuratie-eenheid | Build Variant | Scheme | Flavor (--flavor) |
| Buildbestand | build.gradle | .xcconfig | pubspec.yaml |
| Conditionele code | BuildConfig | Active Compilation Conditions | dart-define |
| Geheimen | BuildConfig/NDK | .xcconfig | .env/dart-define |
| Afhankelijkheidsbeheerder | Gradle (Maven) | SPM/CocoaPods | pub (dart) |
De tabel toont de belangrijkste verschillen in configuratiebeheer tussen mobiele platforms. Android biedt meer flexibiliteit via Build Variant. iOS is eenvoudiger maar minder flexibel. Flutter centraliseert configuratie in dart-define, maar native afhankelijkheden vereisen nog steeds configuratie van Podfile/build.gradle.
Conditionele compilatie — code opnemen of uitsluiten tijdens compilatie afhankelijk van vlaggen. Dit is onderdeel van configuratiebeheer: het maakt het mogelijk om debugtools (loggen, inspector) in debug-builds in te bedden en ze uit release te verwijderen. Implementatie verschilt per platform.
#if DEBUG — Swift-preprocessordirective. Code binnen het blok wordt alleen gecompileerd in Debug-configuratie. Andere vlaggen: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions in Build Settings — voeg aangepaste vlaggen toe via -D FLAG_NAME. Configuratiebeheer van builds via compilatievoorwaarden is standaardpraktijk in iOS.
BuildConfig.DEBUG — booleaans veld, true in debug-build. BuildConfig wordt automatisch gegenereerd door Gradle. Gebruik voor aangepaste vlaggen buildConfigField in build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". In code: if (BuildConfig.REPORT_CRASHES) { ... }.
dart-define — Flutter-compilatievlaggen: flutter run --dart-define=ENV=staging. In code: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Gebruik voor conditionele mobiele app-builds de build_runner-plugin met codegeneratie.
Veelgestelde vragen
Build Variant = Build Type (debug/release) + Product Flavor. Flavor is de app-variant (betaald/gratis, client/server), Build Type zijn de buildinstellingen (debug/optimalisatie). De combinatie flavour + type vormt een variant: bijvoorbeeld paidDebug.
.xcconfig is een Xcode-configuratiebestand dat buildinstellingen in tekstvorm opslaat. Het maakt het mogelijk om instellingen van het Xcode-project naar Git-vriendelijke bestanden te verplaatsen, waardoor CI/CD en teamwerk in mobiele projecten worden vereenvoudigd.
API-sleutels mogen niet in code worden opgeslagen — elke .apk of .ipa kan worden gedecompileerd. Gebruik .env-bestanden, een backend-proxy of obfuscatie via Build Config. IT Sectr raadt aan om geheimen op de server op te slaan en ze aan de client te verstrekken na authenticatie.
Conditionele compilatie is het opnemen/uitsluiten van code tijdens compilatie afhankelijk van vlaggen. In Swift — #if DEBUG, in Kotlin — BuildConfig.DEBUG. Wordt gebruikt om loggen in debug in te schakelen en uit te schakelen in release. Dit is een sleutelelement van configuratiebeheer in mobiele ontwikkeling.
Podfile wordt alleen gebruikt bij het werken met CocoaPods. Het is niet nodig voor SPM of Carthage. Laat Podfile niet in een project achter als je CocoaPods hebt verlaten — het verwart het team en het CI/CD-systeem.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.