کنفیگریشن مینجمنٹ موبائل ڈیولپمنٹ کے سب سے کم سمجھے جانے والے پہلوؤں میں سے ایک ہے۔ 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)، ٹیسٹ، تجزیہ، آرکائیونگ۔ Scheme کو مختلف ماحول (Development، Staging، Production) کے لیے نقل کیا جا سکتا ہے۔ Scheme xcshareddata فولڈر میں .xcscheme فائلوں میں محفوظ ہوتی ہے۔
.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 (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 کنفیگریشن کی ضرورت ہوتی ہے۔
مشروط کمپائل — فلیگ پر منحصر کمپائل وقت پر کوڈ شامل یا خارج کرنا۔ یہ کنفیگریشن مینجمنٹ کا حصہ ہے: یہ ڈیبگ بلڈ میں ڈیبگنگ ٹولز (لاگنگ، انسپکٹر) شامل کرنے اور ریلیز سے ہٹانے کی اجازت دیتا ہے۔ نفاذ پلیٹ فارم کے لحاظ سے مختلف ہوتا ہے۔
#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۔ ڈیبگ میں لاگنگ فعال کرنے اور ریلیز میں غیر فعال کرنے کے لیے استعمال ہوتا ہے۔ یہ موبائل ڈیولپمنٹ میں کنفیگریشن مینجمنٹ کا ایک اہم عنصر ہے۔
Podfile صرف CocoaPods کے ساتھ کام کرتے وقت استعمال ہوتا ہے۔ SPM یا Carthage کے لیے ضروری نہیں ہے۔ اگر آپ نے CocoaPods چھوڑ دیا ہے تو پروجیکٹ میں Podfile نہ چھوڑیں — یہ ٹیم اور CI/CD سسٹم کو الجھاتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