كيفية إنشاء Flavors في iOS بدون تعقيد وبالصور لمشروع Flutter
في عالم تطوير التطبيقات، من الشائع وجود أكثر من نسخة لنفس التطبيق مثل: الإصدار التجريبي (Dev)، والإصدار المنتج (Prod). يُعرف هذا بإعداد Build Flavors . وفي هذا المقال سنشرح خطوات واضحة لإنشاء Flavors لتطبيق iOS باستخدام Xcode.
فتح المشروع في Xcode
افتح مشروعك في برنامج Xcode .
بعد فتح المشروع، اضغط على قائمة Product في الأعلى.
اختر Scheme → Manage Schemes .
إنشاء وتعديل النسخ (Schemes)
قم بتغيير اسم الـ Scheme الحالي (Runner) إلى prod.
ثم اضغط على زر (+) لإضافه Scheme جديد.
اختر الهدف (Target) Runner.
سمّيه بـ dev او اي اسم اخر جديد.
تكرار إعدادات البناء (Build Configurations)
انتقل إلى ملف Runner → Info → Configurations .
قم بتكرار كل من الإعدادات التالية:
Debug
Release
Profile
أضف اللاحقة -dev (او اي اسم اخر) لكل منها، ليصبح:
Debug-dev
Release-dev
Profile-dev
ضبط اعدادات التشغيل
انتقل الي الاعلي وقم باختيار اسم ال flavor وبعدها قم بعمل edit scheme بعدها سوف تمر علي جميع العناصر وتقوم بضبط الاعدادات الصحيحه لها كما هو موضح علي حسب النوع
تحديد معرف الحزمة (Bundle Identifier) للنسخ المختلفة
انتقل إلى Target Runner → Build Settings .
ابحث عن خيار Product Bundle Identifier .
ضع معرف حزمة مختلف لكل نسخة، مثلاً:
prod: com.example.myapp.prod
dev: com.example.myapp.dev
تعيين اسم العرض (App Display Name) للنسخ المختلفة
في نفس صفحة Build Settings ، قم بإنشاء User Defined Setting جديدة.
سمّها APP_DISPLAY_NAME.
أعطِ قيمة لكل نسخة، مثل:
prod: My App
dev: My App Dev
ثم اذهب إلى ملف info.plist.
وقم بالبحث عن CFBundleDisplayName واجله ياخذ الاسم من flavor كما هو موضح
<string>$(APP_DISPLAY_NAME)</string>
إعداد Firebase للنسخ المختلفة
أنشئ مجلدًا باسم config داخل مجلد ios.
داخله، أنشئ مجلدين فرعيين: prod و dev.
ضع ملف GoogleService-Info.plist الخاص بكل نسخة داخل المجلد المناسب.
الان قم بفتح الملف في Xcode وذلك عن طريق التوجه الي Runner ومن ثم Add Files to runner
بعد ذلك اختر الملف ومن ثم add
سوف تخرج لك هذه الصفحه بعد ذلك finish
إضافة سكريبت لنسخ ملف GoogleService-Info.plist
انتقل إلى Build Phases .
اضغط على + → New Run Script Phase .
سمّي السكريبت بـ Copy GoogleServices-Info.plist to the current location او اي اسم.
يجب أن يكون هذا السكريبت بعد مرحلة Link Binary With Libraries .
الاسكريبت
environment="default"if [[ $CONFIGURATION =~ -([^-]*)$ ]]; thenenvironment=${BASH_REMATCH[1]}fiecho "Current environment: $environment"FLAVOR_CONFIG_DIR="${PROJECT_DIR}/config/${environment}"GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plistGOOGLESERVICE_INFO_FILE="${FLAVOR_CONFIG_DIR}/${GOOGLESERVICE_INFO_PLIST}"if [ -f "$GOOGLESERVICE_INFO_FILE" ]; thenecho "Found GoogleService-Info.plist in $environment, copying..."PLIST_DESTINATION="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app"cp "${GOOGLESERVICE_INFO_FILE}" "${PLIST_DESTINATION}"elseecho "No GoogleService-Info.plist found for $environment. Skipping Firebase config."fi


















