Durante la Microsoft Build 2020 (19-21 de Mayo del 2020) Microsoft Presento MAUI la evolución de XAMARIN.
Recordemos que, en 2016, en la Xamarin Evolve se anuncio que Microsoft adquiría Xamarin. Después de múltiples avances y updates en 2020 Microsoft anuncia MAUI dentro de su programa “Viaje a un solo .NET” en el que basan toda la estrategia de .NET 6. Es decir, una plataforma con las herramientas necesarias para desarrollar un software para todas las plataformas bajo en nombre de Multi-platform App UI (de ahí las siglas MAUI).
En Resumen, MAUI pasara a ser un Framework mas de .NET 6
El soporte para MAC, se lleva acabo con Mac Catalyst que es un conjunto de APIs de Apple que permiten la ejecución de aplicaciones iOS en MacOS.
¿Multi-platform App UI?
MAUI es la evolución del archiconocido Xamarin.Forms, es decir un framework que nos permite crear interfaces nativas tanto para dispositivos móviles como para escritorio. La gran novedad en MAUI es que si en Xamarin.Forms necesitamos una solución para cada plataforma dentro de nuestro proyecto, ahora contaremos con una sola base para el código en un único proyecto.
MAUI seguirá usando Xaml para la UI añadiendo soporte para MVU. En cuanto a patrones, seguiremos contando con MVVM y admitirá el nuevo MVU (Model-View-Update) el cual añadiré soporte de Blazor.
Con el modelo MVU, Microsoft también presenta una manera unificada de construir la UI multiplataforma desde una única base de Código, es decir, nos permite escribir código de UI y lógica en C# como en el siguiente ejemplo:
Readonly State aux = 0; [Body] View body() => new StackLayout { new Label("El botón fue clicado {count} veces"), new Button(() => count.Value ++)) };
A su vez, lo que hoy conocemos como Xamarin.Essentials, se añade a MAUI bajo el namespace “System.Device” y desaparecen los namespaces específicos para cada plataforma englobándose todo en el nuevo “Microsoft.Maui”.
A su vez, aseguran desde Microsoft, que la paridad de APIs será del 100%, todo lo disponible en una plataforma, estará disponible al 100% en las demás. Por ejemplo, a día de hoy, en MacOS no se tiene acceso a Shell.
Todo esto junto a .NET 6 son las grandes novedades de MAUI que saldrá a el mercado en Noviembre 2021 junto a la salida de .NET 6, siendo Visual Studio el IDE para su desarrollo.
Desarrollo simplificado
Gracias a lo ya comentado sobre la simplificación del código a una sola solución que contenga el código para todas las plataformas, se busca simplificar el código, así como los tiempos.
Los recursos de aplicación como imágenes y sonidos serán gestionados por el sistema y se adaptan automáticamente para cada plataforma.
En definitiva, pasamos de tener en un mismo proyecto una solución con el código compartido, por otro lado, las soluciones de cada plataforma (iOS, Android… etc) a tener una única solución que da soporte a todo lo anteriormente comentado.
Migración Xamarin.Forms a MAUI
Para la migración de aplicaciones Xamarin.Forms a aplicaciones MAUI contaremos con una herramienta (a día de hoy por línea de comandos, pero no se descarta que llegue a el IDE). Esta herramienta realizara los siguientes cambios:
- Convertir el proyecto csproj a SDK Style
- Actualizar target framework monikers
- Cambiar namespaces en los casos necesarios
- CUSTOM RENDERS* Microsoft.Maui.Compatibility
Que no hace esta herramienta:
- Migrar a “Single proyect”
- Corregir APIs deprecadas
- Reescribir Custom Renderers a los nuevos “Handlers”
El cambio mas importante con MAUI es que “desaparecen” los Renderers dando paso a los nuevos Handlers.
Este cambio lo que busca:
1) Facilitar la accesibilidad
2) Mejora en tiempos de carga y rendimiento general de la app
3) Acceso directo a código nativos desde código multiplataforma.
La herramienta de migración usara Microsoft.Maui.Compatibility para compatibilizar los antiguos renderers, pero desde Microsoft se nos recomienda ampliamente la traducción de estos renderers a los nuevos Handlers.
Por lo tanto, sobre este aspecto, tenemos dos opciones diferenciadas:
- Usar Handlers:
- Requiere algo de tiempo para realizar la conversión de código
- Cada handler es equivalente a un Fast Renderer en conjunto con cambios en Layouts para buscar las mejoras de rendimiento
- Permite mas opciones de extensibilidad.
- Usar renderers:
- No requiere cambios
- No hay ventajas añadidas.
El paquete Microsoft.Maui.Compatibility es un paquete NuGet (aun no existe) con el que podemos compatibilizar todas aquellas “cosas” de Xamarin.Forms hasta que se pueda completar la migración a MAUI, tales como:
- Compatibility package
- Renderers
- Obsoleted
En cuanto a las librerías de terceros, desde Microsoft aseguran que ya están trabajando en las migraciones de estas librerías a .NET 6 y optimizando para MAUI, además tienen reuniones mensuales para ayudar a las migraciones.
Road Map Xamarin.Forms to MAUI
Xamarin forms, continuara evolucionando y mejorando, sin añadir nuevas funcionalidades ni nuevas APIs hasta el lanzamiento de MAUI. Una vez publicado MAUI, Xamarin.Forms contara con un soporte de 12 meses.
El Roadmap actual de MAUI es el siguiente:
PREVIEW 1 (ya disponible)
- Incluye: Runtime y BCL, Mobile Workloads
- Destinado a Colaboradores
PREVIEW 2 (ya disponible)
- Incluye:
- .Net MAUI views y layouts básicos.
- Android, iOS y MacOS
- Destinado a colaboradores.
PREVIEW 3 y 4
- Incluye:
- .NET MAUI con la mayoría de controles layouts, paginas y servicios
- WinUI 3
- Destinado a desarrolladores
- En este punto ya se pude comenzar a probar, crear apps, abrir issues.
- Se abre una conversación en DISCORD para poner en contacto a todos los “testers”
PREVIEW 5 RELEASE CANDIDATE
- Incluye:
- .NET MAUI, APIs faltantes y feedback recogido en Preview 3 y 4
- Destinado a todo el mundo
- Se podrá migrar Apps existentes escritas en Xamarin.Forms.