Bosh sahifa Wiki Xamarin

Xamarin

Xamarin — C# va .NET yordamida Android hamda iOS uchun native application yaratishga mo‘ljallangan cross-platform development texnologiyasi. U umumiy business logicni bir codebase’da saqlab, platforma APIlariga C# bindinglar orqali murojaat qilish imkonini bergan. Xamarin tarixan Xamarin.Android, Xamarin.iOS va Xamarin.Forms qismlaridan tashkil topgan.

Zamonaviy .NET ekotizimida Xamarin yondashuvining davomchisi sifatida .NET MAUI rivojlangan. Shunga qaramay, Xamarin tushunchasi ko‘plab mavjud mobil loyihalarda uchraydi.

C# va .NET

Application logikasi C# tilida yoziladi.

.NET:

imkoniyatlarini beradi.

Platforma-specific APIlar C# classlari orqali ochiladi.

Xamarin.Android

Android SDK APIlarini .NET binding orqali taqdim etadi.

Activity, Service, Intent, View va boshqa platforma tushunchalari saqlanadi.

Application Android package sifatida build qilinadi.

Developer manifest, permission va lifecycle’ni baribir bilishi kerak.

Xamarin.iOS

iOS UIKit, Foundation va boshqa frameworklarini C# orqali ishlatadi.

Application Apple toolchain yordamida native packagega build qilinadi.

iOS code signing, provisioning va App Store talablaridan ozod bo‘lmaydi.

Build uchun macOS va Xcode kerak bo‘lishi mumkin.

Xamarin.Forms

Bir xil UI abstraction orqali Android va iOS screenlarini yaratishga mo‘ljallangan framework.

UI XAML yoki C# bilan yozilishi mumkin.

Framework componentni platformadagi native controlga aylantiradi.

Platforma farqlari renderer yoki effect orqali boshqarilgan.

XAML

Declarative UI markup:

<Label Text="UzbekDevs" />

Code-behind yoki ViewModel bilan bog‘lanadi.

Binding state va UI property orasida aloqa o‘rnatadi.

XAML compile vaqtida tekshirilishi va optimallashtirilishi mumkin.

Native UI

Xamarin.Forms odatda native platform controlidan foydalangan.

Shu sababli button va navigation platformaga mos behavior beradi.

Biroq bir xil abstraction barcha platforma featurelarini to‘liq qamramasligi mumkin.

Custom renderer kerak bo‘lgan.

Shared code

Umumiy qatlamda:

saqlanadi.

Camera, push va boshqa platforma-specific service interface orqali ajratiladi.

Dependency injection implementationni tanlaydi.

Binding

Native Java yoki Objective-C library C# binding project orqali ishlatilishi mumkin.

Binding metadata native type va methodlarni .NETga map qiladi.

Noto‘g‘ri ownership, callback yoki marshaling memory va crash muammosi yaratishi mumkin.

NuGet

.NET dependencylari NuGet package orqali boshqariladi.

Package mobile target framework va platformaga mos bo‘lishi kerak.

Eski Xamarin package zamonaviy SDK yoki AndroidX bilan mos kelmasligi mumkin.

Lock va central version management reproducibilityga yordam beradi.

Linking

Release build ishlatilmagan managed code’ni olib tashlashi mumkin.

Bu package hajmini kamaytiradi.

Reflection orqali topiladigan class linkerga ko‘rinmasa tasodifan o‘chirilishi mumkin.

Preserve attribute yoki descriptor ishlatiladi.

AOT va JIT

Platformaga qarab .NET code AOT yoki JIT bilan bajarilishi mumkin.

iOS dynamic code generationni cheklagani sabab AOT muhim.

Androidda boshqa compilation strategiyasi ishlatilishi mumkin.

Build va startup performance targetga bog‘liq.

Garbage collection

Managed objectlarni .NET garbage collector boshqaradi.

Native objectlar alohida reference counting yoki platforma lifecycle’iga ega bo‘lishi mumkin.

Managed wrapper mavjud bo‘lsa ham native resource vaqtida dispose qilinishi kerak.

Event subscription reference leak yaratishi mumkin.

Async

Network va file operationlar async/await bilan bajariladi.

Continuation UI threadga qaytishi kerak bo‘lishi mumkin.

Cancellation token screen yopilganda ishni bekor qiladi.

async void faqat event handlerga yaqin holatlarda ishlatiladi.

Architecture

MVVM Xamarin.Forms loyihalarida keng tarqalgan.

Asosiy qismlar:

ViewModel platforma UI objectlarini bevosita ushlamasligi kerak.

Navigation va dialog abstraction bilan berilishi mumkin.

Platform-specific code

Conditional compilation yoki platform projectlarda maxsus implementation yoziladi.

Masalan:

Android location service
iOS location service

Umumiy interface shared projectda joylashadi.

Platforma farqini yashirish uchun haddan tashqari abstraction ham murakkablik yaratadi.

Test

Shared business logic oddiy .NET unit test bilan tekshiriladi.

UI va platforma integration emulator yoki real qurilmada test qilinadi.

Mock platform service ko‘p behaviorni tekshiradi, ammo native lifecycle’ni to‘liq almashtirmaydi.

Performance

Cross-platform abstraction:

xarajatiga ega bo‘lishi mumkin.

Profiling Android va iOSda alohida bajariladi.

Debug build performance release bilan bir xil emas.

Xamarin’dan .NET MAUIga o‘tish

Migration project structure, target framework, namespace, renderer va dependencylarni yangilashni talab qiladi.

Custom renderer handler modeliga ko‘chirilishi mumkin.

Faqat project faylini almashtirish yetarli bo‘lmasligi ehtimoli bor.

Eski package supporti tekshiriladi.

Xamarin va native development

Xamarin C# code sharing va .NET jamoasi uchun qulay.

Native Kotlin va Swift platformaning eng yangi APIlarini avval olishi mumkin.

Tanlov mavjud team, lifecycle, UI murakkabligi va uzoq muddatli supportga bog‘liq.

Dependency service

Shared code platforma implementatsiyasini interface orqali oladi. Location, notification yoki secure storage har platformada alohida yoziladi. Service locator’dan haddan tashqari foydalanish dependencylarni yashiradi; constructor injection testabilityni yaxshilaydi.

Lifecycle farqi

Android Activity va iOS UIViewController lifecycle’i bir xil emas. Xamarin abstraction umumiy UI beradi, ammo background, permission va memory warning kabi holatlar platforma projectda boshqariladi.

Migration xavfi

End-of-support kutubxonalari security patch va yangi store SDK talablarini olmasligi mumkin. Mavjud Xamarin application uchun dependency inventarizatsiyasi va bosqichli migration rejalashtiriladi.

Bog‘liq tushunchalar

Xamarin, C#, .NET, Xamarin.Forms, Xamarin.Android, Xamarin.iOS, XAML, MVVM, .NET MAUI, Cross-platform development, Native binding