El día de hoy, durante el Microsoft Build, se presento .NET  Multiplatform App UI (MAUI). Que dentro de sus características tiene ser el sucesor de Xamarin.Forms.

De acuerdo con lo presentado surgen muchas dudas, las principales son

  • ¿Xamarin va a morir?
  • ¿Qué pasa con mis apps Xamarin?
  • ¿Vale la pena seguir con Xamarin?
  • Es un Silverligth, un Flutter con C#… 
  • ¿Y lo que ya se? XAML, bindings, funcionalidades nativas, MVVM…

También hay muchas teorías conspiranoicas sobre MAUI. En este post trataré de resumir lo que se ha presentado sobre este tema. 

.NET 5

Primero, creo importante hablar sobre .NET 5, la nueva versión de .NET que nos va a facilitar trabajar con las implementaciones de .NET que actualmente mantiene Microsoft

  • .NET Framework (WPF, WinForms, ASP.NET)
  • .NET Core (ASP.NET Core, UWP)
  • Mono (Xamarin.Android, Xamarin.iOS, Xamarin.Mac)

La idea con .NET 5 es muy simple, en lugar de ver las implementaciones por separado todo se unifica. De esta forma para el desarrollador es más transparente programar para varias plataformas.

Hace tiempo hice un post sobre .NET Standard, creo que vale la pena leerlo debido a que como se ve en la imagen es parte de los conceptos base sobre .NET 5. Al final del post dejaré los enlaces.

MAUI llegará con .NET 6 en noviembre de 2021 , es decir, tenemos año y medio donde Xamarin seguirá evolucionando y teniendo soporte. Y por supuesto, tendremos tiempo para que el cambio a MAUI no sea complicado.

El plan actual mostrado por Microsoft es el siguiente

¿Qué es MAUI?

Es un tipo de proyecto multiplataforma, donde una de las diferencias fuertes es que ya solo tendremos un proyecto el cual puede ser desplegado en diferentes plataformas (Android, iOS, MAC, Windows…). Actualmente una solución de Xamarin.Forms tiene un proyecto compartido y uno extra por cada plataforma. 

Aquí podemos ver la diferencia

Al igual que Xamarin, MAUI es un proyecto Open Source y ya esta disponible el repositorio. Al final dejaré todos los enlaces útiles.

MAUI 

¿En que nos beneficia este cambio?

Con MAUI nos evitamos el trabajo de tener archivos dispersos entre varios proyectos.

Algunos ejemplos serían:

  • Cuando es necesario integrar una funcionalidad nativa como el bluetooth, mapas muy personalizados, interacción con el sensor de huellas, etc.  Debemos crear ese código directamente en su proyecto correspondiente, Android o iOS. En MAUI desde el proyecto central va a existir un lugar donde podremos agregar las funcionalidades especificas de las plataformas.
  • En Android cada imagen debe agregarse en diferentes tamaños y en carpetas diferentes con una nomenclatura especifica (mdpi, hdpi, xhdpi, ldpi, etc.), algo ligeramente parecido ocurre con iOS; en ambas plataformas hay procesos similares para fuentes u otros recursos binarios.  En MAUI con solo poner los recursos (imágenes, fuentes, etc.) en un solo sitio de forma interna este se encarga de ajustarlos a iOS y Android.
  • En Xamarin cuando queremos ejecutar nuestra App debemos ir al proyecto respectivo a la plataforma que deseamos probar e iniciar la ejecución desde ahí. Ahora desde el botón de ejecutar podremos elegir el dispositivo destino directamente sin tener que cambiar de proyecto, el cual puede ser nuestro equipo, un emulador, un iPhone, un dispositivo Android, etc.

¿Qué ocurre con lo que ya conozco sobre Xamarin? XAML, MVVM, .NET Standard, etc.

De acuerdo con lo dicho durante Microsoft Build, en términos reales ocurre muy poco, prácticamente nada. XAML, los data binding y la mayoría del código que conocemos seguirán igual. Se esta trabajando para que los custom renderers sea más eficientes sin necesidad de cambiarnos mucho lo que usamos actualmente.

