¿Cómo puedo migrar mi aplicación a la versión 5.0 de Xamarin.Forms?

Xamarin.Forms 5.0 incluye los siguientes cambios importantes:

  • Expander se ha movido al kit de herramientas de la comunidad de Xamarin. Para obtener más información, consulte Características movidas de Xamarin.Forms.
  • MediaElement se ha movido al kit de herramientas de la comunidad de Xamarin. Para obtener más información, consulte Características movidas de Xamarin.Forms.
  • DataPages y los proyectos asociados se han quitado de Xamarin.Forms.
  • Se ha cambiado el nombre de MasterDetailPage a FlyoutPage. Del mismo modo, se ha cambiado el nombre de la enumeración MasterBehavior a FlyoutLayoutBehavior.
  • Las referencias a UIWebView se han quitado de Xamarin.Forms en iOS.
  • Se ha quitado la compatibilidad con Visual Studio 2017.
  • XFCorePostProcessor.Tasks se ha quitado. Este proyecto insertó IL para mantener la compatibilidad con Xamarin.Forms 2.5.

Además, los proyectos de Android y UWP creados con Xamarin.Forms la versión 5.0 requerirán la actualización.

Importante

Al actualizar una aplicación a Xamarin.Forms 5.0, asegúrese de actualizar cada proyecto que haga referencia al paquete NuGet de Xamarin.Forms a una versión idéntica.

Android

Los proyectos de Android creados con Xamarin.Forms 5.0 requieren que haya instalado la plataforma AndroidX (Android 10.0) en su entorno de desarrollo. Esto se puede lograr con el administrador de Android SDK. Para obtener más información sobre AndroidX, consulte Migración de AndroidX en Xamarin.Forms.

A continuación, los proyectos de Android requerirán varias actualizaciones para compilarse correctamente.

Minimum TargetFrameworkVersion

Xamarin.Forms 5.0 requiere una versión mínima del marco de destino de 10.0 (AndroidX) para proyectos de Android. La versión de la plataforma de destino se puede establecer en Visual Studio o en el archivo .csproj de Android:

<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>

Se producirá un error de compilación si no se cumple este requisito mínimo:

error XF005: The $(TargetFrameworkVersion) for MyProject.Android (v9.0) is less than the minimum required $(TargetFrameworkVersion) for Xamarin.Forms (10.0). You need to increase the $(TargetFrameworkVersion) for MyProject.Android.

TargetSDKVersion mínimo

AndroidX requiere que el manifiesto de Android establezca en targetSdkVersion 29+:

<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />

Si no se hace esto, el targetSdkVersion se establecerá en el minSdkVersion. Además, en algunas circunstancias, se producirá un Android.Views.InflateException si el targetSdkVersion no está configurado correctamente:

Android.View.InflateException has been thrown.

Binary XML file line #1 in com.companyname.myproject:layout/toolbar: Binary XML file line #1 in com.companyname.myproject:/layout/toolbar: Error inflating class android.support.v7.widget.Toolbar

Nota:

En Visual Studio 2019, el manifiesto de Android se actualizará automáticamente para especificar una targetSdkVersion de API 29 cuando la versión de la plataforma de destino esté establecida en v10.0.

Migración automática a AndroidX

Si el proyecto de Android hace referencia a bibliotecas compatibles con Android, ya sea como dependencias directas o dependencias transitivas, estas dependencias y enlaces de biblioteca de compatibilidad se intercambian automáticamente con dependencias de AndroidX durante el proceso de compilación. Para obtener más información sobre la migración automática de AndroidX, consulte Migración automática en Xamarin.Forms.

Migración manual a AndroidX

Si el proyecto de Android no tiene dependencias directas o transitivas en bibliotecas de soporte técnico de Android, pero sigue intentando consumir tipos de biblioteca de soporte técnico a través del código, tendrá que migrar manualmente la aplicación a AndroidX. Esto se puede lograr mediante tipos AndroidX y quitando los archivos AXML que no haya personalizado.

Sugerencia

La migración manual a AndroidX dará lugar al proceso de compilación más rápido para la aplicación.

Uso de tipos de AndroidX

AndroidX reemplaza las bibliotecas de compatibilidad de Android y, por tanto, las referencias a los tipos de biblioteca de soporte técnico de Android deben reemplazarse por referencias a tipos AndroidX.

Esto se puede lograr mediante la actualización de las instrucciones using para usar espacios de nombres AndroidX, en lugar de espacios de nombres Android.Support. En la tabla siguiente se enumeran algunos de los cambios comunes del espacio de nombres al pasar de las bibliotecas de compatibilidad de Android a AndroidX:

Espacio de nombres de la biblioteca de compatibilidad de Android Espacio de nombres de AndroidX
Android.Support.V4.App AndroidX.Core.App
Android.Support.V4.Content AndroidX.Core.Content
Android.Support.V4.App AndroidX.Fragment.App
Android.Support.V7.App AndroidX.AppCompat.App
Android.Support.V7.Widget AndroidX.AppCompat.Widget

Para obtener una lista completa de las asignaciones de clases de bibliotecas de soporte técnico a AndroidX, consulte Asignaciones de clases de AndroidX en github.com. Para obtener una lista completa de las asignaciones de ensamblados de bibliotecas de soporte técnico a AndroidX, consulte Ensamblados de AndroidX en github.com

Eliminación de archivos AXML

Debe eliminar los archivos AXML del proyecto de Android, siempre que no use archivos AXML personalizados. Después de la eliminación, se deben quitar las siguientes líneas de la clase MainActivity:

TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;

Importante

Los proyectos de Android con archivos AXML personalizados deben actualizarse para que estos archivos usen tipos AndroidX.

UWP

Xamarin.Forms 5.0 recomienda una versión de plataforma de destino de >= 10.0.18362.0 para proyectos de UWP. La versión de la plataforma de destino se puede establecer en Visual Studio o en el archivo .csproj de UWP:

<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.18362.0</TargetPlatformVersion>

Se producirá una advertencia de compilación si el proyecto de UWP usa una versión de plataforma de destino inferior.