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.