إعداد Flutter والتطبيق الأول

التشغيل على المحاكيات والأجهزة الحقيقية

50 دقيقة الدرس 8 من 12

نظرة عامة على تشغيل تطبيقات Flutter

يمكن تشغيل تطبيقات Flutter على مجموعة واسعة من الأجهزة والمنصات. سواء كنت تختبر على محاكي Android أو محاكي iOS أو هاتف حقيقي أو حتى متصفح ويب يوفر Flutter تجربة تطوير موحدة. في هذا الدرس سنغطي كيفية إعداد واستخدام كل جهاز مستهدف لتشغيل تطبيقات Flutter.

ملاحظة: بينما يدعم Flutter كلاً من Android و iOS والويب و macOS و Windows و Linux يركز هذا الدرس على أهداف التطوير الأكثر شيوعاً: محاكيات Android ومحاكيات iOS وأجهزة Android و iOS الحقيقية و Chrome لاختبار الويب.

إعداد محاكي Android

يتيح لك محاكي Android اختبار تطبيقات Flutter على أجهزة Android افتراضية دون الحاجة لهاتف حقيقي. يُدار من خلال مدير الأجهزة الافتراضية (AVD Manager).

فتح AVD Manager

الوصول إلى AVD Manager

# من Android Studio:
# Tools > Device Manager (أو AVD Manager في الإصدارات الأقدم)

# من سطر الأوامر:
# انتقل إلى أدوات Android SDK
\$ANDROID_HOME/emulator/emulator -list-avds

# أو استخدم sdkmanager لتثبيت صور النظام أولاً
sdkmanager "system-images;android-34;google_apis;x86_64"

إنشاء جهاز افتراضي

لإنشاء جهاز Android افتراضي جديد:

  1. افتح AVD Manager وانقر Create Virtual Device
  2. اختر ملف تعريف الجهاز (مثل Pixel 7 أو Pixel 8 Pro أو ملف تابلت)
  3. اختر صورة نظام -- الموصى به: أحدث مستوى API مستقر مع Google APIs
  4. اضبط إعدادات AVD: الاسم والاتجاه وذاكرة RAM والتخزين
  5. انقر Finish لإنشاء الجهاز

صور النظام الموصى بها

# لأفضل أداء اختر صور نظام تطابق معالجك:
# - معالج Intel: صور x86_64 مع Intel HAXM
# - معالج AMD: صور x86_64 مع AMD Hypervisor
# - Apple Silicon (M1/M2/M3): صور arm64-v8a

# مستويات API الموصى بها (حتى 2024):
# - API 34 (Android 14) -- أحدث مستقر
# - API 33 (Android 13) -- توافق واسع
# - API 30 (Android 11) -- الحد الأدنى الموصى للاختبار

# اختر دائماً خيارات "Google APIs" لدعم خدمات Google

تشغيل المحاكي

بدء محاكي Android

# من سطر الأوامر
emulator -avd Pixel_7_API_34

# عرض قائمة AVDs المتاحة
emulator -list-avds

# التشغيل بخيارات محددة
emulator -avd Pixel_7_API_34 -no-snapshot -wipe-data

# تشغيل بارد (بداية جديدة)
emulator -avd Pixel_7_API_34 -no-snapshot-load

# من Android Studio: انقر زر التشغيل بجانب AVD
# من VS Code: اختر الجهاز من شريط الحالة السفلي
نصيحة: فعّل تسريع الأجهزة لأداء أفضل بكثير للمحاكي. على macOS مع Apple Silicon يكون تلقائياً. على أجهزة Mac بمعالجات Intel ثبت Intel HAXM. على Windows فعّل Intel HAXM أو Windows Hypervisor Platform (WHPX). على Linux استخدم KVM.

إعداد محاكي iOS

محاكي iOS متاح فقط على macOS ويتطلب Xcode. يحاكي أجهزة iPhone و iPad لاختبار تطبيقات Flutter بدون جهاز Apple حقيقي.

تثبيت وفتح المحاكي

