Talently
Talently
Xamarin Forms

Xamarin Forms

El framework .NET para aplicaciones móviles multiplataforma

Xamarin Forms es un framework de Microsoft para construir aplicaciones móviles multiplataforma para iOS y Android usando C# y .NET con una interfaz de usuario compartida. Permite a developers .NET construir aplicaciones nativas con un único codebase en C#, accediendo a las APIs del dispositivo y compilando a código nativo para cada plataforma. Actualmente está siendo reemplazado por .NET MAUI como su sucesor oficial.

C#.NETXAMLMobile

Demanda del mercado

Xamarin Forms tiene demanda estable especialmente en empresas con equipos .NET que necesitan presencia móvil sin adoptar nuevas tecnologías. Con la transición hacia .NET MAUI, los proyectos nuevos tienden a usar MAUI, pero el mantenimiento de proyectos Xamarin existentes sigue generando demanda en el mercado.

Demanda en mantenimiento de proyectos existentesAlta adopción en ecosistema .NETTransición activa hacia .NET MAUI

Requisitos técnicos

Intermediate

Requiere dominio de C#, programación orientada a objetos y familiaridad con el ecosistema .NET. Conocimiento de XAML para definir interfaces de usuario y comprensión del patrón MVVM es esencial para proyectos Xamarin Forms bien estructurados.

Casos de uso

Proyectos Reales

Xamarin Forms se utiliza para desarrollar:

  • Aplicaciones empresariales móviles en ecosistemas .NET
  • Apps de productividad interna para empleados
  • Aplicaciones de campo con acceso a APIs del dispositivo
  • Sistemas móviles integrados con backends .NET o Azure

Tipos de Empresa

Xamarin Forms es adoptado por:

  • Empresas con equipos .NET que necesitan aplicaciones móviles
  • Organizaciones del ecosistema Microsoft con stack Azure
  • Compañías que migran aplicaciones WPF o WinForms hacia móvil
  • Empresas con sistemas ERP o CRM que necesitan cliente móvil

Escenarios de Producción

Xamarin Forms es ampliamente utilizado en entornos productivos como:

  • Aplicaciones con autenticación Azure AD y MSAL
  • Apps con acceso a cámara, GPS y sensores del dispositivo
  • Aplicaciones con modo offline y sincronización con backend .NET
  • Sistemas con integración profunda con servicios Microsoft como Office 365

Escalabilidad

Xamarin Forms ofrece múltiples mecanismos para escalar aplicaciones:

  • Shell para navegación estructurada en aplicaciones complejas
  • DependencyService para acceso a funcionalidades nativas por plataforma
  • MessagingCenter para comunicación desacoplada entre componentes
  • Lazy loading de páginas para optimizar el tiempo de arranque

Ventajas y Desventajas

Ventajas

Reutilización del conocimiento C# y .NET para desarrollo móvil sin nuevos lenguajes.

Integración natural con el ecosistema Microsoft incluyendo Azure y Active Directory.

Compilación a código nativo que ofrece mejor rendimiento que soluciones WebView.

Desventajas

En proceso de deprecación con .NET MAUI como sucesor recomendado para proyectos nuevos.

Curva de aprendizaje en XAML y en las diferencias de comportamiento entre plataformas.

Comunidad más pequeña que React Native o Flutter con menos recursos disponibles.

Comparación

Ventajas de .NET MAUI

  • Sucesor oficial con soporte a largo plazo de Microsoft
  • Soporte adicional para Windows y macOS además de móvil
  • Arquitectura mejorada con mejor rendimiento y herramientas

Consideraciones

MAUI es el sucesor directo de Xamarin Forms con la misma filosofía pero arquitectura modernizada. Para proyectos nuevos MAUI es la opción recomendada. Xamarin Forms sigue siendo relevante para mantenimiento de proyectos existentes.

Preguntas básicas

