Konfigurationshantering i mobil utveckling: vad det är, vilka alternativ och hur man ställer in

Författare: IT Sectr Publicerad: 2026-05-30 Lästid: 8 min

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

  • Konfigurationshantering i mobilappar bygger på Build Variant (Android), Scheme (iOS) och .env (plattformsoberoende) — 47% av produktionsincidenterna är relaterade till felaktiga inställningar.
  • iOS använder Scheme + .xcconfig. Scheme hanterar byggning, testning och arkivering. .xcconfig flyttar bygginställningar till filer.
  • Plattformsoberoende verktyg — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (miljövariabler) — centraliserar konfiguration.
  • Villkorlig kompilering — inkludera/exkludera kod vid kompilering. #if DEBUG, BuildConfig.DEBUG — för felsökning utan att ändra releasebeteendet.
  • API-nycklar och hemligheter får inte lagras i kod. Använd .env, Build Config eller en proxyserver. Avkompilering av .apk/.ipa är trivial.

Konfigurationshantering i Android: Build Variant och build.gradle

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 Variant vs Product Flavor

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.

groovy
// 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 och Gradle KTS

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: Scheme och .xcconfig

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-filer

.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 vs Build Configuration

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.

Konfigurationshantering i Flutter och React Native: pubspec.yaml, Podfile, .env

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 och Miljövariabler

.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 och pubspec.yaml

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
KonfigurationsenhetBuild VariantSchemeFlavor (--flavor)
Byggfilbuild.gradle.xcconfigpubspec.yaml
Villkorlig kodBuildConfigActive Compilation Conditionsdart-define
HemligheterBuildConfig/NDK.xcconfig.env/dart-define
BeroendehanterareGradle (Maven)SPM/CocoaPodspub (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 i konfigurationshantering

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.

Villkorlig kompilering i Swift

#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.

Villkorlig kompilering i Kotlin

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) { ... }.

Villkorlig kompilering i Flutter

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

Hur skiljer sig Build Variant från Product Flavor i Android?

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.

Vad är .xcconfig och varför behövs det i iOS?

.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.

Hur lagrar man API-nycklar säkert i en mobilapp?

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.

Vad är villkorlig kompilering och när använder man det?

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.

Behövs Podfile i ett projekt utan CocoaPods?

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

  • Konfigurationshantering i mobilappar är grunden för stabil CI/CD. Android använder Build Variant, iOS använder Scheme, Flutter använder dart-define.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig genereras för varje variant.
  • iOS: Scheme + .xcconfig hanterar konfiguration. Info.plist — appmetadat
  • Flutter: dart-define för byggvariabler. pubspec.yaml för beroenden.
  • Villkorlig kompilering (#if DEBUG, BuildConfig.DEBUG) — del av konfigurationshantering, standardsätt att ta bort felsökningskod i release.
  • .env — säker lagring av hemligheter utanför databasen. Commita inte .env till Git.
  • Konfigurationshantering i mobilprojekt behöver uppmärksamhet från första commit — korrekt byggkonfiguration sparar timmar av felsökning vid varje release.

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.

Diskutera projektet