أوامر محاكي iOS

# فتح محاكي iOS من سطر الأوامر
open -a Simulator

# أو من Xcode:
# Xcode > Open Developer Tool > Simulator

# عرض المحاكيات المتاحة
xcrun simctl list devices

# تشغيل محاكي محدد
xcrun simctl boot "iPhone 15 Pro"

# فتح تطبيق المحاكي بعد التشغيل
open -a Simulator

# إيقاف محاكي
xcrun simctl shutdown "iPhone 15 Pro"

# مسح جميع المحتويات والإعدادات
xcrun simctl erase "iPhone 15 Pro"

إدارة أجهزة المحاكي

إنشاء وإدارة المحاكيات

# عرض أنواع الأجهزة المتاحة وبيئات التشغيل
xcrun simctl list devicetypes
xcrun simctl list runtimes

# إنشاء محاكي جديد
xcrun simctl create "My iPhone 15" \
  "com.apple.CoreSimulator.SimDeviceType.iPhone-15" \
  "com.apple.CoreSimulator.SimRuntime.iOS-17-2"

# حذف محاكي
xcrun simctl delete "My iPhone 15"

# أخذ لقطة شاشة من المحاكي
xcrun simctl io booted screenshot ~/Desktop/screenshot.png

# تسجيل فيديو من المحاكي
xcrun simctl io booted recordVideo ~/Desktop/video.mp4
ملاحظة: يشغل محاكي iOS أطر عمل iOS الحقيقية لكن على معمارية معالج Mac. ليس محاكياً حقيقياً (لا يحاكي أجهزة ARM) مما يجعله أسرع بكثير من محاكي Android. لكنه لا يمكنه اختبار ميزات خاصة بالأجهزة مثل الكاميرا و NFC و Bluetooth.

توصيل جهاز Android حقيقي

الاختبار على جهاز حقيقي يمنحك أدق تمثيل لأداء وسلوك تطبيقك. إليك كيفية توصيل جهاز Android للتطوير.

إعداد تصحيح USB

تفعيل تصحيح USB على Android

# الخطوة 1: تفعيل خيارات المطور
# اذهب إلى: الإعدادات > حول الهاتف > انقر "رقم البناء" 7 مرات
# سترى: "أصبحت الآن مطوراً!"

# الخطوة 2: تفعيل تصحيح USB
# اذهب إلى: الإعدادات > خيارات المطور > فعّل "تصحيح USB"

# الخطوة 3: التوصيل عبر كابل USB
# استخدم كابل USB يدعم نقل البيانات (ليس للشحن فقط)

# الخطوة 4: الوثوق بالكمبيوتر
# سيظهر حوار على الهاتف: "السماح بتصحيح USB؟"
# ضع علامة "السماح دائماً من هذا الكمبيوتر" وانقر "سماح"

# الخطوة 5: التحقق من الاتصال
flutter devices
# يجب أن يعرض جهازك مثل:
# SM G991B (mobile) - android-arm64 - Android 13 (API 33)

التصحيح اللاسلكي (Android 11+)

إعداد التصحيح اللاسلكي

# التصحيح اللاسلكي يتطلب Android 11 (API 30) أو أعلى

# الخطوة 1: توصيل الهاتف والكمبيوتر بنفس شبكة Wi-Fi

# الخطوة 2: تفعيل التصحيح اللاسلكي
# الإعدادات > خيارات المطور > فعّل "التصحيح اللاسلكي"

# الخطوة 3: إقران الجهاز (المرة الأولى فقط)
# على الهاتف: التصحيح اللاسلكي > إقران الجهاز برمز إقران
# سجل عنوان IP والمنفذ ورمز الإقران

# الخطوة 4: الإقران من الكمبيوتر
adb pair 192.168.1.100:37123
# أدخل رمز الإقران عند المطالبة

# الخطوة 5: الاتصال
adb connect 192.168.1.100:41567

# الخطوة 6: التحقق
flutter devices
# يجب أن يظهر جهازك في القائمة

