Compartir a través de


Actualización de aplicaciones iOS existentes

Siga estos pasos para actualizar una aplicación de Xamarin.iOS existente para que utilice Unified API.

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 Unified API son necesarias para admitir arquitecturas de dispositivos de 64 bits desde una aplicación móvil de Xamarin.iOS. Desde el 1 de febrero de 2015 Apple requiere que todos los nuevos envíos de aplicaciones a iTunes 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 iOS existente en Visual Studio para Mac o Visual Studio y elija Migrar a Unified API de Xamarin.iOS en el menú Proyecto. Por ejemplo:

Choose Migrate to Xamarin.iOS Unified API from the Project menu

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):

Agree to this warning before the automated migration will run

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.iOS existente en Unified API.

Pasos para actualizar manualmente

Cuando corrija las advertencias, siga estos pasos para actualizar manualmente las aplicaciones de Xamarin.iOS 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 6BC8ED88-2882-458C-8E55-DFD12B67127B a FEACFBD2-3405-455C-9665-78FE426C6842. Edite el archivo csproj en un editor de texto y reemplace el primer elemento del elemento <ProjectTypeGuids> como se muestra:

Edit the csproj file in a text editor, replacing the first item in the ProjectTypeGuids element as shown

Cambie el elemento Import que contiene Xamarin.MonoTouch.CSharp.targets a Xamarin.iOS.CSharp.targets como se muestra:

Change the Import element that contains Xamarin.MonoTouch.CSharp.targets to Xamarin.iOS.CSharp.targets as shown

2. Actualizar las referencias del proyecto

Expanda el nodo Referencias del proyecto de aplicación iOS. Inicialmente mostrará una referencia *broken- monotouch similar a esta captura de pantalla (porque se acaba de cambiar el tipo de proyecto):

It will initially show a broken- monotouch reference similar to this screenshot because the project type changed

Haga clic con el botón derecho en el proyecto de aplicación de iOS para editar referencias y, a continuación, haga clic en la referencia monotouch y elimínela con el botón rojo "X".

Right-click on the iOS application project to Edit References, then click on the monotouch reference and delete it using the red X button

Ahora desplácese hasta el final de la lista de referencias y marque el ensamblado de Xamarin.iOS.

Now scroll to the end of the references list and tick the Xamarin.iOS assembly

Presione Aceptar para guardar los cambios de referencia del proyecto.

3. Quitar MonoTouch de los espacios de nombres

Quite el prefijo MonoTouch de los espacios de nombres en las instrucciones using o dondequiera que un nombre de clase se haya completado (por ejemplo MonoTouch.UIKit, se convierte en solo UIKit).

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 UIKit 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.

Algunos ejemplos incluyen cambiar public override int NumberOfSections (UITableView tableView) para devolver nint y cambiar el tipo de valor devuelto y los tipos de parámetro en public override int RowsInSection (UITableView tableView, int section) por nint.

Consideraciones

Se deben tener en cuenta las siguientes consideraciones al convertir un proyecto de Xamarin.iOS 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 'monotouch.dll' y 'Xamarin.iOS.dll' en el mismo proyecto de Xamarin.iOS: se hace referencia a 'Xamarin.iOS.dll' explícitamente, mientras que se hace referencia a 'monotouch.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.iOS

Para una aplicación móvil de Xamarin.iOS 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.iOS 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.iOS 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.