Xamarin es una plataforma de Microsoft para crear aplicaciones móviles en C#, anunciada en 2011. Según Microsoft Xamarin Documentation, 2024, Xamarin permite escribir aplicaciones para iOS, Android y Windows con una base de código compartida en C# y .NET, utilizando Mono Runtime para compilar a código nativo. Desde 2024, Xamarin.Forms ha sido reemplazado por .NET MAUI.
Puntos Clave
Xamarin es una plataforma basada en .NET y Mono que permite usar C# para crear aplicaciones móviles multiplataforma. La empresa Xamarin fue fundada en 2011 y adquirida por Microsoft en 2016 por 400 millones de dólares. Tras la adquisición, Xamarin pasó a formar parte del ecosistema de Visual Studio y Azure.
Antes de la adquisición, Xamarin era un producto comercial con licencia Enterprise. Microsoft lo hizo gratuito como parte de Visual Studio Community y también abrió el código fuente de Mono Runtime y los bindings del SDK. Esto provocó un aumento de popularidad: para 2020, Xamarin se usaba en el 15% de los proyectos multiplataforma, según un informe de SlashData.
La idea principal de Xamarin es dividir el código en tres capas: lógica de negocio compartida (C#, .NET Standard), proyectos específicos de plataforma (iOS, Android) y una UI compartida opcional mediante Xamarin.Forms. Este enfoque permitía reutilizar hasta el 75% del código manteniendo el acceso nativo a las API de cada plataforma.
La primera versión Xamarin 1.0 se lanzó en 2012 con soporte solo para iOS. El soporte para Android se añadió en 2013. Xamarin.Forms, un framework de UI declarativo, se presentó en 2014 en la conferencia Evolve. Xamarin 4.0 (2016) incluyó soporte para watchOS y tvOS. Xamarin 5.0 (2019) introdujo estilos CSS y temas de Material Design.
La última versión importante Xamarin.Forms 5.0 se lanzó en 2021. Microsoft anunció que Xamarin entraba en modo de soporte (fin de vida útil — 1 de mayo de 2024) y recomendó migrar a .NET MAUI (Multi-platform App UI), que forma parte de .NET 6+. Xamarin.Forms 5.0 ya no recibe nuevas funciones, solo correcciones críticas de seguridad.
Xamarin.Forms es un framework de UI que abstrae la interfaz mediante un conjunto unificado de componentes. El marcado XAML (ContentPage, StackLayout, Label, Button) se asigna a controles nativos de cada plataforma a través de renderizadores. Label se traduce a UILabel en iOS y a TextView en Android. Este enfoque proporciona hasta un 95% de código UI compartido.
Xamarin.Native (también Xamarin.iOS y Xamarin.Android) es un enfoque sin UI compartida. El desarrollador crea pantallas separadas para iOS (Interface Builder o Storyboard) y Android (AXML), utilizando un único backend en C#. Esto brinda control total sobre la apariencia de cada plataforma, pero aumenta la duplicación de código UI al 50–60%.
Según la Encuesta de Desarrolladores de Microsoft 2023, el 70% de los proyectos en Xamarin usaban Xamarin.Forms, el 20% usaba Xamarin.Native con servicios compartidos y el 10% usaba un enfoque híbrido con renderizadores personalizados para optimizaciones específicas de plataforma.
La arquitectura de Xamarin consta de dos niveles. El nivel inferior es Mono Runtime, que ejecuta C# IL (Intermediate Language) en la plataforma. El nivel superior está formado por Managed Callable Wrappers (MCW) para iOS y Android Bindings para Android, que proporcionan acceso a las API nativas desde el código administrado de C#.
Mono es una implementación de código abierto de .NET Framework. En Xamarin, Mono funciona como Common Language Runtime (CLR), cargando ensamblados de C# y compilándolos a código máquina. En iOS, Mono compila Ahead-of-Time (AOT) — en código máquina ARM64, ya que Apple prohíbe la compilación JIT en aplicaciones de usuario. En Android, Mono usa compilación JIT con perfilado AOT.
iOS Bindings (Xamarin.iOS) son wrappers de C# sobre el runtime de Objective-C. Cada clase de UIKit (UIView, UIViewController) está representada por una clase administrada en el ensamblado Xamarin.iOS.dll. Los Selectors de Objective-C se invocan mediante el mecanismo MessageUI. En Android, Xamarin.Android usa Android Callable Wrappers (ACW), un puente JNI entre C# y Java/Kotlin. Las librerías Kotlin se envuelven mediante Android Bindings Library.
XAML (eXtensible Application Markup Language) es un lenguaje declarativo para describir la UI. En Xamarin.Forms, XAML define la estructura de la pantalla: páginas (ContentPage), contenedores (StackLayout, Grid, FlexLayout) y elementos (Label, Entry, Button, ListView). El código subyacente en C# maneja eventos (Clicked, PropertyChanged) y gestiona el enlace de datos (Binding, Data Binding).
Patrón MVVM es la arquitectura recomendada para Xamarin.Forms. El Modelo contiene datos, la ViewModel implementa INotifyPropertyChanged y comandos (ICommand), y la Vista (XAML) se enlaza mediante BindingContext. La implementación de ICommand mediante RelayCommand o Prism DelegateCommand permite probar la ViewModel sin dependencias de UI. La librería Prism.Forms proporciona NavigationService, DialogService y modularidad.
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 }
};
}
}
}
Lenguaje C# unificado — la principal ventaja de Xamarin. Los desarrolladores de C# y .NET pueden crear aplicaciones móviles sin aprender Swift, Kotlin ni Objective-C. La lógica de negocio, las redes, las bases de datos (SQLite mediante ORM), el cifrado y la registración se escriben una vez y se reutilizan en todas las plataformas. Esto simplifica el mantenimiento y las pruebas del código.
Acceso a API nativas — Xamarin proporciona acceso al 100% de las API de iOS (Cocoa Touch) y Android (Android SDK) mediante bindings. Cuando se lanza una nueva versión de iOS o Android, Microsoft publica bindings actualizados en 24–48 horas. Para bindings faltantes (librerías Objective-C o Kotlin personalizadas), se crea Android Bindings Library o iOS Binding Library manualmente.
Integración con el ecosistema Microsoft — Xamarin es compatible con Visual Studio, Azure DevOps, App Center (CI/CD, pruebas, monitoreo) y Enterprise Mobility + Security (Intune, ADAL, MSAL). App Center Analytics y Crashes recopilan datos de aplicaciones en vivo. Visual Studio App Center automatiza la compilación, las pruebas en dispositivos y la publicación en tiendas de aplicaciones.
Desventajas de Xamarin incluyen el tamaño de la aplicación: un APK de Xamarin.Forms con pantalla vacía pesa 25–35 MB frente a 5–8 MB de una app nativa de Android. El tiempo de compilación también es mayor: un proyecto mediano se compila en 2–5 minutos frente a 30–60 segundos en Android Studio nativo. Mono Runtime añade 15–20 MB al binario final.
El segundo inconveniente es el retraso en nuevas API. Las nuevas funciones de iOS/Android aparecen inmediatamente en el desarrollo nativo, mientras que en Xamarin llegan 1–2 meses después del lanzamiento de los bindings. El SDK de iOS 17 (2023) fue totalmente compatible con Xamarin 3 semanas después de su lanzamiento. Para proyectos urgentes, esto puede ser crítico. .NET MAUI resuelve este problema mediante la integración directa con .NET 8.
| Criterio | Xamarin | .NET MAUI |
|---|---|---|
| Plataformas | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Framework base | Mono + .NET Standard | .NET 6+ (BCL unificado) |
| Framework de UI | Xamarin.Forms | .NET MAUI (sucesor) |
| Estado de soporte | Fin de vida útil desde el 1 de mayo de 2024 | Desarrollo activo de Microsoft |
| Hot Reload | Limitado | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) es la evolución de Xamarin.Forms, lanzada por Microsoft en 2022 junto con .NET 6. MAUI unifica iOS, Android, Windows y macOS en un solo proyecto sin proyectos separados para cada plataforma. A diferencia de Xamarin.Forms, MAUI usa .NET 6+ BCL en lugar de Mono y .NET Standard.
Microsoft proporciona una herramienta de migración — .NET Upgrade Assistant para Visual Studio. Analiza el proyecto de Xamarin.Forms, reemplaza espacios de nombres (Xamarin.Forms.* -> Microsoft.Maui.*), actualiza archivos .csproj (formato estilo SDK) y migra la configuración de Android e iOS a una configuración unificada. Tras la migración, el proyecto puede aprovechar todas las nuevas capacidades de .NET 8: Native AOT, CodeQL para seguridad y rendimiento de compilación mejorado.
El cambio clave es un proyecto único. Mientras Xamarin.Forms requería 3 proyectos separados (iOS, Android, .NET Standard), .NET MAUI usa un solo proyecto con las carpetas Platforms/iOS, Platforms/Android, Platforms/Windows y Platforms/MacCatalyst. Cada plataforma se compila a partir de código compartido con directivas condicionales específicas de plataforma (#if ANDROID, #if IOS).
Para bases de código existentes, .NET MAUI mantiene un 90% de compatibilidad retrospectiva con Xamarin.Forms. La compatibilidad de API cubre ContentView, ContentPage, Shell, NavigationPage, DependencyService y MessagingCenter. Los principales cambios afectaron a Device.StartTimer (reemplazado por IDispatcher), Platform API (movido a Microsoft.Maui.ApplicationModel) y renderizadores obsoletos (reemplazados por Handlers).
El proceso de migración incluye cinco pasos. Primero — actualizar Xamarin.Forms a la última versión 5.0. Segundo — reemplazar .NET Standard 2.0 por .NET 6 u 8. Tercero — ejecutar Upgrade Assistant para la conversión automática del proyecto. Cuarto — corregir el código específico de plataforma en las carpetas Platforms. Quinto — pruebas, especialmente de renderizadores personalizados y servicios de plataforma.
Preguntas Frecuentes
Xamarin es una plataforma móvil de Microsoft para desarrollo en C# para iOS, Android y Windows. Utiliza Mono Runtime para la compilación de código compartido y ofrece dos enfoques: Xamarin.Forms (UI unificada mediante XAML) y Xamarin.Native (pantallas nativas de plataforma). Desde 2024, Xamarin está en modo de soporte.
Xamarin usa C# y .NET, renderizando mediante controles nativos (UIKit, View) a través de bindings. Flutter usa Dart y su propio motor de renderizado (Impeller), sin depender de componentes UI nativos. Flutter proporciona una apariencia uniforme en todas las plataformas, mientras que Xamarin ofrece la apariencia nativa de cada SO. Flutter está respaldado por Google y tiene un 46% frente al 15% de Xamarin.
No. Microsoft interrumpió el soporte de Xamarin el 1 de mayo de 2024. Todos los proyectos nuevos deben iniciarse en .NET MAUI, su sucesor, que está integrado en .NET 8 y recibirá actualizaciones junto con la plataforma .NET. Para proyectos existentes en Xamarin.Forms, se recomienda migrar en un plazo de 12 a 18 meses.
La diferencia es insignificante para aplicaciones normales. Xamarin.Forms añade un 5–10% de sobrecarga de renderizado debido a las capas Managed-Wrapper-Native. Los problemas surgen con listas pesadas (ListView vs RecyclerView) y animaciones (usando Xamarin.Forms sin API de plataforma). Se recomienda usar CollectionView (reemplazó a ListView) y animaciones nativas.
Sí, mediante Android Bindings Library. Este tipo de proyecto de .NET envuelve archivos AAR o JAR en bindings de C# con generación automática de clases y métodos. Las librerías Kotlin requieren controladores adicionales para corrutinas y clases selladas, configurados mediante Metadata.xml en la Binding Library.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también