Actualización de aplicaciones Mac existentes
La actualización de una aplicación existente para usar Unified API requiere cambios en el propio archivo del proyecto, así como en los espacios de nombres y las API que se usan en el código de la aplicación.
Compatibilidad con 64 bits
Las nuevas API unificadas son necesarias para admitir arquitecturas de dispositivos de 64 bits desde una aplicación de Xamarin.Mac. A partir del 1 de febrero de 2015 Apple requiere que todos los nuevos envíos de aplicaciones a Mac App Store admitan arquitecturas de 64 bits.
Xamarin proporciona herramientas para Visual Studio para Mac y Visual Studio para automatizar el proceso de migración de Classic API a Unified API o el usuario puede convertir los archivos de proyecto manualmente. Aunque se recomienda usar las herramientas automáticas, en este artículo se tratarán ambos métodos.
Antes de empezar...
Antes de actualizar el código existente a Unified API, se recomienda eliminar todas las advertencias de compilación. Muchas advertencias de Classic API se convertirán en errores una vez que migre a Unified. Corregirlas antes de empezar es más fácil porque los mensajes del compilador de Classic API suelen proporcionar sugerencias sobre qué actualizar.
Actualización automatizada
Una vez que se han corregido las advertencias, seleccione un proyecto de Mac existente en Visual Studio para Mac o Visual Studio y elija Migrar a Unified API de Xamarin.Mac en el menú Proyecto. Por ejemplo:
Deberá aceptar esta advertencia antes de que se ejecute la migración automatizada (obviamente debe asegurarse de que tiene copias de seguridad o control de código fuente antes de embarcarse en esta aventura):
Hay dos tipos de marcos de destino compatibles que se pueden seleccionar al usar Unified API en una aplicación de Xamarin.Mac:
- Xamarin.Mac Mobile Framework: se trata del mismo marco de .NET optimizado que usan Xamarin.iOS y Xamarin.Android que admite un subconjunto del marco completo de Escritorio . Este es el marco recomendado porque proporciona archivos binarios promedio más pequeños debido a un comportamiento superior de vinculación.
- Xamarin.Mac .NET 4.5 Framework: este marco es de nuevo un subconjunto del marco de Escritorio . Sin embargo, recorta mucho menos del marco completo de Escritorio que el marco de Móvil y debería "funcionar" con la mayoría de paquetes NuGet o bibliotecas de terceros. Esto permite al desarrollador consumir ensamblados estándar de Escritorio sin dejar de usar un marco compatible, pero esta opción produce paquetes de aplicaciones más grandes. Este es el marco recomendado cuando se usan ensamblados .NET de terceros que no son compatibles con Xamarin.Mac Mobile Framework. Para ver una lista de los ensamblados compatibles, consulte nuestra documentación sobre Ensamblados.
Para obtener información detallada sobre los marcos de destino y las implicaciones de seleccionar un destino específico para su aplicación de Xamarin.Mac, consulte nuestra documentación sobre Marcos de destino.
Básicamente, la herramienta automatiza todos los pasos descritos en la sección Actualización manual que se presenta a continuación y es el método sugerido para convertir un proyecto de Xamarin.Mac existente en Unified API.
Pasos para actualizar manualmente
De nuevo, una vez que se hayan solucionado las advertencias, siga estos pasos para actualizar manualmente las aplicaciones de Xamarin.Mac para usar la nueva Unified API:
1. Actualizar el tipo de proyecto y destino de compilación
Cambie el tipo de proyecto en los archivos csproj de 42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23
a A3F8F2AB-B479-4A4A-A458-A89E7DC349F1
. Edite el archivo csproj en un editor de texto y reemplace el primer elemento del elemento <ProjectTypeGuids>
como se muestra:
Cambie el elemento Import que contiene Xamarin.Mac.targets
a Xamarin.Mac.CSharp.targets
como se muestra:
Agregue las siguientes líneas de código después del elemento <AssemblyName>
:
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>
Ejemplo:
2. Actualizar las referencias del proyecto
Expanda el nodo Referencias del proyecto de aplicación Mac. Inicialmente mostrará una referencia *broken- XamMac similar a esta captura de pantalla (porque se acaba de cambiar el tipo de proyecto):
Haga clic en el Icono de engranaje situado junto a la entrada de XamMac y seleccione Eliminar para eliminar la referencia rota.
A continuación, haga clic con el botón derecho del ratón en la carpeta Referencias del Explorador de soluciones y seleccione Editar referencias. Desplácese hasta el final de la lista de referencias y coloque una marca junto a Xamarin.Mac.
Presione Aceptar para guardar los cambios de referencia del proyecto.
3. Eliminación de MonoMac de espacios de nombres
Quite el prefijo MonoMac de los espacios de nombres en las instrucciones using
o dondequiera que un nombre de clase se haya completado (por ejemplo MonoMac.AppKit
, se convierte en solo AppKit
).
4. Reasignar tipos
Se han introducido tipos nativos que reemplazan algunos tipos que se usaron anteriormente, como instancias de System.Drawing.RectangleF
por CoreGraphics.CGRect
(por ejemplo). La lista completa de tipos se puede encontrar en la página de tipos nativos.
5. Corregir invalidaciones de método
Algunos métodos AppKit
han cambiado su firma para usar los nuevos tipos nativos (como nint
). Si las subclases personalizadas invalidan estos métodos, las firmas ya no coincidirán y producirán errores. Corrija estas invalidaciones de método cambiando la subclase para que coincida con la nueva firma mediante tipos nativos.
Consideraciones
Se deben tener en cuenta las siguientes consideraciones al convertir un proyecto de Xamarin.Mac existente de Classic API a la nueva Unified API si esa aplicación se basa en uno o varios componentes o paquetes NuGet.
Componentes
Cualquier componente que haya incluido en la aplicación también tendrá que actualizarse a Unified API u obtendrá un conflicto al intentar compilar. Para cualquier componente incluido, reemplace la versión actual por una nueva versión del almacén de componentes de Xamarin que admita Unified API y realice una compilación limpia. Cualquier componente que aún no haya sido convertido por el autor mostrará una advertencia de solo 32 bits en el almacén de componentes.
Compatibilidad con NuGet
Aunque hemos contribuido a los cambios en NuGet para trabajar con la compatibilidad con Unified API, no se ha producido una nueva versión de NuGet, por lo que estamos evaluando cómo obtener NuGet para reconocer las nuevas API.
Hasta ese momento, al igual que los componentes, deberá cambiar cualquier paquete NuGet que haya incluido en el proyecto a una versión que admita Unified API y realice una compilación limpia después.
Importante
Si recibe un error de tipo "Error 3: No se puede incluir 'monomac.dll' y 'Xamarin.Mac.dll' en el mismo proyecto de Xamarin.Mac: se hace referencia a 'Xamarin.Mac.dll' explícitamente, mientras que se hace referencia a 'monomac.dll' mediante 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'" después de convertir la aplicación a las Unified API, normalmente se debe a tener un componente o un paquete NuGet en el proyecto que no se ha actualizado a Unified API. Deberá quitar el componente o NuGet existente, actualizar a una versión que admita Unified API y realizar una compilación limpia.
Habilitación de compilaciones de 64 bits de aplicaciones de Xamarin.Mac
Para una aplicación móvil de Xamarin.Mac que se ha convertido a Unified API, el desarrollador todavía necesitará habilitar la compilación de la aplicación para máquinas de 64 bits desde las opciones de la aplicación. Consulte el documento Habilitación de compilaciones de 64 bits de aplicaciones de Xamarin.Mac del documento Consideraciones sobre la plataforma de 32/64 bits para obtener instrucciones detalladas sobre cómo habilitar compilaciones de 64 bits.
Finalización
Tanto si decide usar el método automático o manual para convertir la aplicación de Xamarin.Mac de Classic API a Unified API, hay varias instancias que requerirán una intervención manual adicional. Consulte nuestro documento Recomendaciones para actualizar código a Unified API para ver los problemas conocidos y solucionar problemas.