Xamarin — to platforma Microsoft do tworzenia aplikacji mobilnych w języku C#, ogłoszona w 2011 roku. Według Microsoft Xamarin Documentation, 2024, Xamarin umożliwia pisanie aplikacji na iOS, Android i Windows ze wspólną bazą kodu w C# i .NET, używając Mono Runtime do kompilacji do kodu natywnego. Od 2024 roku Xamarin.Forms został zastąpiony przez .NET MAUI.
Najważniejsze
Xamarin — to platforma oparta na .NET i Mono, która umożliwia używanie C# do tworzenia wieloplatformowych aplikacji mobilnych. Firma Xamarin została założona w 2011 roku i przejęta przez Microsoft w 2016 roku za 400 milionów dolarów. Po przejęciu Xamarin stał się częścią ekosystemu Visual Studio i Azure.
Przed przejęciem przez Microsoft Xamarin był komercyjnym produktem z licencją Enterprise. Microsoft udostępnił go za darmo w ramach Visual Studio Community, a także otworzył kod źródłowy Mono Runtime i bindowania SDK. Doprowadziło to do wzrostu popularności: do 2020 roku Xamarin był używany w 15% projektów wieloplatformowych, według raportu SlashData.
Główna idea Xamarin — podział kodu na trzy warstwy: wspólna logika biznesowa (C#, .NET Standard), projekty platformowe (iOS, Android) i opcjonalny wspólny UI przez Xamarin.Forms. Takie podejście pozwalało na ponowne wykorzystanie do 75% kodu przy zachowaniu natywnego dostępu do API każdej platformy.
Pierwsza wersja Xamarin 1.0 została wydana w 2012 roku z obsługą tylko iOS. W 2013 roku dodano obsługę Android. Xamarin.Forms — deklaratywny framework UI — został zaprezentowany w 2014 roku na konferencji Evolve. Xamarin 4.0 (2016) zawierał obsługę watchOS i tvOS. Xamarin 5.0 (2019) wprowadził style CSS i motyw Material Design.
Ostatnia główna wersja Xamarin.Forms 5.0 została wydana w 2021 roku. Microsoft ogłosił, że Xamarin przechodzi w tryb wsparcia (koniec życia — 1 maja 2024 roku) i zalecił migrację do .NET MAUI (Multi-platform App UI), który jest częścią .NET 6+. Xamarin.Forms 5.0 nie otrzymuje już nowych funkcji, tylko krytyczne poprawki bezpieczeństwa.
Xamarin.Forms — to framework UI, który abstrahuje interfejs poprzez jednolity zestaw elementów. Znaczniki XAML (ContentPage, StackLayout, Label, Button) są mapowane na natywne kontrolki każdej platformy przez renderery. Label jest tłumaczony na UILabel na iOS i TextView na Android. To podejście zapewnia do 95% wspólnego kodu UI.
Xamarin.Native (również Xamarin.iOS i Xamarin.Android) — to podejście bez wspólnego UI. Deweloper tworzy osobne ekrany dla iOS (Interface Builder lub Storyboard) i Android (AXML), używając jednego backendu C#. Daje to pełną kontrolę nad wyglądem każdej platformy, ale zwiększa ilość zduplikowanego kodu UI do 50–60%.
Według Microsoft Developer Survey 2023, 70% projektów na Xamarin używało Xamarin.Forms, 20% — Xamarin.Native ze wspólnymi usługami, 10% — podejście hybrydowe z niestandardowymi rendererami do optymalizacji platformowych.
Architektura Xamarin składa się z dwóch poziomów. Dolny poziom — Mono Runtime, który wykonuje C# IL (Intermediate Language) na platformie. Górny poziom — Managed Callable Wrappers (MCW) dla iOS i Android Bindings dla Android, które zapewniają dostęp do natywnych API z zarządzanego kodu C#.
Mono — to implementacja .NET Framework z otwartym kodem źródłowym. W Xamarin Mono działa jako środowisko wykonawcze Common Language Runtime (CLR), ładując zestawy C# i kompilując je do kodu maszynowego. Na iOS Mono kompiluje się Ahead-of-Time (AOT) — do kodu maszynowego ARM64, ponieważ Apple zabrania JIT-kompilacji w aplikacjach użytkownika. Na Android Mono używa JIT-kompilacji z profilowaniem AOT.
iOS Bindings (Xamarin.iOS) — to otoczki C# nad środowiskiem uruchomieniowym Objective-C. Każda klasa UIKit (UIView, UIViewController) jest reprezentowana przez zarządzaną klasę w zestawie Xamarin.iOS.dll. Selectory Objective-C są wywoływane przez mechanizm MessageUI. Na Android Xamarin.Android używa Android Callable Wrappers (ACW) — mostu JNI między C# a Java/Kotlin. Biblioteki Kotlin są opakowywane przez Android Bindings Library.
XAML (eXtensible Application Markup Language) — deklaratywny język do opisu UI. W Xamarin.Forms XAML określa strukturę ekranu: strony (ContentPage), kontenery (StackLayout, Grid, FlexLayout) i elementy (Label, Entry, Button, ListView). Kod backendu w C# obsługuje zdarzenia (Clicked, PropertyChanged) i zarządza wiązaniem danych (Binding, Data Binding).
Wzorzec MVVM — zalecana architektura dla Xamarin.Forms. Model zawiera dane, ViewModel implementuje INotifyPropertyChanged i komendy (ICommand), View (XAML) łączy się przez BindingContext. Implementacja ICommand przez RelayCommand lub Prism DelegateCommand zapewnia testowanie ViewModel bez zależności UI. Biblioteka Prism.Forms udostępnia NavigationService, DialogService i modułowość.
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 }
};
}
}
}
Jeden język C# — główna zaleta Xamarin. Deweloperzy C# i .NET mogą tworzyć aplikacje mobilne bez nauki Swift, Kotlin czy Objective-C. Logika biznesowa, praca z siecią, bazy danych (SQLite przez ORM), szyfrowanie i logowanie są pisane raz i wykorzystywane ponownie na wszystkich platformach. Upraszcza to utrzymanie i testowanie kodu.
Dostęp do natywnych API — Xamarin zapewnia 100% dostępu do API iOS (Cocoa Touch) i Android (Android SDK) przez bindowania. Po wydaniu nowej wersji iOS lub Android Microsoft udostępnia zaktualizowane bindowania w ciągu 24–48 godzin. Dla brakujących bindowań (niestandardowe biblioteki Objective-C lub Kotlin) tworzy się ręcznie Android Bindings Library lub iOS Binding Library.
Integracja z ekosystemem Microsoft — Xamarin obsługuje Visual Studio, Azure DevOps, App Center (CI/CD, testowanie, monitorowanie) i Enterprise Mobility + Security (Intune, ADAL, MSAL). App Center Analytics i Crashes zbierają dane z działających aplikacji. Visual Studio App Center automatyzuje budowanie, testowanie na urządzeniach i publikację w sklepach z aplikacjami.
Wady Xamarin obejmują rozmiar aplikacji — APK Xamarin.Forms z pustym ekranem waży 25–35 MB wobec 5–8 MB dla natywnej aplikacji Android. Czas kompilacji jest również wyższy: projekt średniej wielkości buduje się 2–5 minut wobec 30–60 sekund w natywnym Android Studio. Mono Runtime dodaje 15–20 MB do końcowego pliku binarnego.
Drugą wadą jest opóźnienie nowych API. Nowe funkcje iOS/Android pojawiają się w natywnym rozwoju natychmiast, a w Xamarin — po 1–2 miesiącach od wydania bindowania. iOS 17 SDK (2023) był w pełni obsługiwany przez Xamarin po 3 tygodniach od premiery. Dla pilnych projektów może to być krytyczne. .NET MAUI rozwiązuje ten problem dzięki bezpośredniej integracji z .NET 8.
| Kryterium | Xamarin | .NET MAUI |
|---|---|---|
| Platformy | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Podstawowy framework | Mono + .NET Standard | .NET 6+ (jednolity BCL) |
| Framework UI | Xamarin.Forms | .NET MAUI (następca) |
| Tryb wsparcia | Koniec życia od 1 maja 2024 | Aktywny rozwój Microsoft |
| Hot Reload | Ograniczony | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) — to ewolucja Xamarin.Forms, wydana przez Microsoft w 2022 roku wraz z .NET 6. MAUI łączy iOS, Android, Windows i macOS w jeden projekt bez osobnych projektów dla każdej platformy. W przeciwieństwie do Xamarin.Forms, MAUI używa .NET 6+ BCL, a nie Mono i .NET Standard.
Microsoft udostępnia narzędzie migracji — .NET Upgrade Assistant dla Visual Studio. Analizuje on projekt Xamarin.Forms, zastępuje przestrzenie nazw (Xamarin.Forms.* na Microsoft.Maui.*), aktualizuje pliki .csproj (format SDK-style) i migruje ustawienia Android i iOS do jednolitej konfiguracji. Po migracji projekt może korzystać ze wszystkich nowych możliwości .NET 8: Native AOT, CodeQL dla bezpieczeństwa i ulepszonej wydajności kompilacji.
Kluczowa zmiana — jeden projekt. Jeśli Xamarin.Forms wymagał 3 osobnych projektów (iOS, Android, .NET Standard), .NET MAUI używa jednego projektu z folderami Platforms/iOS, Platforms/Android, Platforms/Windows i Platforms/MacCatalyst. Każda platforma jest kompilowana ze wspólnego kodu z platformowymi dyrektywami warunkowymi (#if ANDROID, #if IOS).
Dla istniejących baz kodu .NET MAUI zapewnia 90% wsteczną kompatybilność z Xamarin.Forms. Zgodność API obejmuje ContentView, ContentPage, Shell, NavigationPage, DependencyService i MessagingCenter. Główne zmiany dotknęły Device.StartTimer (zastąpiony przez IDispatcher), Platform API (przeniesione do Microsoft.Maui.ApplicationModel) i przestarzałe renderery (zastąpione przez Handlers).
Proces migracji obejmuje pięć kroków. Pierwszy — aktualizacja Xamarin.Forms do najnowszej wersji 5.0. Drugi — zastąpienie .NET Standard 2.0 na .NET 6 lub 8. Trzeci — uruchomienie Upgrade Assistant do automatycznej konwersji projektu. Czwarty — poprawienie kodu platformowego w folderach Platforms. Piąty — testowanie, szczególnie niestandardowych rendererów i usług platformowych.
Często zadawane pytania
Xamarin — to mobilna platforma Microsoft do tworzenia aplikacji w C# na iOS, Android i Windows. Używa Mono Runtime do kompilacji wspólnego kodu i oferuje dwa podejścia: Xamarin.Forms (jednolity UI przez XAML) i Xamarin.Native (natywne ekrany platformy). Od 2024 roku Xamarin jest w trybie wsparcia.
Xamarin używa C# i .NET, renderuje przez natywne kontrolki (UIKit, View), ale przez bindowania. Flutter używa Dart i własnego silnika renderowania (Impeller), nie polegając na natywnych komponentach UI. Flutter zapewnia jednolity wygląd na wszystkich platformach, Xamarin — natywny wygląd każdego systemu operacyjnego. Flutter jest wspierany przez Google i ma 46% wobec 15% dla Xamarin.
Nie. Microsoft zakończył wsparcie Xamarin 1 maja 2024 roku. Wszystkie nowe projekty należy uruchamiać na .NET MAUI — jego następcy, który jest wbudowany w .NET 8 i będzie otrzymywać aktualizacje wraz z platformą .NET. Dla istniejących projektów na Xamarin.Forms zaleca się migrację w ciągu 12–18 miesięcy.
Różnica jest niewielka dla zwykłych aplikacji. Xamarin.Forms dodaje 5–10% narzutu na renderowanie z powodu otoczek Managed-Wrapper-Native. Problemy pojawiają się w ciężkich listach (ListView wobec RecyclerView) i animacjach (środkami Xamarin.Forms bez platformowych API). Zaleca się używanie CollectionView (zastąpił ListView) i natywnych animacji.
Tak, przez Android Bindings Library. Ten typ projektu .NET opakowuje archiwum AAR lub JAR w bindowania C# z automatyczną generacją klas i metod. Dla bibliotek Kotlin wymagane są dodatkowe procedury obsługi dla korutyn i sealed class, które konfiguruje się przez Metadata.xml w Binding Library.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również