توسعه بینپلتفرمی یکی از پویاترین حوزههای مهندسی موبایل است. طبق Statista (2025)، 42٪ از توسعهدهندگان موبایل از Flutter یا React Native در پروژههای خود استفاده میکنند. کانالهای پلتفرم، پلها و ماژولهای بومی اساس معماری بینپلتفرمی هستند.
نکات کلیدی
Flutter فریمورک گوگل برای ایجاد اپلیکیشنهای بومی از یک پایگاه کد 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 Platform Channel از Flutter Engine عبور میکند که پیامها را سریالایز/دیسریالایز میکند.
dart:ffi (Foreign Function Interface) — فراخوانی مستقیم توابع C از Dart بدون کانالهای پلتفرم. FFI سریعتر از Method Channel است (0 سربار سریالایز). برای عملیاتهای سنگین استفاده میشود: پردازش صدا، رمزنگاری، موتورهای گرافیکی. Skia موتور رندر Flutter است (گرافیک 2D). Impeller موتور رندر جدید Flutter است که جایگزین Skia میشود. Impeller شیدرها را از پیش کامپایل میکند (Ahead-of-Time)، که jank (لرزش فریم) را در راهاندازیهای اول حذف میکند. در IT Sectr ما در سال 2025 به Impeller مهاجرت کردیم — تفاوت در نرمی انیمیشنها بلافاصله قابل مشاهده است.
React Native فریمورک متا برای توسعه اپلیکیشن موبایل بینپلتفرمی در JavaScript/TypeScript است. React Native کامپوننتها را به عناصر UI بومی رندر میکند. معماری تکامل یافته است: Bridge قدیمی → Fabric جدید با JSI.
Bridge معماری قدیمی React Native است. رشته JS پیامها را به JSON سریالایز کرده و از طریق صف ناهمگام به رشته بومی میفرستد. این باعث تأخیر میشود (round-trip پل ~1 میلیثانیه). Fabric معماری جدیدی است که در آن رشتههای JS و UI بومی به صورت همگام از طریق JSI (JavaScript Interface) ارتباط برقرار میکنند. Fabric ویوهای بومی را مستقیماً و بدون پل تزریق میکند. Fabric نقطه عطفی در توسعه بینپلتفرمی است و رندر را تا 2 برابر加速 میکند.
JSI (JavaScript Interface) یک API C++ است که به JavaScript اجازه میدهد مستقیماً توابع بومی را فراخوانی کرده و حافظه را به اشتراک بگذارد. JSI جایگزین سریالایز JSON در Bridge شد. معماری جدید مبتنی بر JSI دستاورد مهمی در توسعه بینپلتفرمی است که عملکرد اپلیکیشنهای موبایل را تعیین میکند. Turbo Module روش جدیدی برای نوشتن ماژولهای بومی برای React Native است. برخلاف Native Modules قدیمی، Turbo Module به صورت تنبل بارگذاری میشود و از JSI استفاده میکند.
Hermes یک موتور JavaScript از متا است که برای React Native بهینه شده است. Hermes کد JS را در زمان ساخت به بایتکد کامپایل میکند، راهاندازی اپلیکیشن موبایل را تسریع کرده و مصرف حافظه را در توسعه بینپلتفرمی کاهش میدهد. Codegen یک تولیدکننده کد بومی بر اساس انواع TypeScript است. Codegen به طور خودکار ماژولهای بومی و اتصالات JSI را ایجاد میکند و کار دستی را کاهش میدهد.
| پارامتر | Flutter | React Native | KMP |
|---|---|---|---|
| زبان | Dart | JavaScript/TypeScript | Kotlin |
| معماری | Skia/Impeller (رندر سفارشی) | Fabric + JSI (UI بومی) | SDK بومی (هر ماژول) |
| پل بومی | MethodChannel (Dart ↔ بومی) | JSI (JS ↔ C++ ↔ بومی) | expect/actual (Kotlin ↔ بومی) |
| UI | سفارشی (Skia/Impeller) | کامپوننتهای بومی (UIKit/Android Views) | UI بومی (Jetpack Compose, SwiftUI) |
| موتور رندر | Skia یا Impeller | بومی (UIView/View) | بومی |
Flutter همه چیز را خود از طریق Skia/Impeller رندر میکند — این یک UI یکپارچه در هر دو پلتفرم میدهد. React Native از کامپوننتهای UI بومی استفاده میکند — شبیه اپلیکیشن بومی به نظر میرسد. KMP UI را مدیریت نمیکند — فقط منطق کسبوکار را به اشتراک میگذارد، UI بومی باقی میماند. انتخاب به اولویت بستگی دارد: UI یکپارچه (Flutter) یا حداکثر بومیبودن (React Native/KMP).
Kotlin Multiplatform (KMP) فناوری JetBrains برای کد مشترک بین Android و iOS است. برخلاف Flutter و React Native، KMP رویکردی جایگزین برای توسعه بینپلتفرمی است: UI را جایگزین نمیکند، بلکه منطق کسبوکار، درخواستهای شبکه، مدلهای داده و مخازن را به اشتراک میگذارد. UI بومی میماند: 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 — فرمت توزیع کتابخانههای باینری اپل. XCFramework حاوی باینریهایی برای چندین معماری (arm64, x86_64) و پلتفرم (iOS, macOS, watchOS) است. در KMP ماژول مشترک به عنوان XCFramework برای iOS صادر میشود.
سوالات متداول
Flutter عملکرد بهتر (Skia/Impeller)، پایگاه کد UI واحد و پایداری بالا در توسعه بینپلتفرمی ارائه میدهد. React Native — جامعه بزرگ، انتقال آسان از توسعه وب و انعطافپذیری از طریق JSI. IT Sectr برای پروژههای متمرکز بر UI، Flutter و اگر پروژه به کد بومی مکرر نیاز دارد، React Native را توصیه میکند.
Flutter پیامی را از طریق MethodChannel در سمت Dart ارسال میکند. پیام به فرمت باینری کدگذاری شده و به سمت بومی (Kotlin/Swift) منتقل میشود، جایی که پردازش شده و نتیجه را برمیگرداند. تمام ارتباطات در توسعه اپلیکیشن موبایل ناهمگام است.
expect اعلان یک تابع یا کلاس در کد مشترک است که پیادهسازی پلتفرمی دارد. actual پیادهسازی مشخص برای هر پلتفرم (Android/iOS) است. این مکانیسم KMP برای کامپایل شرطی بدون پیشپردازنده است.
Bridge معماری قدیمی است که در آن پیامها به JSON سریالایز شده و به صورت ناهمگام از طریق صف منتقل میشوند. Fabric معماری جدید با فراخوانی همگام توابع بومی از طریق JSI است که تأخیرها را حذف کرده و عملکرد اپلیکیشن موبایل را بهبود میبخشد.
Hermes یک موتور JavaScript از متا است که برای React Native بهینه شده است. JS را در زمان ساخت به بایتکد کامپایل میکند، راهاندازی اپلیکیشن را 2–3 برابر سریعتر کرده و مصرف حافظه را کاهش میدهد.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.