Compartir vía


Compatibilidad con iOS 9

Incluso si no tiene previsto agregar características de iOS 9 a la aplicación inmediatamente, debe volver a compilar las aplicaciones con la versión más reciente de Xamarin.

Importante

La información de esta página es para los clientes con aplicaciones que ya están en App Store destinadas a iOS 8 o versiones anteriores, que aún no han enviado actualizaciones para la compatibilidad con iOS 9. Si ya usa las versiones más recientes (Xcode 7 y Xamarin.iOS 9) para el desarrollo de aplicaciones, visite la introducción a iOS 9.

Cuando aparecieron las primeras versiones beta de iOS 9, identificamos dos problemas con versiones anteriores de Xamarin que se manifestaron como aplicaciones anteriores que no se pueden iniciar en iOS 9:

  • Las aplicaciones compiladas para iOS 8 o versiones anteriores no se pueden iniciar en dispositivos de 32 bits (incluidas las aplicaciones compiladas con Unified API).
  • No se especifica el error P/Invoke con la ruta de acceso completa.

Al actualizar la instalación de Xamarin a la versión más reciente del canal estable y, a continuación, volver a generar y volver a implementar las aplicaciones, se corrigen estos dos problemas.

Incluso si no tiene previsto actualizar la aplicación con características de iOS 9 inmediatamente, se recomienda volver a compilar con la versión más reciente de Xamarin y volver a enviar a App Store.

Esto garantizará que la aplicación se ejecutará en iOS 9 después de la actualización de los clientes. Puede seguir admitiendo iOS 8: la recompilación con la versión más reciente no afecta a la versión de destino de la aplicación.

Si tiene más problemas al probar las aplicaciones existentes en iOS 9, lea la sección Mejora de la compatibilidad a continuación.

Actualización con Visual Studio

Se recomienda comprobar explícitamente que Visual Studio se actualiza a la versión estable más reciente.

¿Qué ocurre con componentes, Nugets y otras bibliotecas?

No es necesario esperar a que se usen nuevas versiones de ningún componente o nuget que use para solucionar los dos problemas mencionados anteriormente. Estos problemas se corrigen simplemente volviendo a compilar la aplicación con la versión estable más reciente de Xamarin.iOS.

Del mismo modo, no se requiere a los proveedores de componentes y a los autores de NuGet enviar nuevas compilaciones solo para corregir los dos problemas mencionados anteriormente. Sin embargo, si algún componente o NuGet usa UICollectionView o carga vistas de archivos Xib, puede que se requiera una actualización para solucionar los problemas de compatibilidad de iOS 9 mencionados a continuación.

Mejora de la compatibilidad en el código

Hay algunos casos de patrones de código que solían funcionar en versiones anteriores de iOS importantes en iOS 9. Estos son algunos posibles problemas (y sus soluciones) que pueden surgir al probar en iOS 9:

UICollectionViewCell.ContentView es null en constructores

Motivo: en iOS 9, el constructor initWithFrame: ahora es necesario debido a los cambios de comportamiento en iOS 9 como indica la documentación de UICollectionView. Si registró una clase para el identificador especificado y se debe crear una nueva celda, la celda ahora se inicializa llamando a su método initWithFrame:.

Corrección: agregue el constructor initWithFrame: de la siguiente manera:

[Export ("initWithFrame:")]
public YourCellClassName (CGRect frame) : base (frame)
{
    Initialize (); // refactor initialize code into a method
}

Ejemplos relacionados: MotionGraph, TextKitDemo

UIView no puede inicializarse con el codificador al cargar una vista desde un Xib/Nib

Motivo: el constructor initWithCoder: es el que se llama al cargar una vista desde un archivo Xib de Interface Builder. Si este constructor no se exporta, el código no administrado no puede llamar a nuestra versión administrada. Anteriormente (por ejemplo, en iOS 8), el constructor IntPtr se invocó para inicializar la vista.

Corrección: cree y exporte el constructor initWithCoder: de la siguiente manera:

[Export ("initWithCoder:")]
public YourClassName (NSCoder coder) : base (coder)
{
    Initialize (); // refactor initialize code into a method
}

Ejemplo relacionado: Chat

Mensaje de Dyld: sin imagen de caché con nombre...

Es posible que experimente un bloqueo con la siguiente información en el registro:

Dyld Error Message:
Dyld Message: no cache image with name (/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore)

Motivo: este es un error en el enlazador nativo de Apple, que sucede cuando hacen público un marco privado (JavaScriptCore se hizo público en iOS 7, antes de que fuera un marco privado) y el destino de implementación de la aplicación es para una versión de iOS de cuando el marco era privado. En este caso, el enlazador de Apple se vinculará con la versión privada del marco en lugar de la versión pública.

Corrección: esto se solucionará para iOS 9, pero hay una solución fácil que puede aplicarse mientras tanto: simplemente tener como destino una versión de iOS posterior en el proyecto (puede probar iOS 7 en este caso). Otros marcos podrían presentar problemas similares, por ejemplo, el marco WebKit se hizo público en iOS 8 (y, por tanto, el destino de iOS 7 dará como resultado este error; debe tener como destino iOS 8 para usar WebKit en la aplicación).