Xamarin — پلتفرم مایکروسافت برای ایجاد برنامههای موبایل به زبان C# است که در سال 2011 معرفی شد. به گزارش Microsoft Xamarin Documentation, 2024، Xamarin امکان نوشتن برنامههای iOS، Android و Windows با پایگاه کد مشترک به C# و .NET را فراهم میکند و از Mono Runtime برای کامپایل به کد بومی استفاده میکند. از سال 2024، Xamarin.Forms با .NET MAUI جایگزین شده است.
نکات کلیدی
Xamarin — پلتفرمی مبتنی بر .NET و Mono است که امکان استفاده از C# برای ایجاد برنامههای موبایل چندسکویی را فراهم میکند. شرکت Xamarin در سال 2011 تأسیس شد و در سال 2016 توسط مایکروسافت به قیمت 400 میلیون دلار خریداری شد. پس از خرید، Xamarin بخشی از اکوسیستم Visual Studio و Azure شد.
قبل از خرید توسط مایکروسافت، Xamarin یک محصول تجاری با مجوز Enterprise بود. مایکروسافت آن را در Visual Studio Community رایگان کرد و همچنین کد منبع Mono Runtime و اتصالات SDK را باز کرد. این امر منجر به افزایش محبوبیت شد: تا سال 2020، Xamarin در 15% پروژههای چندسکویی، طبق گزارش SlashData، استفاده میشد.
ایده اصلی Xamarin — تقسیم کد به سه لایه: منطق کسبوکار مشترک (C#, .NET Standard)، پروژههای پلتفرمی (iOS, Android) و UI مشترک اختیاری از طریق Xamarin.Forms. چنین رویکردی امکان استفاده مجدد از تا 75% کد را با حفظ دسترسی بومی به API هر پلتفرم فراهم میکرد.
اولین نسخه Xamarin 1.0 در سال 2012 تنها با پشتیبانی iOS منتشر شد. در سال 2013 پشتیبانی Android اضافه شد. Xamarin.Forms — چارچوب UI اعلانی — در سال 2014 در کنفرانس Evolve معرفی شد. Xamarin 4.0 (2016) پشتیبانی watchOS و tvOS را اضافه کرد. Xamarin 5.0 (2019) استایلهای CSS و تم Material Design را معرفی کرد.
آخرین نسخه اصلی Xamarin.Forms 5.0 در سال 2021 منتشر شد. مایکروسافت اعلام کرد که Xamarin به حالت پشتیبانی (پایان عمر — 1 مه 2024) میرود و مهاجرت به .NET MAUI (Multi-platform App UI) که بخشی از .NET 6+ است را توصیه کرد. Xamarin.Forms 5.0 دیگر ویژگیهای جدید دریافت نمیکند، فقط اصلاحیههای بحرانی امنیتی دریافت میکند.
Xamarin.Forms — چارچوب UI است که رابط را از طریق مجموعهای یکپارچه از عناصر انتزاع میکند. نشانهگذاری XAML (ContentPage, StackLayout, Label, Button) از طریق رندررها به کنترلهای بومی هر پلتفرم نگاشت میشود. Label در iOS به UILabel و در Android به TextView ترجمه میشود. این رویکرد تا 95% کد UI مشترک را فراهم میکند.
Xamarin.Native (همچنین Xamarin.iOS و Xamarin.Android) — رویکردی بدون UI مشترک است. توسعهدهنده صفحات جداگانهای برای iOS (Interface Builder یا Storyboard) و Android (AXML) با استفاده از یک بکاند C# ایجاد میکند. این کار کنترل کامل بر ظاهر هر پلتفرم را فراهم میکند، اما حجم کد UI تکراری را به 50–60% افزایش میدهد.
طبق Microsoft Developer Survey 2023، 70% پروژههای Xamarin از Xamarin.Forms استفاده میکردند، 20% — Xamarin.Native با سرویسهای مشترک، 10% — رویکرد ترکیبی با رندررهای سفارشی برای بهینهسازیهای پلتفرمی.
معماری Xamarin از دو سطح تشکیل شده است. سطح پایین — Mono Runtime که کد میانی C# (IL) را روی پلتفرم اجرا میکند. سطح بالا — Managed Callable Wrappers (MCW) برای iOS و Android Bindings برای Android که دسترسی به APIهای بومی را از کد مدیریتشده C# فراهم میکنند.
Mono — پیادهسازی متنباز .NET Framework است. در Xamarin، Mono به عنوان محیط اجرای Common Language Runtime (CLR) کار میکند، اسمبلیهای C# را بارگذاری کرده و آنها را به کد ماشین کامپایل میکند. در iOS، Mono به صورت Ahead-of-Time (AOT) — به کد ماشین ARM64 کامپایل میشود، زیرا اپل کامپایل JIT را در برنامههای کاربر ممنوع میکند. در Android، Mono از کامپایل JIT با پروفایلسازی AOT استفاده میکند.
iOS Bindings (Xamarin.iOS) — لفافههای C# بر روی زمان اجرای Objective-C هستند. هر کلاس UIKit (UIView, UIViewController) توسط یک کلاس مدیریتشده در اسمبلی Xamarin.iOS.dll نمایش داده میشود. سلکتورهای Objective-C از طریق مکانیزم MessageUI فراخوانی میشوند. در Android، Xamarin.Android از Android Callable Wrappers (ACW) — پل JNI بین C# و Java/Kotlin استفاده میکند. کتابخانههای Kotlin از طریق Android Bindings Library لفافهگذاری میشوند.
XAML (eXtensible Application Markup Language) — زبان اعلانی برای توصیف UI است. در Xamarin.Forms، XAML ساختار صفحه را تعریف میکند: صفحات (ContentPage)، ظروف (StackLayout, Grid, FlexLayout) و عناصر (Label, Entry, Button, ListView). کد بکاند به C# رویدادها (Clicked, PropertyChanged) را پردازش کرده و اتصال داده (Binding, Data Binding) را مدیریت میکند.
الگوی MVVM — معماری توصیهشده برای Xamarin.Forms. Model حاوی دادهها است، ViewModel اینترفیس INotifyPropertyChanged و دستورات (ICommand) را پیادهسازی میکند، View (XAML) از طریق BindingContext متصل میشود. پیادهسازی ICommand از طریق RelayCommand یا Prism DelegateCommand آزمایش ViewModel را بدون وابستگیهای UI تضمین میکند. کتابخانه Prism.Forms سرویسهای NavigationService، DialogService و ماژولار بودن را فراهم میکند.
using Xamarin.Forms;
namespace XamarinApp
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var label = new Label
{
Text = "Hello, Xamarin!",
FontSize = 24,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
};
Content = new StackLayout
{
Children = { label }
};
}
}
}
زبان واحد C# — مزیت اصلی Xamarin است. توسعهدهندگان C# و .NET میتوانند بدون یادگیری Swift، Kotlin یا Objective-C برنامههای موبایل ایجاد کنند. منطق کسبوکار، کار با شبکه، پایگاههای داده (SQLite از طریق ORM)، رمزگذاری و لاگگیری یک بار نوشته شده و در تمام پلتفرمها مجدداً استفاده میشوند. این کار نگهداری و آزمایش کد را ساده میکند.
دسترسی به APIهای بومی — Xamarin دسترسی 100% به APIهای iOS (Cocoa Touch) و Android (Android SDK) را از طریق اتصالات فراهم میکند. با انتشار نسخه جدید iOS یا Android، مایکروسافت اتصالات بهروز شده را در عرض 24–48 ساعت منتشر میکند. برای اتصالات缺失 (کتابخانههای سفارشی Objective-C یا Kotlin)، Android Bindings Library یا iOS Binding Library به صورت دستی ایجاد میشوند.
یکپارچگی با اکوسیستم مایکروسافت — Xamarin از Visual Studio، Azure DevOps، App Center (CI/CD، آزمایش، نظارت) و Enterprise Mobility + Security (Intune, ADAL, MSAL) پشتیبانی میکند. App Center Analytics و Crashes دادهها را از برنامههای زنده جمعآوری میکنند. Visual Studio App Center ساخت، آزمایش روی دستگاه و انتشار در فروشگاههای برنامه را خودکار میکند.
معایب Xamarin شامل اندازه برنامه است — APK Xamarin.Forms با صفحه خالی 25–35 مگابایت وزن دارد در مقابل 5–8 مگابایت برای برنامه بومی Android. زمان کامپایل نیز بیشتر است: پروژه با اندازه متوسط 2–5 دقیقه در مقابل 30–60 ثانیه در Android Studio بومی ساخته میشود. Mono Runtime 15–20 مگابایت به فایل باینری نهایی اضافه میکند.
دومین عیب — تأخیر APIهای جدید. ویژگیهای جدید iOS/Android بلافاصله در توسعه بومی ظاهر میشوند، اما در Xamarin — 1–2 ماه پس از انتشار اتصالات. iOS 17 SDK (2023) توسط Xamarin 3 هفته پس از انتشار به طور کامل پشتیبانی شد. برای پروژههای فوری این میتواند حیاتی باشد. .NET MAUI این مشکل را با یکپارچگی مستقیم با .NET 8 حل میکند.
| معیار | Xamarin | .NET MAUI |
|---|---|---|
| پلتفرمها | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| چارچوب پایه | Mono + .NET Standard | .NET 6+ (BCL یکپارچه) |
| چارچوب UI | Xamarin.Forms | .NET MAUI (جانشین) |
| حالت پشتیبانی | پایان عمر از 1 مه 2024 | توسعه فعال مایکروسافت |
| Hot Reload | محدود | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) — تکامل Xamarin.Forms است که توسط مایکروسافت در سال 2022 همراه با .NET 6 منتشر شد. MAUI iOS، Android، Windows و macOS را در یک پروژه واحد بدون پروژههای جداگانه برای هر پلتفرم ترکیب میکند. برخلاف Xamarin.Forms، MAUI از .NET 6+ BCL استفاده میکند، نه Mono و .NET Standard.
مایکروسافت ابزار مهاجرت — .NET Upgrade Assistant برای Visual Studio ارائه میدهد. این ابزار پروژه Xamarin.Forms را تحلیل کرده، فضایهای نام را جایگزین میکند (Xamarin.Forms.* -> Microsoft.Maui.*)، فایلهای .csproj را بهروز میکند (فرمت SDK-style) و تنظیمات Android و iOS را به یک پیکربندی واحد منتقل میکند. پس از مهاجرت، پروژه میتواند از تمام قابلیتهای جدید .NET 8 استفاده کند: Native AOT، CodeQL برای امنیت و عملکرد بهبود یافته ساخت.
تغییر کلیدی — پروژه واحد. اگر Xamarin.Forms به 3 پروژه جداگانه (iOS, Android, .NET Standard) نیاز داشت، .NET MAUI از یک پروژه با پوشههای Platforms/iOS، Platforms/Android، Platforms/Windows و Platforms/MacCatalyst استفاده میکند. هر پلتفرم از کد مشترک با دستورات شرطی پلتفرمی (#if ANDROID, #if IOS) کامپایل میشود.
برای پایگاههای کد موجود، .NET MAUI سازگاری معکوس 90% با Xamarin.Forms را حفظ میکند. سازگاری API شامل ContentView، ContentPage، Shell، NavigationPage، DependencyService و MessagingCenter است. تغییرات اصلی شامل Device.StartTimer (جایگزین شده با IDispatcher)، Platform API (منتقل شده به Microsoft.Maui.ApplicationModel) و رندررهای منسوخ (جایگزین شده با Handlers) است.
فرآیند مهاجرت شامل پنج مرحله است. اول — بهروزرسانی Xamarin.Forms به آخرین نسخه 5.0. دوم — جایگزینی .NET Standard 2.0 با .NET 6 یا 8. سوم — اجرای Upgrade Assistant برای تبدیل خودکار پروژه. چهارم — اصلاح کد پلتفرمی در پوشههای Platforms. پنجم — آزمایش، به ویژه رندررهای سفارشی و سرویسهای پلتفرمی.
سوالات متداول
Xamarin — پلتفرم موبایل مایکروسافت برای توسعه با C# تحت iOS، Android و Windows است. این پلتفرم از Mono Runtime برای کامپایل کد مشترک استفاده میکند و دو رویکرد ارائه میدهد: Xamarin.Forms (UI یکپارچه از طریق XAML) و Xamarin.Native (صفحات بومی پلتفرم). از سال 2024، Xamarin در حالت پشتیبانی قرار دارد.
Xamarin از C# و .NET استفاده میکند، از طریق کنترلهای بومی (UIKit, View) رندر میکند، اما از طریق اتصالات. Flutter از Dart و موتور رندرینگ خود (Impeller) استفاده میکند و به کامپوننتهای UI بومی وابسته نیست. Flutter ظاهر یکپارچه در همه پلتفرمها را فراهم میکند، Xamarin — ظاهر بومی هر سیستمعامل. Flutter توسط Google پشتیبانی میشود و 46% سهم دارد در مقابل 15% برای Xamarin.
خیر. مایکروسافت پشتیبانی Xamarin را در 1 مه 2024 متوقف کرد. تمام پروژههای جدید باید روی .NET MAUI — جانشین آن که در .NET 8 تعبیه شده و همراه با پلتفرم .NET بهروزرسانی دریافت میکند — راهاندازی شوند. برای پروژههای موجود روی Xamarin.Forms مهاجرت در عرض 12–18 ماه توصیه میشود.
تفاوت برای برنامههای معمولی ناچیز است. Xamarin.Forms 5–10% سربار رندرینگ به دلیل لفافههای Managed-Wrapper-Native اضافه میکند. مشکلات در لیستهای سنگین (ListView در مقابل RecyclerView) و انیمیشنها (با ابزارهای Xamarin.Forms بدون APIهای پلتفرمی) ایجاد میشوند. توصیه میشود از CollectionView (جایگزین ListView) و انیمیشنهای بومی استفاده کنید.
بله، از طریق Android Bindings Library. این نوع پروژه .NET بایگانی AAR یا JAR را با تولید خودکار کلاسها و متدها به اتصالات C# لفافهگذاری میکند. برای کتابخانههای Kotlin، پردازشگرهای اضافی برای کروتینها و کلاسهای بسته (sealed class) مورد نیاز است که از طریق Metadata.xml در Binding Library پیکربندی میشوند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید