Xamarin — är Microsofts plattform för att skapa mobila applikationer i C#, som tillkännagavs 2011. Enligt Microsoft Xamarin Documentation, 2024 gör Xamarin det möjligt att skriva applikationer för iOS, Android och Windows med en gemensam kodbas i C# och .NET, med Mono Runtime för kompilering till nativekod. Sedan 2024 har Xamarin.Forms ersatts av .NET MAUI.
Huvudpunkter
Xamarin — är en plattform baserad på .NET och Mono som gör det möjligt att använda C# för att skapa plattformsoberoende mobila applikationer. Företaget Xamarin grundades 2011 och förvärvades av Microsoft 2016 för 400 miljoner dollar. Efter förvärvet blev Xamarin en del av ekosystemet Visual Studio och Azure.
Innan förvärvet av Microsoft var Xamarin en kommersiell produkt med Enterprise-licens. Microsoft gjorde det gratis inom Visual Studio Community och öppnade även källkoden för Mono Runtime och SDK-bindningar. Detta ledde till ökad popularitet: år 2020 användes Xamarin i 15% av plattformsoberoende projekt, enligt SlashData-rapporten.
Huvudidén med Xamarin — uppdelning av kod i tre lager: gemensam affärslogik (C#, .NET Standard), plattformsprojekt (iOS, Android) och valfritt gemensamt UI via Xamarin.Forms. Detta tillvägagångssätt möjliggjorde återanvändning av upp till 75% av koden samtidigt som man behöll nativeåtkomst till varje plattforms API.
Den första versionen Xamarin 1.0 släpptes 2012 med endast iOS-stöd. 2013 lades Android-stöd till. Xamarin.Forms — det deklarativa UI-ramverket — presenterades 2014 på Evolve-konferensen. Xamarin 4.0 (2016) lade till stöd för watchOS och tvOS. Xamarin 5.0 (2019) introducerade CSS-stilar och Material Design-temat.
Den senaste huvudversionen Xamarin.Forms 5.0 släpptes 2021. Microsoft meddelade att Xamarin går över till supportläge (slut på livslängd — 1 maj 2024) och rekommenderade övergång till .NET MAUI (Multi-platform App UI), som är en del av .NET 6+. Xamarin.Forms 5.0 får inte längre nya funktioner, endast kritiska säkerhetsuppdateringar.
Xamarin.Forms — är ett UI-ramverk som abstraherar gränssnittet genom en enhetlig uppsättning element. XAML-markup (ContentPage, StackLayout, Label, Button) mappas till nativa kontroller på varje plattform via renderare. Label översätts till UILabel på iOS och TextView på Android. Detta tillvägagångssätt ger upp till 95% gemensam UI-kod.
Xamarin.Native (även Xamarin.iOS och Xamarin.Android) — är ett tillvägagångssätt utan gemensamt UI. Utvecklaren skapar separata skärmar för iOS (Interface Builder eller Storyboard) och Android (AXML) med en C#-backend. Detta ger full kontroll över varje plattforms utseende, men ökar mängden dubblerad UI-kod till 50–60%.
Enligt Microsoft Developer Survey 2023 använde 70% av Xamarin-projekten Xamarin.Forms, 20% — Xamarin.Native med gemensamma tjänster, 10% — hybridmetod med anpassade renderare för plattformsoptimeringar.
Xamarin arkitektur består av två nivåer. Den nedre nivån — Mono Runtime, som exekverar C# IL (Intermediate Language) på plattformen. Den övre nivån — Managed Callable Wrappers (MCW) för iOS och Android Bindings för Android, som ger tillgång till nativa API:er från hanterad C#-kod.
Mono — är en open-source-implementering av .NET Framework. I Xamarin fungerar Mono som Common Language Runtime (CLR)-exekveringsmiljö, laddar C#-assemblier och kompilerar dem till maskinkod. På iOS kompilerar Mono Ahead-of-Time (AOT) — till ARM64-maskinkod, eftersom Apple förbjuder JIT-kompilering i användarapplikationer. På Android använder Mono JIT-kompilering med AOT-profilering.
iOS Bindings (Xamarin.iOS) — är C#-omslag runt Objective-C-körtiden. Varje UIKit-klass (UIView, UIViewController) representeras av en hanterad klass i Xamarin.iOS.dll-assemblier. Objective-C-väljare anropas via MessageUI-mekanismen. På Android använder Xamarin.Android Android Callable Wrappers (ACW) — JNI-brygga mellan C# och Java/Kotlin. Kotlin-bibliotek omsluts via Android Bindings Library.
XAML (eXtensible Application Markup Language) — deklarativt språk för att beskriva UI. I Xamarin.Forms definierar XAML skärmstrukturen: sidor (ContentPage), behållare (StackLayout, Grid, FlexLayout) och element (Label, Entry, Button, ListView). Backend-kod i C# hanterar händelser (Clicked, PropertyChanged) och styr databindning (Binding, Data Binding).
MVVM-mönster — rekommenderad arkitektur för Xamarin.Forms. Model innehåller data, ViewModel implementerar INotifyPropertyChanged och kommandon (ICommand), View (XAML) kopplas via BindingContext. Implementering av ICommand via RelayCommand eller Prism DelegateCommand säkerställer testning av ViewModel utan UI-beroenden. Prism.Forms-biblioteket tillhandahåller NavigationService, DialogService och modularitet.
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 }
};
}
}
}
Enhetligt språk C# — den främsta fördelen med Xamarin. C#- och .NET-utvecklare kan skapa mobila applikationer utan att lära sig Swift, Kotlin eller Objective-C. Affärslogik, nätverksarbete, databaser (SQLite via ORM), kryptering och loggning skrivs en gång och återanvänds på alla plattformar. Detta förenklar kodunderhåll och testning.
Åtkomst till nativa API:er — Xamarin ger 100% åtkomst till iOS (Cocoa Touch) och Android (Android SDK) API:er via bindningar. När en ny version av iOS eller Android släpps publicerar Microsoft uppdaterade bindningar inom 24–48 timmar. För saknade bindningar (anpassade Objective-C- eller Kotlin-bibliotek) skapas Android Bindings Library eller iOS Binding Library manuellt.
Integration med Microsoft-ekosystemet — Xamarin stöder Visual Studio, Azure DevOps, App Center (CI/CD, testning, övervakning) och Enterprise Mobility + Security (Intune, ADAL, MSAL). App Center Analytics och Crashes samlar in data från live-applikationer. Visual Studio App Center automatiserar byggning, testning på enhet och publicering till appbutiker.
Nackdelar med Xamarin inkluderar applikationsstorlek — en Xamarin.Forms APK med tom skärm väger 25–35 MB jämfört med 5–8 MB för en native Android-app. Kompileringstiden är också högre: ett medelstort projekt byggs på 2–5 minuter jämfört med 30–60 sekunder i native Android Studio. Mono Runtime lägger till 15–20 MB till den slutliga binärfilen.
Den andra nackdelen är fördröjning av nya API:er. Nya iOS/Android-funktioner dyker upp omedelbart i nativeutveckling, men i Xamarin — 1–2 månader efter att bindningar släppts. iOS 17 SDK (2023) stöddes fullt av Xamarin 3 veckor efter lanseringen. För brådskande projekt kan detta vara kritiskt. .NET MAUI löser detta problem genom direkt integration med .NET 8.
| Kriterium | Xamarin | .NET MAUI |
|---|---|---|
| Plattformar | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Grundläggande ramverk | Mono + .NET Standard | .NET 6+ (enhetlig BCL) |
| UI-ramverk | Xamarin.Forms | .NET MAUI (efterträdare) |
| Supportläge | Slut på livslängd från 1 maj 2024 | Aktiv utveckling av Microsoft |
| Hot Reload | Begränsad | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) — är en evolution av Xamarin.Forms, utgiven av Microsoft 2022 tillsammans med .NET 6. MAUI kombinerar iOS, Android, Windows och macOS i ett enda projekt utan separata projekt för varje plattform. Till skillnad från Xamarin.Forms använder MAUI .NET 6+ BCL, inte Mono och .NET Standard.
Microsoft tillhandahåller migreringsverktyg — .NET Upgrade Assistant för Visual Studio. Det analyserar Xamarin.Forms-projektet, ersätter namnrymder (Xamarin.Forms.* -> Microsoft.Maui.*), uppdaterar .csproj-filer (SDK-stilsformat) och migrerar Android- och iOS-inställningar till en enda konfiguration. Efter migrering kan projektet använda alla nya funktioner i .NET 8: Native AOT, CodeQL för säkerhet och förbättrad byggprestanda.
Nyckelförändring — enda projekt. Om Xamarin.Forms krävde 3 separata projekt (iOS, Android, .NET Standard) använder .NET MAUI ett enda projekt med mapparna Platforms/iOS, Platforms/Android, Platforms/Windows och Platforms/MacCatalyst. Varje plattform kompileras från gemensam kod med plattforms villkorliga direktiv (#if ANDROID, #if IOS).
För befintliga kodbaser ger .NET MAUI 90% bakåtkompatibilitet med Xamarin.Forms. API-kompatibilitet omfattar ContentView, ContentPage, Shell, NavigationPage, DependencyService och MessagingCenter. Huvudförändringarna påverkade Device.StartTimer (ersatt av IDispatcher), Platform API (flyttat till Microsoft.Maui.ApplicationModel) och föråldrade renderare (ersatta av Handlers).
Migreringsprocessen omfattar fem steg. Första — uppdatering av Xamarin.Forms till senaste version 5.0. Andra — ersättning av .NET Standard 2.0 med .NET 6 eller 8. Tredje — körning av Upgrade Assistant för automatisk konvertering av projektet. Fjärde — korrigering av plattformskod i Platforms-mapparna. Femte — testning, särskilt anpassade renderare och plattformstjänster.
Vanliga frågor
Xamarin — är Microsofts mobila plattform för utveckling i C# på iOS, Android och Windows. Den använder Mono Runtime för kompilering av gemensam kod och erbjuder två tillvägagångssätt: Xamarin.Forms (enhetligt UI via XAML) och Xamarin.Native (plattformens naturskilda skärmar). Sedan 2024 är Xamarin i supportläge.
Xamarin använder C# och .NET, renderar via nativa kontroller (UIKit, View), men via bindningar. Flutter använder Dart och sin egen renderingsmotor (Impeller) utan att förlita sig på nativa UI-komponenter. Flutter ger ett enhetligt utseende på alla plattformar, Xamarin — naturskilt utseende för varje operativsystem. Flutter stöds av Google och har 46% jämfört med 15% för Xamarin.
Nej. Microsoft avslutade stödet för Xamarin den 1 maj 2024. Alla nya projekt bör startas på .NET MAUI — dess efterträdare, som är inbyggd i .NET 8 och kommer att få uppdateringar tillsammans med .NET-plattformen. För befintliga Xamarin.Forms-projekt rekommenderas migrering inom 12–18 månader.
Skillnaden är försumbar för vanliga applikationer. Xamarin.Forms lägger till 5–10% renderingsomkostnader på grund av Managed-Wrapper-Native-omslag. Problem uppstår i tunga listor (ListView vs RecyclerView) och animationer (med Xamarin.Forms-medel utan plattforms-API:er). Rekommenderad användning är CollectionView (ersatte ListView) och nativa animationer.
Ja, via Android Bindings Library. Denna typ av .NET-projekt omsluter AAR- eller JAR-arkiv i C#-bindningar med automatisk generering av klasser och metoder. För Kotlin-bibliotek krävs ytterligare hanterare för korutiner och sealed class, som konfigureras via Metadata.xml i Binding Library.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också