التطوير عبر المنصات هو أحد أكثر مجالات الهندسة المحمولة ديناميكية. وفقًا لـ Statista (2025)، 42% من مطوري التطبيقات المحمولة يستخدمون Flutter أو React Native في مشاريعهم. قنوات المنصة، الجسور والوحدات الأصلية هي أساس الهندسة المعمارية عبر المنصات.
النقاط الرئيسية
Flutter هو إطار Google لإنشاء تطبيقات أصلية من قاعدة كود Dart واحدة. للتفاعل مع كود المنصة (Kotlin، Swift)، يستخدم Flutter Platform Channel. إنه جسر يتصل من خلاله كود Dart بالدوال الأصلية ويحصل على النتيجة. تطوير التطبيقات المحمولة عبر المنصات باستخدام Flutter هو أسرع قطاع نموًا في التطوير المحمول في 2025–2026.
Method Channel هو قناة الاتصال الرئيسية Flutter <-> الأصلي. في جانب Dart: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). يتم ترميز الرسالة في StandardMethodCodec (ثنائي). في الجانب الأصلي، يتم تسجيل MethodChannel ومعالجة الاستدعاء. MethodChannel غير متزامن — يتم إرجاع النتيجة عبر Future. البديل: EventChannel لتدفق الأحداث.
BasicMessageChannel هو قناة ذات مستوى أدنى لإرسال السلاسل/البايتات بدون هيكل "طريقة-وسيطات". يُستخدم للبروتوكولات المخصصة. تمر كل API لقنوات المنصة عبر Flutter Engine، الذي يقوم بتسلسل/إلغاء تسلسل الرسائل.
dart:ffi (Foreign Function Interface) — استدعاء مباشر لدوال C من Dart بدون قنوات منصة. FFI أسرع من Method Channel (بدون حمل إضافي للتسلسل). يُستخدم للعمليات عالية الأداء: معالجة الصوت، التشفير، محركات الرسوميات. Skia هو محرك عرض Flutter (رسوميات 2D). Impeller هو محرك عرض Flutter الجديد الذي يحل محل Skia. Impeller يترجم التظليلات مسبقًا، مما يزيل التقطيع (تأخير الإطارات) في التشغيلات الأولى. في IT Sectr انتقلنا إلى Impeller في 2025 — الفرق في سلاسة الحركات ملحوظ فورًا.
React Native هو إطار Meta لتطوير التطبيقات المحمولة عبر المنصات بلغة JavaScript/TypeScript. React Native يعرض المكونات في عناصر واجهة مستخدم أصلية. تطورت الهندسة المعمارية: Bridge القديم → Fabric الجديد مع JSI.
Bridge هو الهندسة القديمة لـ React Native. يقوم مؤشر JS بتسلسل الرسائل إلى JSON وإرسالها عبر قائمة انتظار غير متزامنة إلى المؤشر الأصلي. هذا يخلق تأخيرات (ذهاب وإياب الجسر ~1 مللي ثانية). Fabric هو الهندسة الجديدة حيث يتواصل مؤشر JS ومؤشر واجهة المستخدم الأصلي بشكل متزامن عبر JSI (واجهة JavaScript). Fabric يحقن العرض الأصلي مباشرة، بدون جسر. Fabric هو علامة فارقة رئيسية في التطوير عبر المنصات، حيث يسرع العرض حتى مرتين.
JSI (واجهة JavaScript) هي API بلغة C++ تسمح لـ JavaScript باستدعاء الدوال الأصلية ومشاركة الذاكرة مباشرة. استبدلت JSI تسلسل JSON في Bridge. الهندسة الجديدة القائمة على JSI هي إنجاز حاسم في التطوير عبر المنصات، حيث تحدد أداء التطبيقات المحمولة. Turbo Module هو طريقة جديدة لكتابة الوحدات الأصلية لـ React Native. على عكس الوحدات الأصلية القديمة، يتم تحميل Turbo Module بشكل كسول ويستخدم JSI.
Hermes هو محرك JavaScript من Meta، محسّن لـ React Native. Hermes يترجم كود JS إلى بايت كود في وقت البناء، مما يسرع بدء تشغيل التطبيقات المحمولة ويقلل استهلاك الذاكرة في التطوير عبر المنصات. Codegen هو مولد كود أصلي بناءً على أنواع TypeScript. يقوم Codegen تلقائيًا بإنشاء وحدات أصلية وروابط JSI، مما يقلل العمل اليدوي.
| المعامل | Flutter | React Native | KMP |
|---|---|---|---|
| اللغة | Dart | JavaScript/TypeScript | Kotlin |
| الهندسة | Skia/Impeller (عرض مخصص) | Fabric + JSI (واجهة مستخدم أصلية) | SDK أصلي (كل وحدة) |
| الجسر الأصلي | MethodChannel (Dart ↔ أصلي) | JSI (JS ↔ C++ ↔ أصلي) | expect/actual (Kotlin ↔ أصلي) |
| واجهة المستخدم | مخصصة (Skia/Impeller) | مكونات أصلية (UIKit/Android Views) | واجهة مستخدم أصلية (Jetpack Compose، SwiftUI) |
| محرك العرض | Skia أو Impeller | أصلي (UIView/View) | أصلي |
Flutter يعرض كل شيء بنفسه عبر Skia/Impeller — وهذا يعطي واجهة مستخدم موحدة على كلتا المنصتين. React Native يستخدم مكونات واجهة مستخدم أصلية — تبدو كتطبيق أصلي. KMP لا يتعامل مع واجهة المستخدم — يشارك فقط منطق الأعمال، تبقى واجهة المستخدم أصلية. يعتمد الاختيار على الأولوية: واجهة مستخدم موحدة (Flutter) أو أقصى أصالة (React Native/KMP).
Kotlin Multiplatform (KMP) هي تقنية JetBrains للكود المشترك بين Android وiOS. على عكس Flutter وReact Native، KMP هو نهج بديل للتطوير عبر المنصات: لا يستبدل واجهة المستخدم، بل يشارك منطق الأعمال، طلبات الشبكة، نماذج البيانات والمستودعات. تبقى واجهة المستخدم أصلية: Jetpack Compose لـ Android، SwiftUI لـ iOS.
expect — إعلان دالة أو فئة في الوحدة المشتركة (commonMain) التي لها تنفيذ خاص بالمنصة. التطوير عبر المنصات مع KMP يستخدم expect/actual: actual هو التنفيذ الملموس لكل منصة (androidMain، iosMain). مثال: expect fun getDeviceId(): String — actual على Android يستخدم Settings.Secure، على iOS — UIDevice.current.identifierForVendor.
Kotlin/Native — مترجم Kotlin إلى ثنائي أصلي (إطار iOS). يسمح بتشغيل كود Kotlin على iOS بدون JVM. يستخدم Kotlin/Native LLVM للترجمة، مما يوفر أداءً قريبًا من Swift. Kotlin/JS — ترجمة Kotlin إلى JavaScript لمشاريع الويب وReact Native.
أدوات البناء لتطوير التطبيقات المحمولة عبر المنصات — الجسر بين الكود والثنائي النهائي. Gradle KTS يدير جزء Android، CocoaPods Plugin يدير تبعيات iOS لـ KMP، XCFramework يدير توزيع المكتبات الأصلية.
Gradle KTS — تكوين Gradle باستخدام Kotlin DSL بدلاً من Groovy. KTS يدعم الإكمال التلقائي في Android Studio، التحقق من الأنواع وأمان إعادة الهيكلة. مثال: plugins { id("com.android.application") } بدلاً من apply plugin: 'com.android.application'. موصى به لجميع المشاريع الجديدة.
CocoaPods Plugin — إضافة Gradle لـ KMP تنشر الوحدة المشتركة كـ pod في CocoaPods. مطور iOS يضيفها عبر Podfile. XCFramework — تنسيق توزيع المكتبات الثنائية من Apple. يحتوي XCFramework على ثنائيات لعدة معماريات (arm64، x86_64) ومنصات (iOS، macOS، watchOS). في KMP يتم تصدير الوحدة المشتركة كـ XCFramework لـ iOS.
الأسئلة الشائعة
Flutter يقدم أداءً أفضل (Skia/Impeller)، قاعدة كود واجهة مستخدم واحدة واستقرار عالٍ في التطوير عبر المنصات. React Native — مجتمع ضخم، انتقال سهل من تطوير الويب ومرونة عبر JSI. توصي IT Sectr بـ Flutter للمشاريع التي تركز على واجهة المستخدم، وReact Native إذا كان المشروع يتطلب كودًا أصليًا متكررًا.
Flutter يرسل رسالة عبر MethodChannel في جانب Dart. يتم ترميز الرسالة إلى تنسيق ثنائي وإرسالها إلى الجانب الأصلي (Kotlin/Swift)، حيث تتم معالجتها وإرجاع النتيجة. جميع الاتصالات في تطوير التطبيقات المحمولة غير متزامنة.
expect هو إعلان دالة أو فئة في الكود المشترك الذي له تنفيذ خاص بالمنصة. actual هو التنفيذ الملموس لكل منصة (Android/iOS). هذه هي آلية KMP للترجمة الشرطية بدون معالج مسبق.
Bridge هي الهندسة القديمة حيث يتم تسلسل الرسائل إلى JSON ونقلها بشكل غير متزامن عبر قائمة انتظار. Fabric هي الهندسة الجديدة مع استدعاء متزامن للدوال الأصلية عبر JSI، مما يزيل التأخيرات ويحسن أداء التطبيقات المحمولة.
Hermes هو محرك JavaScript من Meta، محسّن لـ React Native. يترجم JS إلى بايت كود في وقت البناء، مما يسرع بدء تشغيل التطبيق بمقدار 2–3 مرات ويقلل استهلاك الذاكرة.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.