# لقطع الاتصال
adb disconnect 192.168.1.100:41567
تحذير: التصحيح اللاسلكي يفتح منفذ شبكة على جهازك. استخدمه فقط على شبكات موثوقة. عطّل التصحيح اللاسلكي عندما لا تطور بنشاط خاصة على شبكات Wi-Fi العامة.

توصيل جهاز iOS حقيقي

تشغيل تطبيقات Flutter على جهاز iOS حقيقي يتطلب حساب مطور Apple وتوفير مناسب. الإعداد أكثر تعقيداً من Android لكن Flutter و Xcode يتعاملان مع معظم التعقيد.

المتطلبات المسبقة

  • جهاز Mac مع Xcode مثبت
  • Apple ID (الحسابات المجانية تعمل لاختبار التطوير)
  • كابل USB (Lightning أو USB-C حسب طراز iPhone)
  • الجهاز يجب أن يعمل بإصدار iOS مدعوم

إعداد جهازك

خطوات إعداد جهاز iOS

# الخطوة 1: توصيل iPhone بـ Mac عبر كابل USB

# الخطوة 2: الوثوق بالكمبيوتر
# على iPhone: انقر "وثوق" عند ظهور "الوثوق بهذا الكمبيوتر؟"

# الخطوة 3: فتح Xcode وتكوين التوقيع
# افتح مساحة عمل iOS لمشروع Flutter:
open ios/Runner.xcworkspace

# في Xcode:
# 1. اختر "Runner" في متصفح المشروع
# 2. اذهب لعلامة "Signing & Capabilities"
# 3. ضع علامة "Automatically manage signing"
# 4. اختر فريقك (Apple ID الخاص بك)
# 5. Xcode ينشئ ملف تعريف التوفير

# الخطوة 4: الوثوق لأول مرة على الجهاز
# على iPhone: الإعدادات > عام > VPN وإدارة الجهاز
# اعثر على ملف تعريف المطور وانقر "وثوق"

# الخطوة 5: التحقق
flutter devices
# يجب أن يظهر iPhone الخاص بك
ملاحظة: مع Apple ID مجاني التطبيقات المثبتة على جهاز حقيقي تنتهي صلاحيتها بعد 7 أيام ويمكنك الحصول على 3 تطبيقات نشطة فقط في المرة الواحدة. عضوية برنامج مطوري Apple المدفوعة (\$99/سنة) تزيل هذه القيود وتسمح بالتوزيع على App Store.

أمر flutter devices

أمر flutter devices يعرض جميع الأجهزة المتاحة التي يمكن لـ Flutter النشر عليها. إنه أول أمر يجب تشغيله عند استكشاف مشاكل اتصال الأجهزة.

استخدام flutter devices

# عرض جميع الأجهزة المتصلة
flutter devices

# مثال على الخرج:
# 3 connected devices:
#
# SM G991B (mobile)        - android-arm64  - Android 13 (API 33)
# iPhone 15 Pro (mobile)   - ios            - iOS 17.2 (simulator)
# Chrome (web)             - web-javascript - Google Chrome 120.0
# macOS (desktop)          - darwin-arm64   - macOS 14.2

# عرض تفاصيل أكثر
flutter devices -v

# عرض أجهزة منصة محددة فقط
flutter devices --device-id android
flutter devices --device-id ios

التشغيل على أجهزة محددة بـ flutter run -d

العلم -d يتيح لك تحديد أي جهاز لتشغيل تطبيقك عليه. هذا ضروري عند توصيل أجهزة متعددة.

استهداف أجهزة محددة

# التشغيل على جهاز محدد بالاسم أو المعرف
flutter run -d "SM G991B"
flutter run -d emulator-5554
flutter run -d "iPhone 15 Pro"

# التشغيل على Chrome (ويب)
flutter run -d chrome

# التشغيل على سطح مكتب macOS
flutter run -d macos

# التشغيل على أول جهاز متاح
flutter run

# التشغيل في وضع الإصدار (محسن بدون تصحيح)
flutter run -d chrome --release

# التشغيل في وضع الملف الشخصي (لاختبار الأداء)
flutter run -d emulator-5554 --profile

# التشغيل بنقطة دخول محددة
flutter run -d chrome --target lib/main_dev.dart

# تحديد جهاز بتطابق جزئي
flutter run -d pixel    # يطابق "Pixel 7"
flutter run -d chrome   # يطابق "Chrome"
flutter run -d iphone   # يطابق "iPhone 15 Pro"
نصيحة: يمكنك استخدام أسماء أجهزة جزئية مع العلم -d. سيطابق Flutter أول جهاز يحتوي اسمه على النص الذي تقدمه. مثلاً flutter run -d chrome سيطابق متصفح Chrome.

التشغيل على Chrome (الويب)

يدعم Flutter الويب كمنصة مستهدفة مما يسمح لك بتشغيل واختبار تطبيقك في متصفح ويب. هذا رائع للاختبار السريع ولبناء تطبيقات الويب.

أوامر تطوير الويب

# تأكد من تفعيل دعم الويب
flutter config --enable-web

# التشغيل على Chrome
flutter run -d chrome

# التشغيل على Chrome بمنفذ محدد
flutter run -d chrome --web-port 8080

# التشغيل بخيارات محرك العرض
flutter run -d chrome --web-renderer html      # محرك HTML
flutter run -d chrome --web-renderer canvaskit  # CanvasKit (الافتراضي)

# البناء لنشر الويب
flutter build web

# البناء بمحرك عرض محدد
flutter build web --web-renderer canvaskit

# الملفات المبنية في build/web/
ملاحظة: يدعم Flutter web محركي عرض: HTML (أخف وأفضل للتطبيقات النصية) و CanvasKit (عرض أكثر اتساقاً وأفضل لواجهات المستخدم المعقدة). CanvasKit هو الافتراضي لأنه يوفر عرضاً مثالياً للبكسلات عبر المتصفحات لكن حجم التحميل الأولي أكبر.

استكشاف مشاكل الاتصال وإصلاحها

مشاكل اتصال الأجهزة شائعة. إليك نهجاً منهجياً لتشخيصها وإصلاحها.

استكشاف الأخطاء العام

أوامر التشخيص

# تشغيل Flutter doctor للتحقق من الإعداد العام
flutter doctor -v

# فحص ADB لأجهزة Android
adb devices

# إيقاف وإعادة تشغيل خادم ADB (يصلح مشاكل Android كثيرة)
adb kill-server
adb start-server

# فحص أدوات Xcode لـ iOS
xcode-select --print-path
sudo xcode-select --switch /Applications/Xcode.app

# تنظيف مشروع Flutter
flutter clean
flutter pub get

# التحقق من تحديثات Flutter
flutter upgrade

مشاكل Android الشائعة

استكشاف أخطاء Android

# المشكلة: الجهاز غير معروف
# الحل 1: جرب كابل USB مختلفاً (كابل بيانات وليس شحن فقط)
# الحل 2: جرب منفذ USB مختلفاً
# الحل 3: ألغِ تفويضات تصحيح USB وأعد التفويض
#   الإعدادات > خيارات المطور > إلغاء تفويضات تصحيح USB

# المشكلة: "Device unauthorized"
adb kill-server
adb start-server
# ثم أعد التفويض على الجهاز

# المشكلة: المحاكي لا يبدأ
# الحل: تشغيل بارد للمحاكي
emulator -avd Pixel_7_API_34 -no-snapshot-load

# المشكلة: فشل بناء Gradle
cd android
./gradlew clean
cd ..
flutter clean
flutter pub get
flutter run

# المشكلة: الترخيص غير مقبول
flutter doctor --android-licenses

مشاكل iOS الشائعة

استكشاف أخطاء iOS

# المشكلة: "No provisioning profile"
# الحل: افتح Xcode واختر Runner وفعّل "Automatically manage signing"
open ios/Runner.xcworkspace

