Xamarin — bu 2011-yilda e'lon qilingan, C# tilida mobil ilovalar yaratish uchun Microsoft platformasidir. Microsoft Xamarin Documentation, 2024 ga ko'ra, Xamarin iOS, Android va Windows uchun C# va .NET da umumiy kod bazasi bilan ilovalar yozish imkonini beradi, Mono Runtime yordamida mahalliy kodga kompilyatsiya qiladi. 2024-yildan boshlab Xamarin.Forms .NET MAUI bilan almashtirildi.
Asosiy fikrlar
Xamarin — .NET va Mono ga asoslangan, ko'p platformali mobil ilovalar yaratish uchun C# dan foydalanish imkonini beradigan platformadir. Xamarin kompaniyasi 2011-yilda tashkil etilgan va 2016-yilda Microsoft tomonidan 400 million dollarga sotib olingan. Sotib olingandan so'ng, Xamarin Visual Studio va Azure ekotizimining bir qismiga aylandi.
Microsoft tomonidan sotib olinishidan oldin Xamarin Enterprise litsenziyasi bilan tijorat mahsuloti edi. Microsoft uni Visual Studio Community tarkibida bepul qildi, shuningdek Mono Runtime va SDK bog'lamlarining manba kodini ochdi. Bu mashhurlikning o'sishiga olib keldi: 2020-yilga kelib Xamarin SlashData hisobotiga ko'ra ko'p platformali loyihalarning 15 foizida ishlatilgan.
Xamarin ning asosiy g'oyasi — kodni uch qatlamga bo'lish: umumiy biznes mantig'i (C#, .NET Standard), platforma loyihalari (iOS, Android) va Xamarin.Forms orqali ixtiyoriy umumiy UI. Bunday yondashuv har bir platformaning API siga mahalliy kirishni saqlagan holda kodning 75 foizigacha qayta ishlatilishiga imkon berdi.
Xamarin 1.0 ning birinchi versiyasi 2012-yilda faqat iOS qo'llab-quvvatlashi bilan chiqarildi. 2013-yilda Android qo'llab-quvvatlashi qo'shildi. Xamarin.Forms — deklarativ UI freymvorki — 2014-yilda Evolve konferensiyasida taqdim etildi. Xamarin 4.0 (2016) watchOS va tvOS qo'llab-quvvatlanishini qo'shdi. Xamarin 5.0 (2019) CSS uslublari va Material Design mavzusini joriy etdi.
Xamarin.Forms 5.0 ning oxirgi asosiy versiyasi 2021-yilda chiqarildi. Microsoft Xamarin qo'llab-quvvatlash rejimiga o'tayotganini (hayotining oxiri — 2024-yil 1-may) e'lon qildi va .NET 6+ tarkibiga kiruvchi .NET MAUI (Multi-platform App UI) ga o'tishni tavsiya qildi. Xamarin.Forms 5.0 endi yangi funksiyalarni olmaydi, faqat muhim xavfsizlik tuzatishlarini oladi.
Xamarin.Forms — interfeysni yagona elementlar to'plami orqali abstraktsiyalovchi UI freymvorkidir. XAML belgilari (ContentPage, StackLayout, Label, Button) rendererlar orqali har bir platformaning mahalliy boshqaruvlariga xaritalanadi. Label iOS da UILabel ga, Android da esa TextView ga tarjima qilinadi. Bu yondashuv umumiy UI kodining 95 foizigacha ta'minlaydi.
Xamarin.Native (shuningdek Xamarin.iOS va Xamarin.Android) — umumiy UI bo'lmagan yondashuvdir. Dasturchi bitta C# backendidan foydalanib, iOS (Interface Builder yoki Storyboard) va Android (AXML) uchun alohida ekranlar yaratadi. Bu har bir platformaning tashqi ko'rinishi ustidan to'liq nazorat beradi, ammo UI kodining takrorlanish hajmini 50–60 foizgacha oshiradi.
Microsoft Developer Survey 2023 ga ko'ra, Xamarindagi loyihalarning 70 foizi Xamarin.Forms, 20 foizi umumiy xizmatlar bilan Xamarin.Native, 10 foizi esa platforma optimallashtirishlari uchun maxsus rendererlar bilan gibrid yondashuvdan foydalangan.
Xamarin arxitekturasi ikki darajadan iborat. Pastki daraja — platformada C# IL (Intermediate Language) ni bajaruvchi Mono Runtime. Yuqori daraja — iOS uchun Managed Callable Wrappers (MCW) va Android uchun Android Bindings, boshqariladigan C# kodidan mahalliy API larga kirishni ta'minlaydi.
Mono — ochiq manba kodli .NET Framework amalga oshirilishidir. Xamarinda Mono Common Language Runtime (CLR) bajarish muhiti sifatida ishlaydi, C# yig'imlarini yuklaydi va ularni mashina kodiga kompilyatsiya qiladi. iOS da Mono Ahead-of-Time (AOT) — ARM64 mashina kodiga kompilyatsiya qiladi, chunki Apple foydalanuvchi ilovalarida JIT kompilyatsiyasini taqiqlaydi. Android da Mono AOT profillash bilan JIT kompilyatsiyasidan foydalanadi.
iOS Bindings (Xamarin.iOS) — Objective-C ish vaqti ustidagi C# o'ramlaridir. Har bir UIKit klassi (UIView, UIViewController) Xamarin.iOS.dll yig'imida boshqariladigan sinf bilan ifodalanadi. Objective-C selektorlari MessageUI mexanizmi orqali chaqiriladi. Android da Xamarin.Android Android Callable Wrappers (ACW) — C# va Java/Kotlin o'rtasidagi JNI ko'prigidan foydalanadi. Kotlin kutubxonalari Android Bindings Library orqali o'raladi.
XAML (eXtensible Application Markup Language) — UI ni tavsiflash uchun deklarativ til. Xamarin.Forms da XAML ekran tuzilishini belgilaydi: sahifalar (ContentPage), konteynerlar (StackLayout, Grid, FlexLayout) va elementlar (Label, Entry, Button, ListView). C# dagi backend kodi hodisalarni (Clicked, PropertyChanged) boshqaradi va ma'lumotlar bog'lanishini (Binding, Data Binding) tartibga soladi.
MVVM namunasi — Xamarin.Forms uchun tavsiya etilgan arxitektura. Model ma'lumotlarni o'z ichiga oladi, ViewModel INotifyPropertyChanged va buyruqlarni (ICommand) amalga oshiradi, View (XAML) BindingContext orqali bog'lanadi. ICommand ni RelayCommand yoki Prism DelegateCommand orqali amalga oshirish ViewModel ni UI bog'liqliklarisiz sinovdan o'tkazishni ta'minlaydi. Prism.Forms kutubxonasi NavigationService, DialogService va modullikni ta'minlaydi.
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 }
};
}
}
}
Yagona C# tili — Xamarinning asosiy afzalligi. C# va .NET dasturchilari Swift, Kotlin yoki Objective-C ni o'rganmasdan mobil ilovalar yaratishi mumkin. Biznes mantig'i, tarmoq bilan ishlash, ma'lumotlar bazalari (ORM orqali SQLite), shifrlash va jurnallashtirish bir marta yoziladi va barcha platformalarda qayta ishlatiladi. Bu kodni saqlash va sinovdan o'tkazishni soddalashtiradi.
Mahalliy API larga kirish — Xamarin iOS (Cocoa Touch) va Android (Android SDK) API lariga 100 foiz kirishni bog'lamlar orqali ta'minlaydi. iOS yoki Android ning yangi versiyasi chiqqanda, Microsoft 24–48 soat ichida yangilangan bog'lamlarni chiqaradi. Yo'qolgan bog'lamlar (maxsus Objective-C yoki Kotlin kutubxonalari) uchun qo'lda Android Bindings Library yoki iOS Binding Library yaratiladi.
Microsoft ekotizimi bilan integratsiya — Xamarin Visual Studio, Azure DevOps, App Center (CI/CD, sinov, monitoring) va Enterprise Mobility + Security (Intune, ADAL, MSAL) ni qo'llab-quvvatlaydi. App Center Analytics va Crashes jonli ilovalardan ma'lumot to'playdi. Visual Studio App Center qurish, qurilmada sinov va ilovalar do'konlariga nashr qilishni avtomatlashtiradi.
Kamchiliklari — Xamarinning kamchiliklariga ilova hajmi kiradi: bo'sh ekranli Xamarin.Forms APK 25–35 MB, mahalliy Android ilovasida esa 5–8 MB. Kompilyatsiya vaqti ham yuqori: o'rtacha hajmdagi loyiha mahalliy Android Studio da 30–60 soniyaga nisbatan 2–5 daqiqada yig'iladi. Mono Runtime yakuniy ikkilik faylga 15–20 MB qo'shadi.
Ikkinchi kamchilik — yangi API larning kechikishi. Yangi iOS/Android xususiyatlari mahalliy ishlanmada darhol, Xamarinda esa bog'lamlar chiqqandan 1–2 oy keyin paydo bo'ladi. iOS 17 SDK (2023) Xamarin tomonidan chiqarilishdan 3 hafta keyin to'liq qo'llab-quvvatlandi. Shoshilinch loyihalar uchun bu muhim bo'lishi mumkin. .NET MAUI bu muammoni .NET 8 bilan to'g'ridan-to'g'ri integratsiya hisobiga hal qiladi.
| Mezon | Xamarin | .NET MAUI |
|---|---|---|
| Platformalar | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Asosiy freymvork | Mono + .NET Standard | .NET 6+ (yagona BCL) |
| UI freymvorki | Xamarin.Forms | .NET MAUI (voris) |
| Qo'llab-quvvatlash rejimi | 2024-yil 1-maydan hayot oxiri | Microsoft faol rivojlanishi |
| Hot Reload | Cheklangan | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) — Microsoft tomonidan 2022-yilda .NET 6 bilan birga chiqarilgan Xamarin.Forms evolyutsiyasidir. MAUI iOS, Android, Windows va macOS ni har bir platforma uchun alohida loyihalarsiz yagona loyihada birlashtiradi. Xamarin.Forms dan farqli o'laroq, MAUI Mono va .NET Standard emas, balki .NET 6+ BCL dan foydalanadi.
Microsoft migratsiya vositasini — Visual Studio uchun .NET Upgrade Assistant ni taqdim etadi. U Xamarin.Forms loyihasini tahlil qiladi, nom fazolarini almashtiradi (Xamarin.Forms.* -> Microsoft.Maui.*), .csproj fayllarini yangilaydi (SDK-stili format) va Android va iOS sozlamalarini yagona konfiguratsiyaga migratsiya qiladi. Migratsiyadan so'ng loyiha .NET 8 ning barcha yangi imkoniyatlaridan foydalanishi mumkin: Native AOT, xavfsizlik uchun CodeQL va yaxshilangan qurish samaradorligi.
Asosiy o'zgarish — yagona loyiha. Agar Xamarin.Forms 3 alohida loyihani (iOS, Android, .NET Standard) talab qilgan bo'lsa, .NET MAUI Platforms/iOS, Platforms/Android, Platforms/Windows va Platforms/MacCatalyst papkalari bo'lgan bitta loyihadan foydalanadi. Har bir platforma platforma shartli direktivalari bilan (#if ANDROID, #if IOS) umumiy koddan kompilyatsiya qilinadi.
Mavjud kod bazalari uchun .NET MAUI Xamarin.Forms bilan 90 foiz orqaga moslikni ta'minlaydi. API mosligi ContentView, ContentPage, Shell, NavigationPage, DependencyService va MessagingCenter ni qamrab oladi. Asosiy o'zgarishlar Device.StartTimer (IDispatcher bilan almashtirilgan), Platform API (Microsoft.Maui.ApplicationModel ga ko'chirilgan) va eskirgan rendererlarga (Handlers bilan almashtirilgan) ta'sir ko'rsatdi.
Migratsiya jarayoni besh bosqichni o'z ichiga oladi. Birinchi — Xamarin.Forms ni eng so'nggi 5.0 versiyasiga yangilash. Ikkinchi — .NET Standard 2.0 ni .NET 6 yoki 8 bilan almashtirish. Uchinchi — loyihani avtomatik konvertatsiya qilish uchun Upgrade Assistant ni ishga tushirish. To'rtinchi — Platforms papkalarida platforma kodini tuzatish. Beshinchi — ayniqsa maxsus rendererlar va platforma xizmatlarini sinovdan o'tkazish.
Tez-tez beriladigan savollar
Xamarin — iOS, Android va Windows uchun C# da ishlab chiqish uchun Microsoft mobil platformasi. U umumiy kodni kompilyatsiya qilish uchun Mono Runtime dan foydalanadi va ikkita yondashuvni taklif qiladi: Xamarin.Forms (XAML orqali yagona UI) va Xamarin.Native (platformaning mahalliy ekranlari). 2024-yildan boshlab Xamarin qo'llab-quvvatlash rejimida.
Xamarin C# va .NET dan foydalanadi, mahalliy boshqaruvlar (UIKit, View) orqali renderlaydi, ammo bog'lamlar orqali. Flutter Dart va o'z renderlash dvigatelidan (Impeller) foydalanadi, mahalliy UI komponentlariga tayanmaydi. Flutter barcha platformalarda yagona tashqi ko'rinishni ta'minlaydi, Xamarin — har bir OT ning mahalliy ko'rinishini. Flutter Google tomonidan qo'llab-quvvatlanadi va Xamarinning 15 foiziga nisbatan 46 foiz ulushga ega.
Yo'q. Microsoft 2024-yil 1-mayda Xamarinni qo'llab-quvvatlashni to'xtatdi. Barcha yangi loyihalar .NET 8 ga o'rnatilgan va .NET platformasi bilan birga yangilanishlarni oladigan vorisi .NET MAUI da ishga tushirilishi kerak. Mavjud Xamarin.Forms loyihalari uchun 12–18 oy ichida migratsiya qilish tavsiya etiladi.
Oddiy ilovalar uchun farq ahamiyatsiz. Xamarin.Forms Managed-Wrapper-Native o'ramlari tufayli renderlashga 5–10 foiz qo'shimcha yuk qo'shadi. Muammolar og'ir ro'yxatlarda (ListView ga qarshi RecyclerView) va animatsiyalarda (platforma API larisiz Xamarin.Forms vositalari bilan) yuzaga keladi. CollectionView (ListView ni almashtirdi) va mahalliy animatsiyalardan foydalanish tavsiya etiladi.
Ha, Android Bindings Library orqali. Ushbu .NET loyiha turi AAR yoki JAR arxivini sinflar va metodlarning avtomatik yaratilishi bilan C# bog'lamlariga o'raydi. Kotlin kutubxonalari uchun Binding Library da Metadata.xml orqali sozlanadigan korutinlar va sealed class uchun qo'shimcha ishlovchilar talab qilinadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.