Xamarin — 2011-ci ildə elan edilmiş, C# dilində mobil tətbiqlər yaratmaq üçün Microsoft platformasıdır. Microsoft Xamarin Documentation, 2024-ə görə, Xamarin iOS, Android və Windows üçün C# və .NET-də ümumi kod bazası ilə tətbiqlər yazmağa imkan verir, Mono Runtime-dan istifadə edərək nativ koda kompilə edir. 2024-cü ildən Xamarin.Forms .NET MAUI ilə əvəz edilmişdir.
Əsas məqamlar
Xamarin — .NET və Mono-ya əsaslanan, çoxplatformalı mobil tətbiqlər yaratmaq üçün C#-dan istifadə etməyə imkan verən platformadır. Xamarin şirkəti 2011-ci ildə qurulmuş və 2016-cı ildə Microsoft tərəfindən 400 milyon dollara satın alınmışdır. Satınalmadan sonra Xamarin Visual Studio və Azure ekosisteminin bir hissəsi oldu.
Microsoft tərəfindən satın alınmazdan əvvəl Xamarin Enterprise lisenziyası ilə kommersiya məhsulu idi. Microsoft onu Visual Studio Community tərkibində pulsuz etdi, həmçinin Mono Runtime və SDK bağlamalarının mənbə kodunu açdı. Bu populyarlığın artmasına səbəb oldu: 2020-ci ilə qədər Xamarin SlashData hesabatına görə çoxplatformalı layihələrin 15%-də istifadə olunurdu.
Xamarin-in əsas ideyası — kodun üç qata bölünməsi: ümumi biznes məntiqi (C#, .NET Standard), platforma layihələri (iOS, Android) və Xamarin.Forms vasitəsilə isteğe bağlı ümumi UI. Bu yanaşma hər platformanın API-nə nativ girişi qoruyarkən kodun 75%-ə qədər təkrar istifadəsinə imkan verirdi.
Xamarin 1.0-ın ilk versiyası 2012-ci ildə yalnız iOS dəstəyi ilə buraxıldı. 2013-cü ildə Android dəstəyi əlavə edildi. Xamarin.Forms — deklarativ UI freymvorku — 2014-cü ildə Evolve konfransında təqdim edildi. Xamarin 4.0 (2016) watchOS və tvOS dəstəyini əlavə etdi. Xamarin 5.0 (2019) CSS stilləri və Material Design mövzusunu tətbiq etdi.
Xamarin.Forms 5.0-ın son böyük versiyası 2021-ci ildə buraxıldı. Microsoft Xamarin-in dəstək rejiminə keçdiyini (istifadə müddətinin sonu — 1 may 2024-cü il) elan etdi və .NET 6+-nın bir hissəsi olan .NET MAUI (Multi-platform App UI)-ya keçidi tövsiyə etdi. Xamarin.Forms 5.0 artıq yeni funksiyalar almır, yalnız kritik təhlükəsizlik düzəlişləri alır.
Xamarin.Forms — interfeysi vahid elementlər dəsti vasitəsilə abstraksiya edən UI freymvorkudur. XAML işarələməsi (ContentPage, StackLayout, Label, Button) rendererlər vasitəsilə hər platformanın nativ kontrollerlərinə xəritələnir. Label iOS-da UILabel-ə, Android-də isə TextView-ə çevrilir. Bu yanaşma ümumi UI kodunun 95%-ə qədərini təmin edir.
Xamarin.Native (həmçinin Xamarin.iOS və Xamarin.Android) — ümumi UI olmayan yanaşmadır. Tərtibatçı bir C# backendindən istifadə edərək iOS (Interface Builder və ya Storyboard) və Android (AXML) üçün ayrıca ekranlar yaradır. Bu, hər platformanın görünüşü üzərində tam nəzarət verir, lakin UI kodunun təkrarlanma həcmini 50–60%-ə qədər artırır.
Microsoft Developer Survey 2023-ə görə, Xamarin-də layihələrin 70%-i Xamarin.Forms, 20%-i ümumi xidmətlərlə Xamarin.Native, 10%-i isə platforma optimallaşdırmaları üçün fərdi rendererlərlə hibrid yanaşma istifadə edirdi.
Xamarin arxitekturası iki səviyyədən ibarətdir. Aşağı səviyyə — platformada C# IL (Intermediate Language) icra edən Mono Runtime. Yuxarı səviyyə — iOS üçün Managed Callable Wrappers (MCW) və Android üçün Android Bindings, idarə olunan C# kodundan nativ API-lərə girişi təmin edir.
Mono — açıq mənbə kodlu .NET Framework tətbiqidir. Xamarin-də Mono Common Language Runtime (CLR) icra mühiti kimi işləyir, C# yığınlarını yükləyir və onları maşın koduna kompilə edir. iOS-da Mono Ahead-of-Time (AOT) — ARM64 maşın koduna kompilə edir, çünki Apple istifadəçi tətbiqlərində JIT-kompilasiyanı qadağan edir. Android-də Mono AOT profilləşdirmə ilə JIT-kompilasiyadan istifadə edir.
iOS Bindings (Xamarin.iOS) — Objective-C iş vaxtı üzərində C# örtükləridir. Hər bir UIKit sinfi (UIView, UIViewController) Xamarin.iOS.dll yığınında idarə olunan sinif ilə təmsil olunur. Objective-C selekterləri MessageUI mexanizmi vasitəsilə çağırılır. Android-də Xamarin.Android Android Callable Wrappers (ACW) — C# və Java/Kotlin arasında JNI körpüsündən istifadə edir. Kotlin kitabxanaları Android Bindings Library vasitəsilə bükülür.
XAML (eXtensible Application Markup Language) — UI təsviri üçün deklarativ dildir. Xamarin.Forms-da XAML ekran strukturunu müəyyən edir: səhifələr (ContentPage), konteynerlər (StackLayout, Grid, FlexLayout) və elementlər (Label, Entry, Button, ListView). C#-də backend kodu hadisələri (Clicked, PropertyChanged) idarə edir və məlumat bağlamasını (Binding, Data Binding) tənzimləyir.
MVVM nümunəsi — Xamarin.Forms üçün tövsiyə olunan arxitekturadır. Model məlumatları ehtiva edir, ViewModel INotifyPropertyChanged və əmrləri (ICommand) tətbiq edir, View (XAML) BindingContext vasitəsilə bağlanır. ICommand-ın RelayCommand və ya Prism DelegateCommand vasitəsilə tətbiqi ViewModel-in UI asılılıqları olmadan sınaqdan keçirilməsini təmin edir. Prism.Forms kitabxanası NavigationService, DialogService və modulluğu təmin edir.
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 }
};
}
}
}
Vahid C# dili — Xamarin-in əsas üstünlüyüdür. C# və .NET tərtibatçıları Swift, Kotlin və ya Objective-C öyrənmədən mobil tətbiqlər yarada bilərlər. Biznes məntiqi, şəbəkə ilə iş, verilənlər bazaları (ORM vasitəsilə SQLite), şifrələmə və jurnallaşdırma bir dəfə yazılır və bütün platformalarda təkrar istifadə olunur. Bu, kodun saxlanmasını və sınaqdan keçirilməsini asanlaşdırır.
Nativ API-lərə giriş — Xamarin iOS (Cocoa Touch) və Android (Android SDK) API-lərinə 100% girişi bağlamalar vasitəsilə təmin edir. Yeni iOS və ya Android versiyası buraxıldıqda, Microsoft 24–48 saat ərzində yenilənmiş bağlamaları təqdim edir. Çatışmayan bağlamalar (fərdi Objective-C və ya Kotlin kitabxanaları) üçün əl ilə Android Bindings Library və ya iOS Binding Library yaradılır.
Microsoft ekosistemi ilə inteqrasiya — Xamarin Visual Studio, Azure DevOps, App Center (CI/CD, sınaq, monitorinq) və Enterprise Mobility + Security (Intune, ADAL, MSAL) dəstəkləyir. App Center Analytics və Crashes canlı tətbiqlərdən məlumat toplayır. Visual Studio App Center qurma, cihazda sınaq və tətbiq mağazalarına nəşri avtomatlaşdırır.
Çatışmazlıqlar — Xamarin-in çatışmazlıqlarına tətbiq ölçüsü daxildir: boş ekranlı Xamarin.Forms APK 25–35 MB, nativ Android tətbiqində isə 5–8 MB-dır. Kompilə vaxtı da daha yüksəkdir: orta ölçülü layihə nativ Android Studio-da 30–60 saniyəyə qarşı 2–5 dəqiqəyə yığılır. Mono Runtime son ikili fayla 15–20 MB əlavə edir.
İkinci çatışmazlıq — yeni API-lərin gecikməsidir. Yeni iOS/Android xüsusiyyətləri nativ inkişafda dərhal, Xamarin-də isə bağlamalar buraxıldıqdan 1–2 ay sonra görünür. iOS 17 SDK (2023) Xamarin tərəfindən buraxılışdan 3 həftə sonra tam dəstəkləndi. Təcili layihələr üçün bu kritik ola bilər. .NET MAUI bu problemi .NET 8 ilə birbaşa inteqrasiya hesabına həll edir.
| Meyar | Xamarin | .NET MAUI |
|---|---|---|
| Platformalar | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Əsas freymvork | Mono + .NET Standard | .NET 6+ (vahid BCL) |
| UI freymvorku | Xamarin.Forms | .NET MAUI (varis) |
| Dəstək rejimi | 1 may 2024-cü ildən istifadə müddəti bitib | Microsoft-un aktiv inkişafı |
| Hot Reload | Məhdud | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) — Microsoft tərəfindən 2022-ci ildə .NET 6 ilə birlikdə buraxılmış Xamarin.Forms-un təkamülüdür. MAUI iOS, Android, Windows və macOS-u hər platforma üçün ayrıca layihələr olmadan vahid layihədə birləşdirir. Xamarin.Forms-dan fərqli olaraq, MAUI Mono və .NET Standard deyil, .NET 6+ BCL istifadə edir.
Microsoft miqrasiya aləti — Visual Studio üçün .NET Upgrade Assistant təqdim edir. O, Xamarin.Forms layihəsini təhlil edir, ad fəzalarını əvəz edir (Xamarin.Forms.* -> Microsoft.Maui.*), .csproj fayllarını yeniləyir (SDK-stili format) və Android və iOS parametrlərini vahid konfiqurasiyaya miqrasiya edir. Miqrasiyadan sonra layihə .NET 8-in bütün yeni imkanlarından istifadə edə bilər: Native AOT, təhlükəsizlik üçün CodeQL və təkmilləşdirilmiş qurma performansı.
Əsas dəyişiklik — vahid layihə. Xamarin.Forms 3 ayrıca layihə (iOS, Android, .NET Standard) tələb edirdisə, .NET MAUI Platforms/iOS, Platforms/Android, Platforms/Windows və Platforms/MacCatalyst qovluqları olan bir layihədən istifadə edir. Hər platforma platforma şərti direktivləri ilə (#if ANDROID, #if IOS) ümumi koddan kompilə edilir.
Mövcud kod bazaları üçün .NET MAUI Xamarin.Forms ilə 90% geriyə uyğunluğu təmin edir. API uyğunluğu ContentView, ContentPage, Shell, NavigationPage, DependencyService və MessagingCenter-i əhatə edir. Əsas dəyişikliklər Device.StartTimer (IDispatcher ilə əvəz olunub), Platform API (Microsoft.Maui.ApplicationModel-ə köçürülüb) və köhnəlmiş rendererlərə (Handlers ilə əvəz olunub) təsir edib.
Miqrasiya prosesi beş addımı əhatə edir. Birinci — Xamarin.Forms-un ən son 5.0 versiyasına yenilənməsi. İkinci — .NET Standard 2.0-ın .NET 6 və ya 8 ilə əvəz edilməsi. Üçüncü — layihənin avtomatik konvertasiyası üçün Upgrade Assistant-ın işə salınması. Dördüncü — Platforms qovluqlarında platforma kodunun düzəldilməsi. Beşinci — xüsusilə fərdi rendererlərin və platforma xidmətlərinin sınaqdan keçirilməsi.
Tez-tez verilən suallar
Xamarin — iOS, Android və Windows üçün C# ilə tətbiq inkişafı üçün Microsoft mobil platformasıdır. O, ümumi kodun kompiləsi üçün Mono Runtime-dan istifadə edir və iki yanaşma təklif edir: Xamarin.Forms (XAML vasitəsilə vahid UI) və Xamarin.Native (platformanın nativ ekranları). 2024-cü ildən Xamarin dəstək rejimindədir.
Xamarin C# və .NET istifadə edir, nativ kontrollerlər (UIKit, View) vasitəsilə render edir, lakin bağlamalar vasitəsilə. Flutter Dart və öz renderləmə mühərrikindən (Impeller) istifadə edir, nativ UI komponentlərinə etibar etmir. Flutter bütün platformalarda vahid görünüş təmin edir, Xamarin isə hər ƏS-nin nativ görünüşünü təmin edir. Flutter Google tərəfindən dəstəklənir və Xamarin-in 15%-nə qarşı 46% paya malikdir.
Xeyr. Microsoft 1 may 2024-cü ildə Xamarin-i dəstəkləməyi dayandırdı. Bütün yeni layihələr .NET 8-ə quraşdırılmış və .NET platforması ilə birlikdə yeniləmələr alacaq varisi .NET MAUI-da işə salınmalıdır. Mövcud Xamarin.Forms layihələri üçün 12–18 ay ərzində miqrasiya tövsiyə olunur.
Adi tətbiqlər üçün fərq cüzidir. Xamarin.Forms Managed-Wrapper-Native örtükləri səbəbindən renderə 5–10% əlavə yük əlavə edir. Problemlər ağır siyahılarda (ListView-ə qarşı RecyclerView) və animasiyalarda (platforma API-ləri olmadan Xamarin.Forms vasitələri ilə) yaranır. CollectionView (ListView-i əvəz etdi) və nativ animasiyalardan istifadə etmək tövsiyə olunur.
Bəli, Android Bindings Library vasitəsilə. Bu .NET layihə növü AAR və ya JAR arxivini siniflərin və metodların avtomatik yaradılması ilə C# bağlamalarına bükür. Kotlin kitabxanaları üçün Binding Library-də Metadata.xml vasitəsilə konfiqurasiya edilən korutinlər və sealed class üçün əlavə işləyicilər tələb olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun