मोबाइल डेवलपमेंट में कॉन्फ़िगरेशन प्रबंधन: यह क्या है, क्या विकल्प हैं और कैसे सेट अप करें

लेखक: IT Sectr प्रकाशित: 2026-05-30 पढ़ने का समय: 8 मिनट

कॉन्फ़िगरेशन प्रबंधन मोबाइल डेवलपमेंट के सबसे कम आंके जाने वाले पहलुओं में से एक है। CloudBees (2025) के अनुसार, 47% प्रोडक्शन इंसिडेंट गलत बिल्ड कॉन्फ़िगरेशन से संबंधित होते हैं। Build Variant, Scheme और .env फ़ाइलों का सही सेटअप स्थिर CI/CD और पूर्वानुमानित रिलीज़ की कुंजी है।

मुख्य बिंदु

  • कॉन्फ़िगरेशन प्रबंधन मोबाइल ऐप्स में Build Variant (Android), Scheme (iOS) और .env (क्रॉस-प्लेटफ़ॉर्म) पर आधारित है — 47% प्रोडक्शन इंसिडेंट गलत सेटिंग्स से संबंधित होते हैं।
  • iOS Scheme + .xcconfig का उपयोग करता है। Scheme बिल्डिंग, टेस्टिंग और आर्काइविंग प्रबंधित करता है। .xcconfig बिल्ड सेटिंग्स को फ़ाइलों में ले जाता है।
  • क्रॉस-प्लेटफ़ॉर्म टूल — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (एनवायरनमेंट वेरिएबल) — कॉन्फ़िगरेशन को केंद्रीकृत करते हैं।
  • कंडीशनल कंपाइलेशन — कंपाइल समय पर कोड को शामिल/बाहर करना। #if DEBUG, BuildConfig.DEBUG — रिलीज़ व्यवहार को बदले बिना डिबगिंग के लिए।
  • API कुंजियाँ और रहस्य कोड में संग्रहीत नहीं किए जा सकते। .env, Build Config या प्रॉक्सी सर्वर का उपयोग करें। .apk/.ipa को डीकंपाइल करना तुच्छ है।

Android में कॉन्फ़िगरेशन प्रबंधन: Build Variant और build.gradle

Build Variant — Build Type (debug/release/staging) और Product Flavor (free/paid, demo/full) का संयोजन। Gradle स्वचालित रूप से प्रत्येक संयोजन के लिए एक variant बनाता है: freeDebug, freeRelease, paidDebug, paidRelease। प्रत्येक variant का अपना कोड, संसाधन और निर्भरताएँ हो सकती हैं — यह Android पर मोबाइल ऐप्स में कॉन्फ़िगरेशन प्रबंधन की नींव है।

Build Variant बनाम Product Flavor

Build Type — बिल्ड सेटिंग्स: क्या डिबगिंग सक्षम है, हस्ताक्षर, ProGuard ऑप्टिमाइज़ेशन। debug में डिफ़ॉल्ट रूप से debuggable=true होता है, release में minifyEnabled=true होता है।

Product Flavor — ऐप वेरिएंट: मुफ्त (free), भुगतान (paid), डेमो (demo)। फ्लेवर के अलग-अलग applicationId, संसाधन, SDK निर्भरताएँ हो सकती हैं।

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

settings.gradle — रूट Gradle फ़ाइल जो प्रोजेक्ट मॉड्यूल का वर्णन करती है।

Gradle KTS — Kotlin DSL पर Groovy का विकल्प। KTS Android Studio में ऑटोकंप्लीट और टाइप चेकिंग प्रदान करता है। नए प्रोजेक्ट्स के लिए अनुशंसित।

iOS में कॉन्फ़िगरेशन प्रबंधन: Scheme और .xcconfig

कॉन्फ़िगरेशन प्रबंधन iOS में Scheme पर आधारित है — Xcode कॉन्फ़िगरेशन जो परिभाषित करता है कि क्या और कैसे बनाना है: Build Configuration (Debug/Release), टेस्ट, विश्लेषण, आर्काइविंग। Schemes को विभिन्न वातावरणों (Development, Staging, Production) के लिए डुप्लिकेट किया जा सकता है। Schemes xcshareddata फ़ोल्डर में .xcscheme फ़ाइलों में संग्रहीत होते हैं।

.xcconfig फ़ाइलें

