মোবাইল ডেভেলপমেন্টে কনফিগারেশন ম্যানেজমেন্ট: এটি কী, কী কী অপশন এবং কীভাবে সেটআপ করবেন

লেখক: 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 প্রতিটি 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 কনফিগার করতে হয়।

কনফিগারেশন ম্যানেজমেন্টে কন্ডিশনাল কম্পাইলেশন

কন্ডিশনাল কম্পাইলেশন — ফ্ল্যাগের উপর নির্ভর করে কম্পাইল সময়ে কোড অন্তর্ভুক্ত বা বাদ দেওয়া। এটি কনফিগারেশন ম্যানেজমেন্টের অংশ: এটি ডিবাগ বিল্ডে ডিবাগিং টুল (লগিং, ইন্সপেক্টর) এম্বেড করা এবং রিলিজ থেকে সেগুলি সরানোর অনুমতি দেয়। বাস্তবায়ন প্ল্যাটফর্ম অনুসারে পৃথক।

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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন