Konfigurationsmanagement ist einer der am meisten unterschätzten Aspekte der mobilen Entwicklung. Laut CloudBees (2025) stehen 47% der Produktionsvorfälle im Zusammenhang mit falschen Build-Konfigurationen. Die richtige Einrichtung von Build Variant, Scheme und .env-Dateien ist der Schlüssel zu stabilem CI/CD und vorhersehbaren Releases.
Wichtige Punkte
Build Variant — eine Kombination aus Build Type (debug/release/staging) und Product Flavor (free/paid, demo/full). Gradle erstellt automatisch einen variant für jede Kombination: freeDebug, freeRelease, paidDebug, paidRelease. Jeder variant kann eigenen Code, Ressourcen und Abhängigkeiten haben — dies ist die Grundlage des Konfigurationsmanagements in mobilen Apps unter Android.
Build Type — Build-Einstellungen: ob Debugging aktiviert ist, Signierung, ProGuard-Optimierung. debug enthält standardmäßig debuggable=true, release — minifyEnabled=true.
Product Flavor — App-Variante: kostenlos (free), kostenpflichtig (paid), Demo (demo). Flavors können unterschiedliche applicationId, Ressourcen und SDK-Abhängigkeiten haben.
// build.gradle — Konfiguration von Produkt-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')
}
}
}
Das Beispiel erstellt zwei Flavors: free und paid. Für free ist eine separate applicationId festgelegt — dies ermöglicht die Installation beider Apps auf einem Gerät. BuildConfig wird für jeden variant generiert: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Verwenden Sie BuildConfig im Code für bedingte Logik.
settings.gradle — die root Gradle-Datei, die die Projektmodule beschreibt.
Gradle KTS — eine Alternative zu Groovy mit Kotlin DSL. KTS bietet Autovervollständigung in Android Studio und Typprüfung. Für neue Projekte empfohlen.
Konfigurationsmanagement in iOS basiert auf Scheme — einer Xcode-Konfiguration, die festlegt, was und wie gebaut wird: Build Configuration (Debug/Release), Tests, Analyse, Archivierung. Schemes können für verschiedene Umgebungen (Development, Staging, Production) dupliziert werden. Schemes werden in .xcscheme-Dateien im Ordner xcshareddata gespeichert.
.xcconfig — eine Xcode-Konfigurationsdatei, die Build-Einstellungen in Textform speichert. Für das Konfigurationsmanagement mobiler Apps verwendet iOS .xcconfig: Versionierung in Git, Wiederverwendung zwischen Projekten, weniger manuelle Einstellungen. In .xcconfig werden SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY festgelegt.
Info.plist — die Metadatendatei der App. Sie speichert Version, Identifikator, Berechtigungen. Info.plist kann für jedes Scheme unterschiedlich sein — über Info.plist File in Build Settings.
AndroidManifest.xml — das Android-Äquivalent: speichert Berechtigungen, Komponenten, Metadaten.
Scheme — das Build-Szenario (was zu tun ist). Build Configuration — der Satz von Einstellungen (wie es zu tun ist). Ein Scheme verwendet eine Build Configuration (Debug oder Release). Für CI/CD: Konfigurieren Sie die Archive-Aktion auf Release und die Test-Aktion auf Debug in einem Scheme.
pubspec.yaml — die Konfigurationsdatei des Flutter-Projekts. Enthält Abhängigkeiten, Versionen, Ressourcen. Unterstützt Umgebungsvariablen über --dart-define.
Podfile — der CocoaPods-Abhängigkeitsmanager für iOS. Definiert Bibliotheksversionen und Plattform.
.env — eine Datei mit Umgebungsvariablen für alle Plattformen. Flutter und React Native verwenden einen anderen Ansatz für das Konfigurationsmanagement: dart-define in Flutter, react-native-config in React Native. Das Konfigurationsmanagement in plattformübergreifenden Projekten umfasst je nach Stack unterschiedliche Tools.
.env — eine Textdatei mit Schlüssel=Wert-Paaren. Wird nicht in Git committet (zu .gitignore hinzufügen). Für Flutter — flutter_dotenv, für iOS — Config.xcconfig mit #include, für Android — BuildConfig. env-Variablen: API_URL, SENTRY_DSN, APP_SECRET. Im Konfigurationsmanagement der mobilen Entwicklung ist .env der De-facto-Standard zum Speichern von Geheimnissen außerhalb des Repositoriums.
Podfile beschreibt CocoaPods-Abhängigkeiten und Plattform (platform :ios, '15.0'). pubspec.yaml für Flutter — dependencies und dev_dependencies. Beide unterstützen bedingte Abhängigkeiten: pod 'Analytics', :configs => ['Release'] oder flutter pub add --flavor free. Bei IT Sectr verwenden wir .env + BuildConfig für Geheimnisse und Podfile für native Abhängigkeiten in mobilen Projekten.
| Parameter | Android | iOS | Flutter |
|---|---|---|---|
| Konfigurationseinheit | Build Variant | Scheme | Flavor (--flavor) |
| Build-Datei | build.gradle | .xcconfig | pubspec.yaml |
| Bedingter Code | BuildConfig | Active Compilation Conditions | dart-define |
| Geheimnisse | BuildConfig/NDK | .xcconfig | .env/dart-define |
| Abhängigkeitsmanager | Gradle (Maven) | SPM/CocoaPods | pub (dart) |
Die Tabelle zeigt die wichtigsten Unterschiede im Konfigurationsmanagement zwischen mobilen Plattformen. Android bietet mehr Flexibilität durch Build Variant. iOS ist einfacher, aber weniger flexibel. Flutter zentralisiert die Konfiguration in dart-define, aber native Abhängigkeiten erfordern weiterhin die Konfiguration von Podfile/build.gradle.
Bedingte Kompilierung — Ein- oder Ausschließen von Code zur Kompilierzeit in Abhängigkeit von Flags. Dies ist Teil des Konfigurationsmanagements: Es ermöglicht das Einbetten von Debug-Tools (Logging, Inspector) in Debug-Builds und das Entfernen aus Release. Die Implementierung unterscheidet sich zwischen den Plattformen.
#if DEBUG — Swift-Präprozessordirektive. Der Code innerhalb des Blocks wird nur in der Debug-Konfiguration kompiliert. Andere Flags: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions in Build Settings — fügen Sie benutzerdefinierte Flags über -D FLAG_NAME hinzu. Das Konfigurationsmanagement von Builds durch Kompilierungsbedingungen ist in iOS Standardpraxis.
BuildConfig.DEBUG — boolesches Feld, true im Debug-Build. BuildConfig wird automatisch von Gradle generiert. Für benutzerdefinierte Flags verwenden Sie buildConfigField in build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". Im Code: if (BuildConfig.REPORT_CRASHES) { ... }.
dart-define — Flutter-Kompilierungsflags: flutter run --dart-define=ENV=staging. Im Code: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Für bedingte mobile App-Builds verwenden Sie das build_runner-Plugin mit Codegenerierung.
Häufig gestellte Fragen
Build Variant = Build Type (debug/release) + Product Flavor. Flavor ist die App-Variante (kostenpflichtig/kostenlos, Client/Server), Build Type sind die Build-Einstellungen (Debug/Optimierung). Die Kombination von flavour + type bildet einen variant: zum Beispiel paidDebug.
.xcconfig ist eine Xcode-Konfigurationsdatei, die Build-Einstellungen in Textform speichert. Sie ermöglicht das Auslagern von Einstellungen aus dem Xcode-Projekt in Git-freundliche Dateien und vereinfacht CI/CD und Teamarbeit in mobilen Projekten.
API-Schlüssel dürfen nicht im Code gespeichert werden — jede .apk oder .ipa kann dekompiliert werden. Verwenden Sie .env-Dateien, einen Backend-Proxy oder Verschleierung durch Build Config. IT Sectr empfiehlt, Geheimnisse auf dem Server zu speichern und sie dem Client nach der Authentifizierung auszustellen.
Bedingte Kompilierung ist das Ein-/Ausschließen von Code zur Kompilierzeit in Abhängigkeit von Flags. In Swift — #if DEBUG, in Kotlin — BuildConfig.DEBUG. Wird verwendet, um Logging in Debug zu aktivieren und in Release zu deaktivieren. Dies ist ein Schlüsselelement des Konfigurationsmanagements in der mobilen Entwicklung.
Podfile wird nur bei der Arbeit mit CocoaPods verwendet. Für SPM oder Carthage wird es nicht benötigt. Lassen Sie Podfile nicht in einem Projekt, wenn Sie CocoaPods aufgegeben haben — das verwirrt das Team und das CI/CD-System.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.