موبائل ڈیولپمنٹ میں کنفیگریشن مینجمنٹ: یہ کیا ہے، کون سے آپشنز ہیں اور کیسے سیٹ اپ کریں

مصنف: 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)، ٹیسٹ، تجزیہ، آرکائیونگ۔ Scheme کو مختلف ماحول (Development، Staging، Production) کے لیے نقل کیا جا سکتا ہے۔ Scheme xcshareddata فولڈر میں .xcscheme فائلوں میں محفوظ ہوتی ہے۔

.xcconfig فائلیں

.xcconfig — Xcode کنفیگریشن فائل جو بلڈ سیٹنگز کو ٹیکسٹ کی شکل میں محفوظ کرتی ہے۔ موبائل ایپ کنفیگریشن مینجمنٹ کے لیے، iOS .xcconfig استعمال کرتا ہے: Git میں ورسننگ، پروجیکٹس کے درمیان دوبارہ استعمال، کم دستی سیٹنگز۔ .xcconfig میں SWIFT_ACTIVE_COMPILATION_CONDITIONS، PRODUCT_BUNDLE_IDENTIFIER، CODE_SIGN_IDENTITY سیٹ کیے جاتے ہیں۔

Info.plist — ایپ میٹا ڈیٹا فائل۔ اس میں ورسن، شناخت کنندہ، اجازتیں محفوظ ہوتی ہیں۔ Info.plist Build Settings میں Info.plist File کے ذریعے ہر Scheme کے لیے مختلف ہو سکتا ہے۔

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 کنفیگریشن کی ضرورت ہوتی ہے۔

کنفیگریشن مینجمنٹ میں مشروط کمپائل

مشروط کمپائل — فلیگ پر منحصر کمپائل وقت پر کوڈ شامل یا خارج کرنا۔ یہ کنفیگریشن مینجمنٹ کا حصہ ہے: یہ ڈیبگ بلڈ میں ڈیبگنگ ٹولز (لاگنگ، انسپکٹر) شامل کرنے اور ریلیز سے ہٹانے کی اجازت دیتا ہے۔ نفاذ پلیٹ فارم کے لحاظ سے مختلف ہوتا ہے۔

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۔ ڈیبگ میں لاگنگ فعال کرنے اور ریلیز میں غیر فعال کرنے کے لیے استعمال ہوتا ہے۔ یہ موبائل ڈیولپمنٹ میں کنفیگریشن مینجمنٹ کا ایک اہم عنصر ہے۔

کیا 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) — کنفیگریشن مینجمنٹ کا حصہ، ریلیز میں ڈیبگ کوڈ ہٹانے کا معیاری طریقہ۔
  • .env — ریپوزٹری سے باہر رازوں کا محفوظ ذخیرہ۔ .env کو Git میں کمیٹ نہ کریں۔
  • موبائل پروجیکٹس میں کنفیگریشن مینجمنٹ کو پہلے کمیٹ سے توجہ درکار ہے — درست بلڈ سیٹ اپ ہر ریلیز میں ڈیبگنگ کے گھنٹے بچاتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں