Manajemen konfigurasi adalah salah satu aspek yang paling diremehkan dalam pengembangan seluler. Menurut CloudBees (2025), 47% insiden di produksi terkait dengan konfigurasi build yang salah. Pengaturan yang tepat dari Build Variant, Scheme, dan file .env adalah kunci untuk CI/CD yang stabil dan rilis yang dapat diprediksi.
Poin Utama
Build Variant — kombinasi dari Build Type (debug/release/staging) dan Product Flavor (free/paid, demo/full). Gradle secara otomatis membuat variant untuk setiap kombinasi: freeDebug, freeRelease, paidDebug, paidRelease. Setiap variant dapat memiliki kode, sumber daya, dan dependensinya sendiri — ini adalah dasar manajemen konfigurasi dalam aplikasi seluler di Android.
Build Type — pengaturan build: apakah debugging diaktifkan, penandatanganan, optimasi ProGuard. debug secara default berisi debuggable=true, release — minifyEnabled=true.
Product Flavor — varian aplikasi: gratis (free), berbayar (paid), demo. Flavor dapat memiliki applicationId, sumber daya, dependensi SDK yang berbeda.
// build.gradle — konfigurasi product flavor 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')
}
}
}
Contoh membuat dua flavor: free dan paid. ApplicationId terpisah ditetapkan untuk free — ini memungkinkan menginstal kedua aplikasi pada satu perangkat. BuildConfig dihasilkan untuk setiap variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Gunakan BuildConfig dalam kode untuk logika bersyarat.
settings.gradle — file Gradle root yang mendeskripsikan modul proyek.
Gradle KTS — alternatif untuk Groovy menggunakan Kotlin DSL. KTS memberikan pelengkapan otomatis di Android Studio dan pemeriksaan tipe. Direkomendasikan untuk proyek baru.
Manajemen konfigurasi di iOS dibangun di atas Scheme — konfigurasi Xcode yang menentukan apa dan bagaimana membangun: Build Configuration (Debug/Release), pengujian, analisis, pengarsipan. Scheme dapat digandakan untuk berbagai lingkungan (Development, Staging, Production). Scheme disimpan dalam file .xcscheme di folder xcshareddata.
.xcconfig — file konfigurasi Xcode yang menyimpan pengaturan build dalam bentuk teks. Untuk manajemen konfigurasi aplikasi seluler, iOS menggunakan .xcconfig: versioning di Git, penggunaan kembali antar proyek, lebih sedikit pengaturan manual. Di .xcconfig diatur SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY.
Info.plist — file metadata aplikasi. Menyimpan versi, pengidentifikasi, izin. Info.plist dapat berbeda untuk setiap Scheme — melalui Info.plist File di Build Settings.
AndroidManifest.xml — padanan Android: menyimpan izin, komponen, meta-data.
Scheme — skenario build (apa yang harus dilakukan). Build Configuration — kumpulan pengaturan (bagaimana melakukannya). Satu Scheme menggunakan satu Build Configuration (Debug atau Release). Untuk CI/CD: konfigurasikan tindakan Archive ke Release dan tindakan Test ke Debug dalam Scheme yang sama.
pubspec.yaml — file konfigurasi proyek Flutter. Berisi dependensi, versi, sumber daya. Mendukung variabel lingkungan melalui --dart-define.
Podfile — manajer dependensi CocoaPods untuk iOS. Menentukan versi pustaka dan platform.
.env — file dengan variabel lingkungan untuk semua platform. Flutter dan React Native menggunakan pendekatan berbeda untuk manajemen konfigurasi: dart-define di Flutter, react-native-config di React Native. Manajemen konfigurasi dalam proyek lintas platform melibatkan alat yang berbeda tergantung pada stack.
.env — file teks dengan pasangan kunci=nilai. Jangan di-commit ke Git (tambahkan ke .gitignore). Untuk Flutter — flutter_dotenv, untuk iOS — Config.xcconfig dengan #include, untuk Android — BuildConfig. Variabel env: API_URL, SENTRY_DSN, APP_SECRET. Dalam manajemen konfigurasi pengembangan seluler, .env adalah standar de facto untuk menyimpan rahasia di luar repositori.
Podfile menjelaskan dependensi CocoaPods dan platform (platform :ios, '15.0'). pubspec.yaml untuk Flutter — dependencies dan dev_dependencies. Keduanya mendukung dependensi bersyarat: pod 'Analytics', :configs => ['Release'] atau flutter pub add --flavor free. Di IT Sectr, kami menggunakan .env + BuildConfig untuk rahasia dan Podfile untuk dependensi asli dalam proyek seluler.
| Parameter | Android | iOS | Flutter |
|---|---|---|---|
| Unit konfigurasi | Build Variant | Scheme | Flavor (--flavor) |
| File build | build.gradle | .xcconfig | pubspec.yaml |
| Kode bersyarat | BuildConfig | Active Compilation Conditions | dart-define |
| Rahasia | BuildConfig/NDK | .xcconfig | .env/dart-define |
| Manajer dependensi | Gradle (Maven) | SPM/CocoaPods | pub (dart) |
Tabel menunjukkan perbedaan utama dalam manajemen konfigurasi antar platform seluler. Android menawarkan lebih banyak fleksibilitas melalui Build Variant. iOS lebih sederhana tetapi kurang fleksibel. Flutter memusatkan konfigurasi di dart-define, tetapi dependensi asli masih memerlukan konfigurasi Podfile/build.gradle.
Kompilasi Bersyarat — memasukkan atau mengecualikan kode pada tahap kompilasi tergantung pada flag. Ini adalah bagian dari manajemen konfigurasi: ini memungkinkan penyematan alat debugging (logging, inspektur) di build debug dan menghapusnya dari rilis. Implementasi berbeda antar platform.
#if DEBUG — direktif preprosesor Swift. Kode di dalam blok hanya dikompilasi dalam konfigurasi Debug. Flag lainnya: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions di Build Settings — tambahkan flag kustom Anda melalui -D FLAG_NAME. Manajemen konfigurasi build melalui kondisi kompilasi adalah praktik standar di iOS.
BuildConfig.DEBUG — bidang boolean, true di build debug. BuildConfig dihasilkan secara otomatis oleh Gradle. Untuk flag kustom gunakan buildConfigField di build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". Dalam kode: if (BuildConfig.REPORT_CRASHES) { ... }.
dart-define — flag kompilasi Flutter: flutter run --dart-define=ENV=staging. Dalam kode: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Untuk build aplikasi seluler bersyarat, gunakan plugin build_runner dengan pembuatan kode.
Pertanyaan yang Sering Diajukan
Build Variant = Build Type (debug/release) + Product Flavor. Flavor adalah varian aplikasi (berbayar/gratis, klien/server), Build Type adalah pengaturan build (debug/optimasi). Kombinasi flavour + type membentuk variant: misalnya, paidDebug.
.xcconfig adalah file konfigurasi Xcode yang menyimpan pengaturan build dalam bentuk teks. Ini memungkinkan memindahkan pengaturan dari proyek Xcode ke file yang ramah Git, menyederhanakan CI/CD dan kerja tim dalam proyek seluler.
Kunci API tidak boleh disimpan dalam kode — .apk atau .ipa apa pun dapat didekompilasi. Gunakan file .env, proxy backend, atau kebingungan melalui Build Config. IT Sectr merekomendasikan untuk menyimpan rahasia di server dan memberikannya ke klien setelah otentikasi.
Kompilasi bersyarat adalah memasukkan/mengecualikan kode pada tahap kompilasi tergantung pada flag. Di Swift — #if DEBUG, di Kotlin — BuildConfig.DEBUG. Digunakan untuk mengaktifkan logging di debug dan menonaktifkan di rilis. Ini adalah elemen kunci manajemen konfigurasi dalam pengembangan seluler.
Podfile hanya digunakan saat bekerja dengan CocoaPods. Tidak diperlukan untuk SPM atau Carthage. Jangan tinggalkan Podfile dalam proyek jika Anda telah meninggalkan CocoaPods — ini membingungkan tim dan sistem CI/CD.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.