Konfigurationshantering är en av de mest underskattade aspekterna av mobil utveckling. Enligt CloudBees (2025) är 47% av incidenterna i produktion relaterade till felaktiga byggkonfigurationer. Korrekt inställning av Build Variant, Scheme och .env-filer är nyckeln till stabil CI/CD och förutsägbara releaser.
Viktiga punkter
Build Variant — en kombination av Build Type (debug/release/staging) och Product Flavor (free/paid, demo/full). Gradle skapar automatiskt en variant för varje kombination: freeDebug, freeRelease, paidDebug, paidRelease. Varje variant kan ha sin egen kod, resurser och beroenden — detta är grunden för konfigurationshantering i mobilappar på Android.
Build Type — bygginställningar: om felsökning är aktiverad, signering, ProGuard-optimering. debug innehåller som standard debuggable=true, release — minifyEnabled=true.
Product Flavor — appvariant: gratis (free), betald (paid), demo. Flavourer kan ha olika applicationId, resurser, SDK-beroenden.
// build.gradle — konfiguration av produktflavourer i 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')
}
}
}
Exemplet skapar två flavourer: free och paid. Ett separat applicationId är inställt för free — detta gör det möjligt att installera båda apparna på en enhet. BuildConfig genereras för varje variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Använd BuildConfig i kod för villkorlig logik.
settings.gradle — rot-Gradle-filen som beskriver projektets moduler.
Gradle KTS — ett alternativ till Groovy som använder Kotlin DSL. KTS ger autokomplettering i Android Studio och typkontroll. Rekommenderas för nya projekt.
Konfigurationshantering i iOS bygger på Scheme — en Xcode-konfiguration som definierar vad och hur man bygger: Build Configuration (Debug/Release), tester, analys, arkivering. Scheman kan dupliceras för olika miljöer (Development, Staging, Production). Scheman lagras i .xcscheme-filer i mappen xcshareddata.
.xcconfig — en Xcode-konfigurationsfil som lagrar bygginställningar i textform. För konfigurationshantering av mobilappar använder iOS .xcconfig: versionshantering i Git, återanvändning mellan projekt, färre manuella inställningar. I .xcconfig ställs SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY in.
Info.plist — appens metadatafil. Den lagrar version, identifierare, behörigheter. Info.plist kan vara olika för varje Scheme — via Info.plist File i Build Settings.
AndroidManifest.xml — motsvarigheten för Android: lagrar behörigheter, komponenter, metadata.
Scheme — byggscenariot (vad man ska göra). Build Configuration — uppsättningen inställningar (hur man gör det). Ett Scheme använder en Build Configuration (Debug eller Release). För CI/CD: konfigurera Archive-åtgärden till Release och Test-åtgärden till Debug i samma Scheme.
pubspec.yaml — konfigurationsfilen för Flutter-projektet. Innehåller beroenden, versioner, resurser. Stöder miljövariabler via --dart-define.
Podfile — CocoaPods-beroendehanteraren för iOS. Definierar biblioteksversioner och plattform.
.env — en fil med miljövariabler för alla plattformar. Flutter och React Native använder ett annorlunda tillvägagångssätt för konfigurationshantering: dart-define i Flutter, react-native-config i React Native. Konfigurationshantering i plattformsoberoende projekt involverar olika verktyg beroende på stack.
.env — en textfil med nyckel=värdepar. Commitas inte till Git (lägg till i .gitignore). För Flutter — flutter_dotenv, för iOS — Config.xcconfig med #include, för Android — BuildConfig. env-variabler: API_URL, SENTRY_DSN, APP_SECRET. I konfigurationshantering inom mobil utveckling är .env de facto-standarden för att lagra hemligheter utanför databasen.
Podfile beskriver CocoaPods-beroenden och plattform (platform :ios, '15.0'). pubspec.yaml för Flutter — dependencies och dev_dependencies. Båda stöder villkorliga beroenden: pod 'Analytics', :configs => ['Release'] eller flutter pub add --flavor free. På IT Sectr använder vi .env + BuildConfig för hemligheter och Podfile för inbyggda beroenden i mobilprojekt.
| Parameter | Android | iOS | Flutter |
|---|---|---|---|
| Konfigurationsenhet | Build Variant | Scheme | Flavor (--flavor) |
| Byggfil | build.gradle | .xcconfig | pubspec.yaml |
| Villkorlig kod | BuildConfig | Active Compilation Conditions | dart-define |
| Hemligheter | BuildConfig/NDK | .xcconfig | .env/dart-define |
| Beroendehanterare | Gradle (Maven) | SPM/CocoaPods | pub (dart) |
Tabellen visar de viktigaste skillnaderna i konfigurationshantering mellan mobila plattformar. Android erbjuder mer flexibilitet genom Build Variant. iOS är enklare men mindre flexibelt. Flutter centraliserar konfiguration i dart-define, men inbyggda beroenden kräver fortfarande konfiguration av Podfile/build.gradle.
Villkorlig kompilering — inkludera eller exkludera kod vid kompilering beroende på flaggor. Detta är en del av konfigurationshantering: det gör det möjligt att bädda in felsökningsverktyg (loggning, inspektör) i debug-byggen och ta bort dem från release. Implementeringen skiljer sig mellan plattformar.
#if DEBUG — Swift-preprocessordirektiv. Koden inuti blocket kompileras endast i Debug-konfiguration. Andra flaggor: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions i Build Settings — lägg till anpassade flaggor via -D FLAG_NAME. Konfigurationshantering av byggen genom kompileringsvillkor är standardpraxis i iOS.
BuildConfig.DEBUG — booleskt fält, true i debug-bygge. BuildConfig genereras automatiskt av Gradle. För anpassade flaggor, använd buildConfigField i build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". I kod: if (BuildConfig.REPORT_CRASHES) { ... }.
dart-define — Flutter-kompileringsflaggor: flutter run --dart-define=ENV=staging. I kod: const env = String.fromEnvironment('ENV', defaultValue: 'production'). För villkorliga mobilappsbyggen, använd build_runner-pluginet med kodgenerering.
Vanliga frågor
Build Variant = Build Type (debug/release) + Product Flavor. Flavor är appvarianten (betald/gratis, klient/server), Build Type är bygginställningarna (felsökning/optimering). Kombinationen flavour + type bildar en variant: till exempel paidDebug.
.xcconfig är en Xcode-konfigurationsfil som lagrar bygginställningar i textform. Den gör det möjligt att flytta inställningar från Xcode-projektet till Git-vänliga filer, vilket förenklar CI/CD och teamarbete i mobilprojekt.
API-nycklar får inte lagras i kod — alla .apk eller .ipa kan avkompileras. Använd .env-filer, en backend-proxy eller obfuskering via Build Config. IT Sectr rekommenderar att lagra hemligheter på servern och utfärda dem till klienten efter autentisering.
Villkorlig kompilering är att inkludera/exkludera kod vid kompilering beroende på flaggor. I Swift — #if DEBUG, i Kotlin — BuildConfig.DEBUG. Används för att aktivera loggning i debug och inaktivera i release. Detta är ett nyckelelement i konfigurationshantering inom mobil utveckling.
Podfile används endast vid arbete med CocoaPods. Det behövs inte för SPM eller Carthage. Lämna inte Podfile i ett projekt om du har övergett CocoaPods — det förvirrar teamet och CI/CD-systemet.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.