कॉन्फ़िगरेशन प्रबंधन मोबाइल डेवलपमेंट के सबसे कम आंके जाने वाले पहलुओं में से एक है। CloudBees (2025) के अनुसार, 47% प्रोडक्शन इंसिडेंट गलत बिल्ड कॉन्फ़िगरेशन से संबंधित होते हैं। Build Variant, Scheme और .env फ़ाइलों का सही सेटअप स्थिर CI/CD और पूर्वानुमानित रिलीज़ की कुंजी है।
मुख्य बिंदु
Build Variant — Build Type (debug/release/staging) और Product Flavor (free/paid, demo/full) का संयोजन। Gradle स्वचालित रूप से प्रत्येक संयोजन के लिए एक variant बनाता है: freeDebug, freeRelease, paidDebug, paidRelease। प्रत्येक variant का अपना कोड, संसाधन और निर्भरताएँ हो सकती हैं — यह Android पर मोबाइल ऐप्स में कॉन्फ़िगरेशन प्रबंधन की नींव है।
Build Type — बिल्ड सेटिंग्स: क्या डिबगिंग सक्षम है, हस्ताक्षर, ProGuard ऑप्टिमाइज़ेशन। debug में डिफ़ॉल्ट रूप से debuggable=true होता है, release में minifyEnabled=true होता है।
Product Flavor — ऐप वेरिएंट: मुफ्त (free), भुगतान (paid), डेमो (demo)। फ्लेवर के अलग-अलग applicationId, संसाधन, SDK निर्भरताएँ हो सकती हैं।
// build.gradle — 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')
}
}
}
उदाहरण दो फ्लेवर बनाता है: free और paid। free के लिए एक अलग applicationId सेट किया गया है — यह दोनों ऐप्स को एक डिवाइस पर इंस्टॉल करने की अनुमति देता है। BuildConfig प्रत्येक variant के लिए जनरेट होता है: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug"। कंडीशनल लॉजिक के लिए कोड में BuildConfig का उपयोग करें।
settings.gradle — रूट Gradle फ़ाइल जो प्रोजेक्ट मॉड्यूल का वर्णन करती है।
Gradle KTS — Kotlin DSL पर Groovy का विकल्प। KTS Android Studio में ऑटोकंप्लीट और टाइप चेकिंग प्रदान करता है। नए प्रोजेक्ट्स के लिए अनुशंसित।
कॉन्फ़िगरेशन प्रबंधन iOS में Scheme पर आधारित है — Xcode कॉन्फ़िगरेशन जो परिभाषित करता है कि क्या और कैसे बनाना है: Build Configuration (Debug/Release), टेस्ट, विश्लेषण, आर्काइविंग। Schemes को विभिन्न वातावरणों (Development, Staging, Production) के लिए डुप्लिकेट किया जा सकता है। Schemes xcshareddata फ़ोल्डर में .xcscheme फ़ाइलों में संग्रहीत होते हैं।
.xcconfig — Xcode कॉन्फ़िगरेशन फ़ाइल जो बिल्ड सेटिंग्स को टेक्स्ट रूप में संग्रहीत करती है। मोबाइल ऐप कॉन्फ़िगरेशन प्रबंधन के लिए, iOS .xcconfig का उपयोग करता है: Git में वर्जनिंग, प्रोजेक्ट्स के बीच पुन: उपयोग, कम मैनुअल सेटिंग्स। .xcconfig में SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY सेट किए जाते हैं।
Info.plist — ऐप मेटाडेटा फ़ाइल। इसमें वर्जन, पहचानकर्ता, अनुमतियाँ संग्रहीत होती हैं। Info.plist प्रत्येक Scheme के लिए अलग हो सकता है — Build Settings में Info.plist File के माध्यम से।
AndroidManifest.xml — Android के लिए समकक्ष: अनुमतियाँ, घटक, मेटा-डेटा संग्रहीत करता है।
Scheme — बिल्ड परिदृश्य (क्या करना है)। Build Configuration — सेटिंग्स का सेट (कैसे करना है)। एक Scheme एक Build Configuration (Debug या Release) का उपयोग करता है। CI/CD के लिए: एक ही Scheme में Archive क्रिया को Release और Test क्रिया को Debug पर कॉन्फ़िगर करें।
pubspec.yaml — Flutter प्रोजेक्ट कॉन्फ़िगरेशन फ़ाइल। इसमें निर्भरताएँ, वर्जन, संसाधन शामिल हैं। --dart-define के माध्यम से एनवायरनमेंट वेरिएबल का समर्थन करता है।
Podfile — iOS के लिए CocoaPods निर्भरता प्रबंधक। लाइब्रेरी वर्जन और प्लेटफ़ॉर्म परिभाषित करता है।
.env — सभी प्लेटफ़ॉर्म के लिए एनवायरनमेंट वेरिएबल वाली फ़ाइल। Flutter और React Native कॉन्फ़िगरेशन प्रबंधन के लिए अलग-अलग दृष्टिकोण का उपयोग करते हैं: Flutter में dart-define, React Native में react-native-config। क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट्स में कॉन्फ़िगरेशन प्रबंधन में स्टैक के आधार पर विभिन्न उपकरण शामिल होते हैं।
.env — कुंजी=मान जोड़ों वाली टेक्स्ट फ़ाइल। Git में कमिट न करें (.gitignore में जोड़ें)। Flutter के लिए — flutter_dotenv, iOS के लिए — #include के साथ Config.xcconfig, Android के लिए — BuildConfig। env वेरिएबल: API_URL, SENTRY_DSN, APP_SECRET। मोबाइल डेवलपमेंट कॉन्फ़िगरेशन प्रबंधन में, .env रिपॉजिटरी के बाहर रहस्य संग्रहीत करने का वास्तविक मानक है।
Podfile CocoaPods निर्भरताओं और प्लेटफ़ॉर्म का वर्णन करता है (platform :ios, '15.0')। Flutter के लिए pubspec.yaml — dependencies और dev_dependencies। दोनों कंडीशनल निर्भरताओं का समर्थन करते हैं: pod 'Analytics', :configs => ['Release'] या flutter pub add --flavor free। IT Sectr में, हम मोबाइल प्रोजेक्ट्स में रहस्यों के लिए .env + BuildConfig और मूल निर्भरताओं के लिए Podfile का उपयोग करते हैं।
| पैरामीटर | Android | iOS | Flutter |
|---|---|---|---|
| कॉन्फ़िगरेशन इकाई | Build Variant | Scheme | Flavor (--flavor) |
| बिल्ड फ़ाइल | build.gradle | .xcconfig | pubspec.yaml |
| कंडीशनल कोड | BuildConfig | Active Compilation Conditions | dart-define |
| रहस्य | BuildConfig/NDK | .xcconfig | .env/dart-define |
| निर्भरता प्रबंधक | Gradle (Maven) | SPM/CocoaPods | pub (dart) |
तालिका मोबाइल प्लेटफ़ॉर्म के बीच कॉन्फ़िगरेशन प्रबंधन में मुख्य अंतर दिखाती है। Android Build Variant के माध्यम से अधिक लचीलापन प्रदान करता है। iOS सरल है लेकिन कम लचीला है। Flutter कॉन्फ़िगरेशन को dart-define में केंद्रीकृत करता है, लेकिन मूल निर्भरताओं के लिए अभी भी Podfile/build.gradle कॉन्फ़िगर करने की आवश्यकता होती है।
कंडीशनल कंपाइलेशन — फ्लैग के आधार पर कंपाइल समय पर कोड शामिल या बाहर करना। यह कॉन्फ़िगरेशन प्रबंधन का हिस्सा है: यह डिबग बिल्ड में डिबगिंग टूल (लॉगिंग, इंस्पेक्टर) एम्बेड करने और उन्हें release से हटाने की अनुमति देता है। कार्यान्वयन प्लेटफ़ॉर्म के अनुसार भिन्न होता है।
#if DEBUG — Swift प्रीप्रोसेसर निर्देश। ब्लॉक के अंदर का कोड केवल Debug कॉन्फ़िगरेशन में कंपाइल होता है। अन्य फ्लैग: #if !RELEASE, #if targetEnvironment(simulator)। Build Settings में Active Compilation Conditions — -D FLAG_NAME के माध्यम से अपने कस्टम फ्लैग जोड़ें। कंपाइलेशन शर्तों के माध्यम से बिल्ड कॉन्फ़िगरेशन प्रबंधन iOS में मानक अभ्यास है।
BuildConfig.DEBUG — बूलियन फ़ील्ड, डिबग बिल्ड में true। BuildConfig Gradle द्वारा स्वचालित रूप से जनरेट होता है। कस्टम फ्लैग के लिए build.gradle में buildConfigField का उपयोग करें: buildConfigField "boolean", "REPORT_CRASHES", "true"। कोड में: if (BuildConfig.REPORT_CRASHES) { ... }.
dart-define — Flutter कंपाइलेशन फ्लैग: flutter run --dart-define=ENV=staging। कोड में: const env = String.fromEnvironment('ENV', defaultValue: 'production')। कंडीशनल मोबाइल ऐप बिल्ड के लिए, कोड जनरेशन के साथ build_runner प्लगइन का उपयोग करें।
अक्सर पूछे जाने वाले प्रश्न
Build Variant = Build Type (debug/release) + Product Flavor। Flavor ऐप वेरिएंट है (भुगतान/मुफ्त, क्लाइंट/सर्वर), Build Type बिल्ड सेटिंग्स है (डिबग/ऑप्टिमाइज़ेशन)। flavour + type का संयोजन variant बनाता है: उदाहरण के लिए, paidDebug।
.xcconfig एक Xcode कॉन्फ़िगरेशन फ़ाइल है जो बिल्ड सेटिंग्स को टेक्स्ट रूप में संग्रहीत करती है। यह Xcode प्रोजेक्ट से सेटिंग्स को Git-अनुकूल फ़ाइलों में ले जाने की अनुमति देता है, मोबाइल प्रोजेक्ट्स में CI/CD और टीम वर्क को सरल बनाता है।
API कुंजियाँ कोड में संग्रहीत नहीं की जा सकतीं — किसी भी .apk या .ipa को डीकंपाइल किया जा सकता है। .env फ़ाइलों, बैकएंड प्रॉक्सी या Build Config के माध्यम से अस्पष्टीकरण का उपयोग करें। IT Sectr सर्वर पर रहस्य संग्रहीत करने और प्रमाणीकरण के बाद उन्हें क्लाइंट को जारी करने की अनुशंसा करता है।
कंडीशनल कंपाइलेशन फ्लैग के आधार पर कंपाइल समय पर कोड शामिल/बाहर करना है। Swift में — #if DEBUG, Kotlin में — BuildConfig.DEBUG। डिबग में लॉगिंग सक्षम करने और release में अक्षम करने के लिए उपयोग किया जाता है। यह मोबाइल डेवलपमेंट में कॉन्फ़िगरेशन प्रबंधन का एक प्रमुख तत्व है।
Podfile केवल CocoaPods के साथ काम करते समय उपयोग किया जाता है। SPM या Carthage के लिए इसकी आवश्यकता नहीं है। यदि आपने CocoaPods छोड़ दिया है तो प्रोजेक्ट में Podfile न छोड़ें — यह टीम और CI/CD सिस्टम को भ्रमित करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।