Xamarin Forms permite reutilizar el conocimiento de C# y .NET del equipo existente sin adoptar JavaScript ni el ecosistema npm. La integración con Azure, Azure Active Directory y otros servicios Microsoft es más natural y la compilación a código nativo ofrece mejor rendimiento que las soluciones WebView.
Xamarin Forms comparte la interfaz de usuario entre plataformas mediante controles abstractos que se renderizan como componentes nativos en cada plataforma. Xamarin nativo comparte la lógica de negocio en C# pero define la UI específicamente para cada plataforma con los componentes nativos de iOS y Android, ofreciendo mayor control pero menos reutilización.
MVVM separa la Vista en XAML del ViewModel con la lógica de presentación y el Model con los datos. El data binding de Xamarin conecta la Vista con el ViewModel sin código en code-behind, haciendo el código más testeable, mantenible y reutilizable. Es el patrón recomendado porque facilita los tests unitarios del ViewModel sin depender de la UI.
XAML es más legible para definir jerarquías de UI, permite separar la estructura visual de la lógica en el code-behind y es compatible con diseñadores visuales. El data binding se expresa de forma más clara en XAML y los diseñadores no técnicos pueden entender y modificar la estructura sin conocer C#.
Mediante DependencyService que permite definir una interfaz en el código compartido e implementarla en cada proyecto de plataforma con el atributo Dependency. El código compartido llama a la interfaz y Xamarin resuelve en runtime la implementación correcta para iOS o Android.
Xamarin Forms está en modo mantenimiento con .NET MAUI como su sucesor oficial. Microsoft recomienda MAUI para proyectos nuevos. Para organizaciones con proyectos Xamarin Forms existentes la migración a MAUI es el camino recomendado, aunque el soporte de Xamarin Forms continúa hasta mayo de 2024.
Shell provee una estructura de navegación simplificada para aplicaciones con flyout menu, tabs y stack de páginas configurado en un único archivo XAML. Simplifica la arquitectura de navegación de aplicaciones complejas sin gestionar manualmente NavigationPage, TabbedPage y FlyoutPage por separado.
En empresas con equipos .NET consolidados que necesitan aplicaciones móviles integradas con sistemas Microsoft, en proyectos con requisitos de seguridad que favorecen el ecosistema Microsoft, o en organizaciones donde la reutilización del conocimiento C# y la integración con Azure Active Directory son factores determinantes.

Preguntas técnicas

Vinculando las propiedades del ViewModel con Mode=TwoWay en el XAML y asegurando que el ViewModel implementa INotifyPropertyChanged notificando los cambios con OnPropertyChanged. El BindingContext de la página se establece al ViewModel y el framework gestiona la sincronización automática entre la UI y el ViewModel.
Los Commands implementan ICommand y se vinculan a acciones en XAML con Command binding, manteniendo la lógica en el ViewModel y facilitando el testing unitario. Los event handlers en code-behind acoplan la lógica a la Vista y son más difíciles de testear. Commands son la práctica recomendada en MVVM.
Usando un servicio de navegación inyectado en los ViewModels que abstrae la NavigationPage de Xamarin, permitiendo navegar desde el ViewModel sin referencias directas a la Vista. Frameworks como Prism o MvvmCross proveen estos servicios de navegación ya implementados con soporte para paso de parámetros entre páginas.
Creando una clase que hereda del renderer nativo correspondiente en cada proyecto de plataforma y decorándola con ExportRenderer. Esto permite personalizar el comportamiento visual o de comportamiento de un control Xamarin más allá de lo que las propiedades estándar permiten, accediendo directamente al control nativo subyacente.
Sobreescribiendo los métodos OnStart, OnSleep y OnResume en la clase App para gestionar el estado de la aplicación al iniciar, pasar a segundo plano y volver al primer plano. Para el ciclo de vida de páginas individuales se usan OnAppearing y OnDisappearing que se ejecutan al navegar a la página o salir de ella.
Usando la librería MSAL para Xamarin que gestiona el flujo OAuth2 con Azure AD. Se configura el cliente MSAL con el ClientId y el Tenant, se llama a AcquireTokenInteractive para la autenticación inicial con la UI del sistema y a AcquireTokenSilent para renovar tokens sin interacción del usuario, almacenando el token en el caché de MSAL.
CollectionView es la implementación moderna que reemplaza a ListView con mejor rendimiento, soporte para layouts de grid y horizontal, selección múltiple y sin separadores obligatorios. ListView tiene mayor compatibilidad con versiones antiguas pero CollectionView es la opción recomendada para nuevos proyectos por su mayor flexibilidad y rendimiento.
Usando Xamarin Essentials Preferences para datos clave-valor simples, SQLite con sqlite-net-pcl para datos estructurados con queries, o Akavache para caché de objetos con persistencia. La elección depende de la complejidad de los datos, los requisitos de búsqueda y si se necesita sincronización con un backend.