.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 — सेटिंग्स का सेट (कैसे करना है)। एक Scheme एक Build Configuration (Debug या Release) का उपयोग करता है। CI/CD के लिए: एक ही Scheme में Archive क्रिया को Release और Test क्रिया को Debug पर कॉन्फ़िगर करें।

Flutter और React Native में कॉन्फ़िगरेशन प्रबंधन: pubspec.yaml, Podfile, .env

pubspec.yaml — Flutter प्रोजेक्ट कॉन्फ़िगरेशन फ़ाइल। इसमें निर्भरताएँ, वर्जन, संसाधन शामिल हैं। --dart-define के माध्यम से एनवायरनमेंट वेरिएबल का समर्थन करता है।

Podfile — iOS के लिए CocoaPods निर्भरता प्रबंधक। लाइब्रेरी वर्जन और प्लेटफ़ॉर्म परिभाषित करता है।

.env — सभी प्लेटफ़ॉर्म के लिए एनवायरनमेंट वेरिएबल वाली फ़ाइल। Flutter और React Native कॉन्फ़िगरेशन प्रबंधन के लिए अलग-अलग दृष्टिकोण का उपयोग करते हैं: Flutter में dart-define, React Native में react-native-config। क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट्स में कॉन्फ़िगरेशन प्रबंधन में स्टैक के आधार पर विभिन्न उपकरण शामिल होते हैं।

.env और एनवायरनमेंट वेरिएबल

.env — कुंजी=मान जोड़ों वाली टेक्स्ट फ़ाइल। Git में कमिट न करें (.gitignore में जोड़ें)। Flutter के लिए — flutter_dotenv, iOS के लिए — #include के साथ Config.xcconfig, Android के लिए — BuildConfig। env वेरिएबल: API_URL, SENTRY_DSN, APP_SECRET। मोबाइल डेवलपमेंट कॉन्फ़िगरेशन प्रबंधन में, .env रिपॉजिटरी के बाहर रहस्य संग्रहीत करने का वास्तविक मानक है।

Podfile और pubspec.yaml

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 VariantSchemeFlavor (--flavor)
बिल्ड फ़ाइलbuild.gradle.xcconfigpubspec.yaml
कंडीशनल कोडBuildConfigActive Compilation Conditionsdart-define
रहस्यBuildConfig/NDK.xcconfig.env/dart-define
निर्भरता प्रबंधकGradle (Maven)SPM/CocoaPodspub (dart)

तालिका मोबाइल प्लेटफ़ॉर्म के बीच कॉन्फ़िगरेशन प्रबंधन में मुख्य अंतर दिखाती है। Android Build Variant के माध्यम से अधिक लचीलापन प्रदान करता है। iOS सरल है लेकिन कम लचीला है। Flutter कॉन्फ़िगरेशन को dart-define में केंद्रीकृत करता है, लेकिन मूल निर्भरताओं के लिए अभी भी Podfile/build.gradle कॉन्फ़िगर करने की आवश्यकता होती है।

कॉन्फ़िगरेशन प्रबंधन में कंडीशनल कंपाइलेशन

कंडीशनल कंपाइलेशन — फ्लैग के आधार पर कंपाइल समय पर कोड शामिल या बाहर करना। यह कॉन्फ़िगरेशन प्रबंधन का हिस्सा है: यह डिबग बिल्ड में डिबगिंग टूल (लॉगिंग, इंस्पेक्टर) एम्बेड करने और उन्हें release से हटाने की अनुमति देता है। कार्यान्वयन प्लेटफ़ॉर्म के अनुसार भिन्न होता है।

Swift में कंडीशनल कंपाइलेशन

#if DEBUG — Swift प्रीप्रोसेसर निर्देश। ब्लॉक के अंदर का कोड केवल Debug कॉन्फ़िगरेशन में कंपाइल होता है। अन्य फ्लैग: #if !RELEASE, #if targetEnvironment(simulator)। Build Settings में Active Compilation Conditions — -D FLAG_NAME के माध्यम से अपने कस्टम फ्लैग जोड़ें। कंपाइलेशन शर्तों के माध्यम से बिल्ड कॉन्फ़िगरेशन प्रबंधन iOS में मानक अभ्यास है।

Kotlin में कंडीशनल कंपाइलेशन

BuildConfig.DEBUG — बूलियन फ़ील्ड, डिबग बिल्ड में true। BuildConfig Gradle द्वारा स्वचालित रूप से जनरेट होता है। कस्टम फ्लैग के लिए build.gradle में buildConfigField का उपयोग करें: buildConfigField "boolean", "REPORT_CRASHES", "true"। कोड में: if (BuildConfig.REPORT_CRASHES) { ... }.

Flutter में कंडीशनल कंपाइलेशन

dart-define — Flutter कंपाइलेशन फ्लैग: flutter run --dart-define=ENV=staging। कोड में: const env = String.fromEnvironment('ENV', defaultValue: 'production')। कंडीशनल मोबाइल ऐप बिल्ड के लिए, कोड जनरेशन के साथ build_runner प्लगइन का उपयोग करें।

अक्सर पूछे जाने वाले प्रश्न

Android में Build Variant, Product Flavor से कैसे भिन्न है?

Build Variant = Build Type (debug/release) + Product Flavor। Flavor ऐप वेरिएंट है (भुगतान/मुफ्त, क्लाइंट/सर्वर), Build Type बिल्ड सेटिंग्स है (डिबग/ऑप्टिमाइज़ेशन)। flavour + type का संयोजन variant बनाता है: उदाहरण के लिए, paidDebug।

.xcconfig क्या है और iOS में इसकी आवश्यकता क्यों है?

.xcconfig एक Xcode कॉन्फ़िगरेशन फ़ाइल है जो बिल्ड सेटिंग्स को टेक्स्ट रूप में संग्रहीत करती है। यह Xcode प्रोजेक्ट से सेटिंग्स को Git-अनुकूल फ़ाइलों में ले जाने की अनुमति देता है, मोबाइल प्रोजेक्ट्स में CI/CD और टीम वर्क को सरल बनाता है।

मोबाइल ऐप में API कुंजियों को सुरक्षित रूप से कैसे संग्रहीत करें?

API कुंजियाँ कोड में संग्रहीत नहीं की जा सकतीं — किसी भी .apk या .ipa को डीकंपाइल किया जा सकता है। .env फ़ाइलों, बैकएंड प्रॉक्सी या Build Config के माध्यम से अस्पष्टीकरण का उपयोग करें। IT Sectr सर्वर पर रहस्य संग्रहीत करने और प्रमाणीकरण के बाद उन्हें क्लाइंट को जारी करने की अनुशंसा करता है।

कंडीशनल कंपाइलेशन क्या है और इसका उपयोग कब करें?

कंडीशनल कंपाइलेशन फ्लैग के आधार पर कंपाइल समय पर कोड शामिल/बाहर करना है। Swift में — #if DEBUG, Kotlin में — BuildConfig.DEBUG। डिबग में लॉगिंग सक्षम करने और release में अक्षम करने के लिए उपयोग किया जाता है। यह मोबाइल डेवलपमेंट में कॉन्फ़िगरेशन प्रबंधन का एक प्रमुख तत्व है।

क्या CocoaPods के बिना प्रोजेक्ट में Podfile आवश्यक है?

Podfile केवल CocoaPods के साथ काम करते समय उपयोग किया जाता है। SPM या Carthage के लिए इसकी आवश्यकता नहीं है। यदि आपने CocoaPods छोड़ दिया है तो प्रोजेक्ट में Podfile न छोड़ें — यह टीम और CI/CD सिस्टम को भ्रमित करता है।

सारांश

  • कॉन्फ़िगरेशन प्रबंधन मोबाइल ऐप्स में स्थिर CI/CD की नींव है। Android Build Variant का उपयोग करता है, iOS Scheme का, Flutter dart-define का।
  • Android: Build Variant = Build Type × Product Flavor। BuildConfig प्रत्येक variant के लिए जनरेट होता है।
  • iOS: Scheme + .xcconfig कॉन्फ़िगरेशन प्रबंधित करते हैं। Info.plist — ऐप मेटाडेटा।
  • Flutter: बिल्ड वेरिएबल के लिए dart-define। निर्भरताओं के लिए pubspec.yaml।
  • कंडीशनल कंपाइलेशन (#if DEBUG, BuildConfig.DEBUG) — कॉन्फ़िगरेशन प्रबंधन का हिस्सा, release में डिबग कोड हटाने का मानक तरीका।
  • .env — रिपॉजिटरी के बाहर रहस्यों का सुरक्षित भंडारण। .env को Git में कमिट न करें।
  • मोबाइल प्रोजेक्ट्स में कॉन्फ़िगरेशन प्रबंधन पर पहले कमिट से ध्यान देने की आवश्यकता है — सही बिल्ड सेटअप हर रिलीज़ पर डिबगिंग के घंटे बचाता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें