কনফিগারেশন ম্যানেজমেন্ট মোবাইল ডেভেলপমেন্টের সবচেয়ে কম মূল্যায়ন করা দিকগুলির মধ্যে একটি। 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 প্রতিটি 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 কনফিগার করতে হয়।
কন্ডিশনাল কম্পাইলেশন — ফ্ল্যাগের উপর নির্ভর করে কম্পাইল সময়ে কোড অন্তর্ভুক্ত বা বাদ দেওয়া। এটি কনফিগারেশন ম্যানেজমেন্টের অংশ: এটি ডিবাগ বিল্ডে ডিবাগিং টুল (লগিং, ইন্সপেক্টর) এম্বেড করা এবং রিলিজ থেকে সেগুলি সরানোর অনুমতি দেয়। বাস্তবায়ন প্ল্যাটফর্ম অনুসারে পৃথক।
#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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।