# المشكلة: "Untrusted Developer"
# على iPhone: الإعدادات > عام > VPN وإدارة الجهاز
# وثّق ملف تعريف المطور

# المشكلة: أخطاء CocoaPods
cd ios
pod deintegrate
pod install --repo-update
cd ..

# المشكلة: فشل البناء بعد تحديث Flutter
flutter clean
cd ios
rm -rf Pods
rm Podfile.lock
pod install
cd ..
flutter pub get
flutter run

# المشكلة: المحاكي لا يظهر في الأجهزة
# افتح المحاكي يدوياً
open -a Simulator
# ثم تحقق من الأجهزة مرة أخرى
flutter devices

الاختبار على أجهزة متعددة

يسمح Flutter بتشغيل تطبيقك على أجهزة متعددة في نفس الوقت وهو مفيد لاختبار أحجام الشاشات والمنصات المختلفة.

التشغيل على أجهزة متعددة

# التشغيل على جميع الأجهزة المتصلة
flutter run -d all

# أو تشغيل نسخ منفصلة
# طرفية 1:
flutter run -d emulator-5554

# طرفية 2:
flutter run -d chrome

# طرفية 3:
flutter run -d "iPhone 15 Pro"
نصيحة: تشغيل flutter run -d all مفيد بشكل خاص لاختبار التخطيطات المتجاوبة. يمكنك رؤية كيف يبدو تطبيقك على هاتف Android و iPhone ومتصفح ويب في نفس الوقت وإعادة التحميل السريع تحدث جميعها في وقت واحد.

أفضل ممارسات تهيئة الأجهزة

اتبع هذه التوصيات لإعداد تطوير فعال:

  • استخدم المحاكيات للتكرارات السريعة: أسرع في البدء ولا تتطلب أجهزة حقيقية
  • اختبر على أجهزة حقيقية قبل الإصدار: المحاكيات لا تستطيع محاكاة الأداء الحقيقي وتفاعلات اللمس والسلوك الخاص بالأجهزة
  • حدّث صور المحاكي: استخدم أحدث مستويات API لاختبار أحدث ميزات نظام التشغيل
  • اختبر على أحجام شاشات متعددة: أنشئ AVDs بأحجام شاشات مختلفة (هاتف وتابلت وقابل للطي)
  • استخدم Chrome للنمذجة السريعة: بنيات الويب تبدأ أسرع وإعادة التحميل أكثر استجابة
  • حلل الأداء على أجهزة حقيقية: قس الأداء دائماً على أجهزة حقيقية في وضع الملف الشخصي

ملخص

في هذا الدرس تعلمت:

  • كيفية إعداد واستخدام محاكي Android مع AVD Manager
  • كيفية استخدام محاكي iOS مع Xcode وأوامر simctl
  • توصيل جهاز Android حقيقي عبر USB والتصحيح اللاسلكي
  • توصيل جهاز iOS حقيقي بحساب مطور Apple والتوفير
  • استخدام flutter devices لعرض جميع الأجهزة المتاحة
  • استخدام flutter run -d لاستهداف أجهزة محددة
  • تشغيل تطبيقات Flutter على Chrome لتطوير الويب
  • استكشاف مشاكل الاتصال الشائعة بشكل منهجي على Android و iOS
  • الاختبار على أجهزة متعددة للتحقق من التجاوب وعبر المنصات

تمرين عملي

أعد جهازين مستهدفين مختلفين على الأقل: (1) أنشئ محاكي Android بأحدث مستوى API باستخدام AVD Manager (أو افتح محاكي iOS إذا كنت على macOS)، (2) شغل تطبيق عداد Flutter الافتراضي على المحاكي، (3) فعّل Chrome كهدف ويب وشغل نفس التطبيق على Chrome، (4) تدرب على استخدام flutter devices و flutter run -d للتبديل بين الأهداف. إضافي: إذا كان لديك جهاز حقيقي وصّله وشغل التطبيق. جرب التشغيل على جميع الأجهزة في وقت واحد بأمر flutter run -d all.