Saltar al contenido
Ende Sun
Volver al blog

Ingeniería

Migrar una app móvil de Xamarin a .NET MAUI

3 min de lectura

Migrar una app móvil de Xamarin a .NET MAUI

Contexto

Xamarin llegó a su fecha de fin de soporte, lo que significaba que la app móvil de Osunasport tenía un reloj en marcha: quedarse en Xamarin implicaba un framework sin soporte, sin futuras actualizaciones de seguridad o de tooling y, con el tiempo, incompatibilidad con nuevas versiones de los sistemas operativos. .NET MAUI, como sucesor oficial de Microsoft, era el destino evidente: reutiliza la mayor parte del conocimiento y las librerías .NET/C# ya en uso, en vez de forzar un salto a un stack completamente distinto como Flutter o React Native.

El proceso de migración

En lugar de tratarlo como un simple "sustituir el framework", la migración tocó toda la app:

  • Estructura del proyecto: MAUI unifica los antiguos proyectos por plataforma de Xamarin.Forms (iOS, Android, UWP) en un único proyecto compartido con carpetas específicas por plataforma, lo que obligó a reorganizar cómo se distribuían el código y los recursos de cada plataforma.
  • Navegación y ciclo de vida: las APIs de navegación y de ciclo de vida de MAUI difieren lo suficiente de Xamarin.Forms como para que la mayor parte del flujo de navegación de la app tuviera que revisarse, no solo recompilarse.
  • Dependencias de terceros: varias librerías exclusivas de Xamarin no tenían un equivalente directo en MAUI y se sustituyeron, o se envolvieron en handlers de plataforma personalizados donde no existía sustituto.
  • Rediseño de UI/UX: como de todos modos había que tocar la mayor parte de la capa de vistas, la migración se aprovechó para rediseñar el frontal de la app y mejorar su UI/UX en general, en vez de limitarse a trasladar las pantallas antiguas tal cual.

Una vez que la app fue estable sobre .NET MAUI, siguió una segunda migración más pequeña: la actualización de .NET 9 a .NET 10, cuando el tooling de MAUI y los paquetes de terceros ya estaban al día con ese runtime.

Diferencias clave encontradas

  • La estructura de proyecto único frente a varios proyectos por plataforma cambia cómo se organizan y referencian recursos, fuentes y código específico de plataforma.
  • Algunos renderers personalizados de Xamarin.Forms no tienen una correspondencia 1:1 con los handlers de MAUI, así que el comportamiento visual necesitó volver a probarse en iOS y Android en vez de darlo por heredado.
  • El tooling de compilación y empaquetado difiere lo suficiente como para que los pipelines de CI/CD necesitaran actualizarse junto con el código de la app.

Resultado

La app corre hoy sobre .NET MAUI / .NET 10, mantenida activamente, con una UI/UX renovada, desarrollada y mantenida de principio a fin por un único ingeniero junto con el trabajo de backend y arquitectura de la plataforma.