Preguntas avanzadas

Usando Prism como framework MVVM que provee inyección de dependencias, navegación por ViewModel, módulos cargables dinámicamente y gestión de eventos desacoplada. La aplicación se divide en proyectos de módulo independientes que se registran en el contenedor de Prism, facilitando el desarrollo en paralelo por equipos distintos.
Usando el upgrade assistant de Microsoft que automatiza gran parte de los cambios en archivos de proyecto y referencias de namespaces, migrando de Renderers a Handlers que es el nuevo modelo de MAUI, actualizando las dependencias de NuGet a versiones compatibles con MAUI y verificando el comportamiento en cada plataforma tras la migración.
Usando CollectionView con RecycleElement strategy para reutilizar celdas, implementando carga lazy de imágenes con FFImageLoading, reduciendo la complejidad visual de las celdas minimizando layouts anidados, usando BindableLayout solo para listas pequeñas y considerando virtualización con DataVirtualization para datasets muy grandes.
Usando Appium con el driver de Xamarin.UITest que permite interactuar con los controles nativos por AutomationId en iOS y Android. Los tests se escriben en C# y se ejecutan en dispositivos reales o emuladores en servicios como App Center Test o BrowserStack, verificando flujos críticos de usuario de forma automatizada.
Implementando una capa de repositorio que abstrae el origen de datos, usando SQLite como store local, sincronización diferencial con el servidor cuando hay conectividad, gestión de conflictos de sincronización con estrategia last-write-wins o merge según el dominio y Connectivity API de Xamarin Essentials para detectar cambios de red.
Cuando el proyecto está en fase de mantenimiento con bajo ritmo de cambios y la migración no aporta valor de negocio inmediato, cuando hay dependencias críticas de plugins Xamarin sin equivalente en MAUI aún o cuando el equipo está en proceso de adoptar .NET MAUI de forma gradual empezando por nuevos proyectos.

Errores comunes en entrevistas

Desconocer que Xamarin Forms está en proceso de deprecación y que MAUI es su sucesor oficial refleja falta de seguimiento del ecosistema. En entrevistas actuales se espera conocer el estado del framework y las implicaciones para proyectos nuevos y existentes.
Poner lógica de negocio en el code-behind de las páginas XAML en lugar del ViewModel refleja no entender el patrón MVVM que es fundamental en Xamarin Forms. Es uno de los antipatrones más frecuentes y visibles en código reviews.
Usar event handlers en code-behind en lugar de Commands vinculados al ViewModel acopla la lógica a la Vista y dificulta el testing. En entrevistas se espera conocer ICommand y RelayCommand como parte del patrón MVVM en Xamarin Forms.
No saber cómo acceder a funcionalidades específicas de plataforma desde el código compartido refleja experiencia limitada desarrollando aplicaciones Xamarin Forms con requisitos más allá de la UI básica.
Proponer Xamarin Forms para un proyecto nuevo sin evaluar .NET MAUI refleja desactualización. Se espera conocer que MAUI es la opción recomendada para proyectos nuevos y poder articular cuándo aún tiene sentido comenzar con Xamarin Forms.
Usar ListView para nuevas implementaciones de listas sin conocer CollectionView refleja no seguir las recomendaciones actuales de Xamarin Forms. CollectionView es más eficiente y flexible y es la práctica recomendada en versiones actuales.