إدارة التهيئة هي أحد أكثر الجوانب التي يتم التقليل من شأنها في تطوير التطبيقات المحمولة. وفقًا لـ 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. تم تعيين applicationId منفصل لـ free — وهذا يسمح بتثبيت كلا التطبيقين على جهاز واحد. BuildConfig يتم إنشاؤه لكل variant: BuildConfig.FLAVOR = "free"، BuildConfig.BUILD_TYPE = "debug". استخدم BuildConfig في الكود للمنطق الشرطي.
settings.gradle — ملف Gradle الجذر الذي يصف وحدات المشروع.
Gradle KTS — بديل لـ Groovy باستخدام Kotlin DSL. KTS يوفر الإكمال التلقائي في Android Studio والتحقق من الأنواع. موصى به للمشاريع الجديدة.
إدارة التهيئة في iOS تُبنى على Scheme — تهيئة Xcode التي تحدد ماذا وكيف يتم البناء: Build Configuration (Debug/Release) والاختبارات والتحليل والأرشفة. يمكن نسخ Scheme لبيئات مختلفة (Development وStaging وProduction). يتم تخزين Scheme في ملف .xcscheme في مجلد xcshareddata.
.xcconfig — ملف تهيئة Xcode يخزن إعدادات البناء في شكل نصي. لإدارة التهيئة في التطبيقات المحمولة، يستخدم iOS .xcconfig: التحكم في الإصدارات في Git، إعادة الاستخدام بين المشاريع، إعدادات يدوية أقل. في .xcconfig يتم تعيين SWIFT_ACTIVE_COMPILATION_CONDITIONS وPRODUCT_BUNDLE_IDENTIFIER وCODE_SIGN_IDENTITY.
Info.plist — ملف بيانات وصفية للتطبيق. يخزن الإصدار والمعرّف والأذونات. يمكن أن يكون Info.plist مختلفًا لكل Scheme — عبر Info.plist File في Build Settings.
AndroidManifest.xml — المكافئ في Android: يخزن الأذونات والمكونات والبيانات الوصفية.
Scheme — سيناريو البناء (ماذا تفعل). Build Configuration — مجموعة الإعدادات (كيف تفعل). يستخدم Scheme واحد Build Configuration واحدة (Debug أو Release). لـ CI/CD: قم بتعيين إجراء Archive على Release وإجراء Test على Debug في نفس Scheme.
pubspec.yaml — ملف تهيئة مشروع Flutter. يحتوي على التبعيات والإصدارات والموارد. يدعم متغيرات البيئة من خلال --dart-define.
Podfile — مدير تبعيات CocoaPods لنظام iOS. يحدد إصدارات المكتبات والمنصة.
.env — ملف بمتغيرات البيئة لجميع المنصات. تستخدم Flutter وReact Native نهجًا مختلفًا لإدارة التهيئة: dart-define في Flutter وreact-native-config في React Native. إدارة التهيئة في المشاريع متعددة المنصات تتضمن أدوات مختلفة حسب المجموعة التقنية.
.env — ملف نصي بأزواج مفتاح=قيمة. لا يتم رفعه إلى Git (أضف إلى .gitignore). لـ Flutter — flutter_dotenv، لـ iOS — Config.xcconfig مع #include، لـ Android — BuildConfig. متغيرات env: API_URL وSENTRY_DSN وAPP_SECRET. في إدارة التهيئة في تطوير التطبيقات المحمولة، .env هو المعيار الفعلي لتخزين الأسرار خارج المستودع.
Podfile يصف تبعيات CocoaPods والمنصة (platform :ios, '15.0'). pubspec.yaml لـ Flutter — 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.
التجميع الشرطي — تضمين أو استبعاد الكود في مرحلة التجميع اعتمادًا على الأعلام. هذا جزء من إدارة التهيئة: يسمح بدمج أدوات التصحيح (التسجيل، المفتش) في بنيات debug وإزالتها من release. يختلف التنفيذ عبر المنصات.
#if DEBUG — توجيه معالج مسبق في Swift. الكود داخل الكتلة يتم تجميعه فقط في تهيئة Debug. أعلام أخرى: #if !RELEASE، #if targetEnvironment(simulator). Active Compilation Conditions في Build Settings — أضف أعلامك المخصصة عبر -D FLAG_NAME. إدارة تهيئة البناء من خلال شروط التجميع هي ممارسة قياسية في iOS.
BuildConfig.DEBUG — حقل منطقي، true في بناء debug. يتم إنشاء BuildConfig تلقائيًا بواسطة Gradle. للأعلام المخصصة استخدم buildConfigField في build.gradle: 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. يُستخدم لتمكين التسجيل في debug وتعطيله في release. هذا عنصر أساسي في إدارة التهيئة في تطوير التطبيقات المحمولة.
Podfile يُستخدم فقط عند العمل مع CocoaPods. ليس ضروريًا لـ SPM أو Carthage. لا تترك Podfile في مشروع إذا تخليت عن CocoaPods — هذا يربك الفريق ونظام CI/CD.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.