Hay un par de temas que parecen ser muy llamativos.

  • Durante las sesiones se hablo de crear la interfaz de usuario de forma declarativa, como es común en Flutter, Swift UI o React. Esto no quiere decir que XAML vaya a ser desplazado y tampoco es algo totalmente nuevo. 

En la versión 4.6 de Xamarin se agrego Xamarin.Forms C# Markup, una funcionalidad que aun esta en preview, sin embargo, es similar a lo presentado con MAUI. La diferencia esta en que MAUI puede trabajar con el patrón Model-View-Update (MVU) y actualmente en Xamarin.Forms se sigue trabajando con MVVM. 

Hasta cierto punto la curva de aprendizaje no se ve muy complicada, aunque hay que esperar a tener más noticias sobre como funcionara MVU en MAUI.

  • Otra de las cosas que llamaron la atención es la capacidad de ejecutar la app directamente en el iPhone. Esto es muy similar a lo que se puede lograr en Xamarin.Forms con Hot Restart.

En una de las sesiones se menciono que se requiere una cuenta Apple (puede ser la gratuita) y tener iTunes en el equipo Windows. Teniendo esto podemos ejecutar la App en un dispositivo físico sin necesidad de la Mac, sin embargo, para publicar la App aun se requiere una Mac que genere el paquete y lo suba a la tienda.

Dentro de los cambios sobresalientes esta el cambio en los espacios de nombres.

Xamarin.Forms –se cambia por- System.MAUI

Xamarin.Essentials –se cambia por– System.Devices

Otros cambios en nomenclatura son: 

Xamarin.iOS ahora es .NET for iOS

Xamarin.Android ahora es .NET for Android

Sobre las herramientas de desarrollo, Visual Studio 2019 y Visual Studio 2019 For Mac permitirán crear y trabajar con proyectos MAUI, se agrega la capacidad de trabajar con Visual Studio Code, pudiendo crear el proyecto desde la línea de comandos con “dotnet new maui”.

Comparativa con Xamarin.Forms

¿Qué pasa con las apps que ya tengo y las que puedo hacer antes de que llegue MAUI?

En la sección de preguntas de una de las sesiones del Build, se manejo la opción de tener una herramienta que agilice el proceso de migración desde Xamarin.Forms a MAUI y al nuevo estilo de proyecto. De cualquier modo, no debería haber problemas muy grandes, se hizo énfasis en lo siguiente.

  • Las APIs de iOS y Android no tendrán cambios.
  • XAML y MVVM seguirán funcionando tal cual lo conocemos.
  • Principalmente hay que modificar los nombres de los namespaces que mencione anteriormente
  • Los Custom Renderers tendrán cambios, pero el equipo de Xamarin buscará que no sean muy fuertes 
  • Xamarin.Forms 5.0 será la última versión grande que se lanzará, después seguirá teniendo mejoras en los ciclos de 6 semanas, como actualmente, hasta la llegada de MAUI.

 Mi punto de vista es… podemos seguir adelante con Xamarin, siempre y cuando comencemos a cuidar más la estructura de nuestros proyectos, teniendo en cuenta los avances de .NET 5 y comprendiendo como funciona .NET Standard. De este modo la migración a MAUI no será un dolor de cabeza.

El equipo de Xamarin ha insistido en que harán lo posible en que el cambio sea lo más transparente para nosotros, así como que lo que tengamos siga siendo compatible sin tener que realizar cambios drásticos.

De momento no hay mucha información para tomar decisiones fuertes, lo mejor es esperar a que haya más anuncios durante la .NET Conf 2020

Recursos

Repositorio de MAUI

https://github.com/dotnet/maui

Xamarin Updates From Microsoft Build

https://devblogs.microsoft.com/xamarin/microsoft-build-2020-xamarin/

Introducing .NET Multi-platform App UI

https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/

Introducing .NET 5

https://devblogs.microsoft.com/dotnet/introducing-net-5/

¿Qué es .NET Standard?

https://www.humbertojaimes.net/que-es-net-standard/


Humberto Jaimes
Humberto Jaimes

Me gusta ayudar a quienes están comenzando con el desarrollo móvil con Xamarin dando sesiones en línea, presenciales en universidades y también ayudo a las compañías que quieren capacitar a su equipo o en la creación de proyectos.

Leave a Reply

Your email address will not be published.