Xamarin è una piattaforma Microsoft per creare applicazioni mobili in C#, annunciata nel 2011. Secondo Microsoft Xamarin Documentation, 2024, Xamarin consente di scrivere applicazioni per iOS, Android e Windows con una base di codice condivisa in C# e .NET, utilizzando Mono Runtime per la compilazione in codice nativo. Dal 2024, Xamarin.Forms è stato sostituito da .NET MAUI.
Punti Chiave
Xamarin è una piattaforma basata su .NET e Mono che consente di utilizzare C# per creare applicazioni mobili multipiattaforma. L'azienda Xamarin è stata fondata nel 2011 e acquisita da Microsoft nel 2016 per 400 milioni di dollari. Dopo l'acquisizione, Xamarin è entrato a far parte dell'ecosistema Visual Studio e Azure.
Prima dell'acquisizione, Xamarin era un prodotto commerciale con licenza Enterprise. Microsoft lo ha reso gratuito come parte di Visual Studio Community e ha anche aperto il codice sorgente di Mono Runtime e dei binding SDK. Ciò ha portato a un aumento di popolarità: entro il 2020, Xamarin era utilizzato nel 15% dei progetti multipiattaforma, secondo un rapporto SlashData.
L'idea principale di Xamarin è dividere il codice in tre livelli: logica di business condivisa (C#, .NET Standard), progetti specifici della piattaforma (iOS, Android) e un'UI condivisa opzionale tramite Xamarin.Forms. Questo approccio consentiva di riutilizzare fino al 75% del codice mantenendo l'accesso nativo alle API di ciascuna piattaforma.
La prima versione Xamarin 1.0 è stata rilasciata nel 2012 con supporto solo per iOS. Il supporto per Android è stato aggiunto nel 2013. Xamarin.Forms — un framework UI dichiarativo — è stato presentato nel 2014 alla conferenza Evolve. Xamarin 4.0 (2016) includeva il supporto per watchOS e tvOS. Xamarin 5.0 (2019) ha introdotto gli stili CSS e il tema Material Design.
L'ultima versione principale Xamarin.Forms 5.0 è stata rilasciata nel 2021. Microsoft ha annunciato che Xamarin stava entrando in modalità supporto (fine vita — 1 maggio 2024) e ha raccomandato la migrazione a .NET MAUI (Multi-platform App UI), che fa parte di .NET 6+. Xamarin.Forms 5.0 non riceve più nuove funzionalità, solo correzioni di sicurezza critiche.
Xamarin.Forms è un framework UI che astrae l'interfaccia attraverso un insieme unificato di componenti. Il markup XAML (ContentPage, StackLayout, Label, Button) viene mappato ai controlli nativi di ciascuna piattaforma tramite renderer. Label si traduce in UILabel su iOS e TextView su Android. Questo approccio fornisce fino al 95% di codice UI condiviso.
Xamarin.Native (anche Xamarin.iOS e Xamarin.Android) è un approccio senza UI condivisa. Lo sviluppatore crea schermate separate per iOS (Interface Builder o Storyboard) e Android (AXML), utilizzando un unico backend C#. Questo dà il controllo completo sull'aspetto di ogni piattaforma ma aumenta la duplicazione del codice UI al 50–60%.
Secondo il Sondaggio Sviluppatori Microsoft 2023, il 70% dei progetti Xamarin utilizzava Xamarin.Forms, il 20% utilizzava Xamarin.Native con servizi condivisi e il 10% utilizzava un approccio ibrido con renderer personalizzati per ottimizzazioni specifiche della piattaforma.
L'architettura di Xamarin è composta da due livelli. Il livello inferiore è Mono Runtime, che esegue C# IL (Intermediate Language) sulla piattaforma. Il livello superiore è costituito da Managed Callable Wrappers (MCW) per iOS e Android Bindings per Android, che forniscono l'accesso alle API native dal codice gestito C#.
Mono è un'implementazione open source del .NET Framework. In Xamarin, Mono opera come Common Language Runtime (CLR), caricando gli assembly C# e compilandoli in codice macchina. Su iOS, Mono compila Ahead-of-Time (AOT) — in codice macchina ARM64, poiché Apple vieta la compilazione JIT nelle applicazioni utente. Su Android, Mono utilizza la compilazione JIT con profilatura AOT.
Binding iOS (Xamarin.iOS) sono wrapper C# sul runtime Objective-C. Ogni classe UIKit (UIView, UIViewController) è rappresentata da una classe gestita nell'assembly Xamarin.iOS.dll. I selettori Objective-C vengono invocati tramite il meccanismo MessageUI. Su Android, Xamarin.Android utilizza Android Callable Wrappers (ACW) — un ponte JNI tra C# e Java/Kotlin. Le librerie Kotlin vengono incapsulate tramite Android Bindings Library.
XAML (eXtensible Application Markup Language) è un linguaggio dichiarativo per descrivere l'UI. In Xamarin.Forms, XAML definisce la struttura dello schermo: pagine (ContentPage), contenitori (StackLayout, Grid, FlexLayout) ed elementi (Label, Entry, Button, ListView). Il code-behind in C# gestisce gli eventi (Clicked, PropertyChanged) e gestisce il data binding (Binding, Data Binding).
Pattern MVVM è l'architettura consigliata per Xamarin.Forms. Il Model contiene i dati, la ViewModel implementa INotifyPropertyChanged e i comandi (ICommand), e la View (XAML) si lega tramite BindingContext. L'implementazione di ICommand tramite RelayCommand o Prism DelegateCommand consente di testare la ViewModel senza dipendenze dall'UI. La libreria Prism.Forms fornisce NavigationService, DialogService e modularità.
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 }
};
}
}
}
Linguaggio C# unificato — il principale vantaggio di Xamarin. Gli sviluppatori C# e .NET possono creare applicazioni mobili senza imparare Swift, Kotlin o Objective-C. La logica di business, la rete, i database (SQLite tramite ORM), la crittografia e la registrazione vengono scritti una volta e riutilizzati su tutte le piattaforme. Questo semplifica la manutenzione e il test del codice.
Accesso alle API native — Xamarin fornisce accesso al 100% alle API iOS (Cocoa Touch) e Android (Android SDK) tramite binding. Quando viene rilasciata una nuova versione di iOS o Android, Microsoft pubblica binding aggiornati entro 24–48 ore. Per i binding mancanti (librerie Objective-C o Kotlin personalizzate), si crea manualmente Android Bindings Library o iOS Binding Library.
Integrazione con l'ecosistema Microsoft — Xamarin supporta Visual Studio, Azure DevOps, App Center (CI/CD, test, monitoraggio) ed Enterprise Mobility + Security (Intune, ADAL, MSAL). App Center Analytics e Crashes raccolgono dati dalle applicazioni in esecuzione. Visual Studio App Center automatizza la compilazione, i test su dispositivo e la pubblicazione negli store di app.
Svantaggi di Xamarin includono la dimensione dell'applicazione — un APK Xamarin.Forms con schermata vuota pesa 25–35 MB contro 5–8 MB di un'app Android nativa. Anche il tempo di compilazione è maggiore: un progetto di medie dimensioni viene compilato in 2–5 minuti contro 30–60 secondi in Android Studio nativo. Mono Runtime aggiunge 15–20 MB al binario finale.
Il secondo svantaggio è il ritardo delle nuove API. Le nuove funzionalità iOS/Android appaiono immediatamente nello sviluppo nativo, mentre in Xamarin arrivano 1–2 mesi dopo il rilascio dei binding. L'iOS 17 SDK (2023) è stato completamente supportato da Xamarin 3 settimane dopo il rilascio. Per i progetti urgenti, questo può essere critico. .NET MAUI risolve questo problema tramite l'integrazione diretta con .NET 8.
| Criterio | Xamarin | .NET MAUI |
|---|---|---|
| Piattaforme | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Framework di base | Mono + .NET Standard | .NET 6+ (BCL unificato) |
| Framework UI | Xamarin.Forms | .NET MAUI (successore) |
| Stato del supporto | Fine vita dal 1 maggio 2024 | Sviluppo attivo Microsoft |
| Hot Reload | Limitato | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) è l'evoluzione di Xamarin.Forms, rilasciata da Microsoft nel 2022 insieme a .NET 6. MAUI unifica iOS, Android, Windows e macOS in un unico progetto senza progetti separati per ogni piattaforma. A differenza di Xamarin.Forms, MAUI utilizza .NET 6+ BCL invece di Mono e .NET Standard.
Microsoft fornisce uno strumento di migrazione — .NET Upgrade Assistant per Visual Studio. Analizza il progetto Xamarin.Forms, sostituisce i namespace (Xamarin.Forms.* -> Microsoft.Maui.*), aggiorna i file .csproj (formato stile SDK) e migra le impostazioni Android e iOS in una configurazione unificata. Dopo la migrazione, il progetto può sfruttare tutte le nuove capacità di .NET 8: Native AOT, CodeQL per la sicurezza e prestazioni di compilazione migliorate.
Il cambiamento chiave è un progetto singolo. Mentre Xamarin.Forms richiedeva 3 progetti separati (iOS, Android, .NET Standard), .NET MAUI utilizza un unico progetto con le cartelle Platforms/iOS, Platforms/Android, Platforms/Windows e Platforms/MacCatalyst. Ogni piattaforma viene compilata da codice condiviso con direttive condizionali specifiche della piattaforma (#if ANDROID, #if IOS).
Per le basi di codice esistenti, .NET MAUI mantiene il 90% di compatibilità con Xamarin.Forms. La compatibilità delle API copre ContentView, ContentPage, Shell, NavigationPage, DependencyService e MessagingCenter. Le modifiche principali hanno interessato Device.StartTimer (sostituito da IDispatcher), Platform API (spostato in Microsoft.Maui.ApplicationModel) e i renderer obsoleti (sostituiti da Handlers).
Il processo di migrazione include cinque fasi. Prima — aggiornare Xamarin.Forms all'ultima versione 5.0. Seconda — sostituire .NET Standard 2.0 con .NET 6 o 8. Terza — eseguire Upgrade Assistant per la conversione automatica del progetto. Quarta — correggere il codice specifico della piattaforma nelle cartelle Platforms. Quinta — testare, specialmente renderer personalizzati e servizi di piattaforma.
Domande Frequenti
Xamarin è una piattaforma mobile Microsoft per lo sviluppo in C# per iOS, Android e Windows. Utilizza Mono Runtime per la compilazione del codice condiviso e offre due approcci: Xamarin.Forms (UI unificata tramite XAML) e Xamarin.Native (schermate native della piattaforma). Dal 2024, Xamarin è in modalità supporto.
Xamarin usa C# e .NET, eseguendo il rendering tramite controlli nativi (UIKit, View) attraverso binding. Flutter usa Dart e il proprio motore di rendering (Impeller), senza dipendere da componenti UI nativi. Flutter offre un aspetto coerente su tutte le piattaforme, mentre Xamarin offre l'aspetto nativo di ogni sistema operativo. Flutter è supportato da Google e detiene il 46% contro il 15% di Xamarin.
No. Microsoft ha interrotto il supporto per Xamarin il 1 maggio 2024. Tutti i nuovi progetti dovrebbero essere avviati su .NET MAUI — il suo successore, che è integrato in .NET 8 e riceverà aggiornamenti insieme alla piattaforma .NET. Per i progetti esistenti su Xamarin.Forms, si consiglia la migrazione entro 12–18 mesi.
La differenza è trascurabile per le applicazioni normali. Xamarin.Forms aggiunge un overhead di rendering del 5–10% a causa dei livelli Managed-Wrapper-Native. I problemi sorgono con elenchi pesanti (ListView vs RecyclerView) e animazioni (usando Xamarin.Forms senza API di piattaforma). Si consiglia di utilizzare CollectionView (ha sostituito ListView) e animazioni native.
Sì, tramite Android Bindings Library. Questo tipo di progetto .NET incapsula archivi AAR o JAR in binding C# con generazione automatica di classi e metodi. Le librerie Kotlin richiedono gestori aggiuntivi per coroutine e classi sealed, configurati tramite Metadata.xml nella Binding Library.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche