¿Puedo usar una versión anterior de Xcode o Xamarin.iOS?

En la documentación de Xamarin, se da por supuesto el uso de la versión más reciente de Xamarin.iOS y Xcode, que es lo que se recomienda. Sin embargo, algunos clientes prefieren usar versiones más antiguas de Xamarin.iOS o Xcode y desean conocer los detalles sobre las consecuencias.

Las notas de la versión contienen la advertencia siguiente:

Advertencia

Uso de una versión anterior de Xcode

El uso de una versión anterior de Xcode (distinta a la mencionada en los requisitos anteriores) suele ser posible, pero es posible que algunas características no estén disponibles. Además, algunas limitaciones pueden requerir soluciones alternativas:

  • El elemento registrar requiere archivos de encabezados de Xcode para compilar las aplicaciones, lo que provoca errores MT0091 o MT4109 si faltan las API. En la mayoría de los casos, la habilitación del enlazador administrado ayudará (al eliminar la API).
  • Las compilaciones de bitcode (para tvOS y watchOS) pueden producir un error en el envío a App Store a menos que se use una cadena de herramientas de Xcode 9.0+.

Más información

Microsoft recomienda usar la versión más reciente de Xcode y Xamarin.iOS al desarrollar y enviar aplicaciones. Apple requiere usar la versión de Xcode más reciente al enviar aplicaciones.

Tenga en cuenta que el uso de la versión de Xcode más reciente no impide que la aplicación tenga como destino versiones anteriores de iOS. Las versiones de iOS que admita se basan en la entrada info.plist y las API que usa la aplicación.

Es posible instalar varias versiones de Xcode en paralelo, con nombres diferentes, como Xcode101.app y Xcode102.app. Si usa varias versiones, asegúrese de establecer la versión de Xcode activa en la configuración de Visual Studio para Mac y con la xcode-selectherramienta de la línea de comandos.

Sin embargo, hay circunstancias poco frecuentes que pueden requerir el uso de componentes más antiguos. En esta documentación, se describen los desafíos generales que se puede encontrar al usar versiones anteriores a las más recientes.

No obstante, cada versión de Apple es única y puede encontrarse con otros problemas que no se documentan aquí.

Estos desafíos a veces no son sencillos de resolver, por lo que, siempre que sea posible, siga las configuraciones admitidas de Xcode y Xamarin.iOS más recientes.

Uso de una versión anterior de Xamarin.iOS con una versión anterior de Xcode

Es posible no actualizar Xamarin.iOS y Xcode, al menos durante cierto tiempo. El límite es que, en algún momento, Apple requerirá una versión mínima de Xcode para enviar las aplicaciones. En este momento, debe actualizar todos los componentes (macOS, Xcode y Xamarin.iOS) a las versiones más recientes (o la nueva versión mínima de Xcode requerida por Apple y la versión de Xamarin.iOS coincidente).

Por lo general, es más fácil actualizar de forma gradual y mantenerse al día con los pequeños cambios. Para proyectos de gran tamaño en los que puede ser más difícil mantenerse al día con las actualizaciones, permanecer con un conjunto de trabajo conocido puede ser una buena solución de compromiso.

Uso de la nueva versión de Xamarin.iOS con una versión anterior de Xcode

En general, Xamarin.iOS admite versiones anteriores de Xcode siempre que sea razonablemente posible. Entre los desafíos potenciales, se incluyen:

  • La versión más reciente de Xamarin.iOS puede admitir algunas características y API que no estén presentes en la versión de Xcode seleccionada.
  • El elemento registrar estático requiere archivos de encabezados de Xcode para compilar las aplicaciones, lo que provoca errores MT0091 o MT4109 si faltan las API.
    • En la mayoría de los casos, será de ayuda habilitar el enlazador administrado (quitando los enlaces administrados de la nueva API) si no se usaba.
  • Las compilaciones de bitcode (para tvOS y watchOS) pueden producir un error en el envío a App Store a menos que se use una cadena de herramientas de Xcode 9.0+.

Uso de una versión de Xcode nueva con una versión anterior de Xamarin.iOS

Este caso de uso es significativamente más difícil, ya que Xamarin.iOS no puede predecir los requisitos cambiantes de la nueva versión de Xcode. Las actualizaciones de macOS también pueden presentar problemas y, sin revisiones de compatibilidad, muchas partes de Xamarin.iOS podrían verse afectadas.

Hay una serie de áreas potenciales en las que las cosas pueden ir mal, entre las que se incluyen:

  • Incompatibilidades con mlaunch:
    • Es posible que la compatibilidad con el simulador no funcione correctamente (o nada en absoluto)
    • Es posible que la compatibilidad con los dispositivos no funcione correctamente (o nada en absoluto)
  • Compatibilidad desconocida con mtouch
    • Sin compatibilidad con marcos nuevos
    • Sin compatibilidad con derechos nuevos
    • Sin compatibilidad con herramientas nuevas o actualizadas
      • Esto también puede afectar a la firma de código.

Nuevas reglas de envío de AppStore

Apple se reserva el derecho de actualizar las reglas de envíos de AppStore en cualquier momento. Estos cambios de reglas solo se anuncian de antemano en algunas ocasiones. Algunos de estos cambios requieren cambios de herramientas para la compatibilidad, lo que requeriría un componente de Xamarin.iOS actualizado.

Además de los cambios de reglas, Apple agrega con frecuencia validaciones adicionales a las aplicaciones enviadas o ajusta las existentes. Algunas de ellas requieren cambios en nuestras herramientas (por ejemplo, un nuevo símbolo en la lista de bloqueados). Muchas de ellas se las encuentran por primera vez los clientes que hacen envíos, ya que no hay ningún anuncio (o lista) de las reglas.

Resumen

Siempre que sea posible, elija el camino seguro y siga las instrucciones de Apple sobre desarrollar y enviar con la versión más reciente de Xcode publicada en App Store.

A su vez, use la versión más reciente de Xamarin.iOS. Esto realizará un seguimiento de las correcciones más recientes que pueden afectar a las aplicaciones enviadas y cumplir con los cambios de reglas más recientes.

Cuando esto no sea factible, considere la posibilidad de usar una versión anterior de Xcode y Xamarin.iOS coincidente. Esto puede funcionar durante un tiempo, pero en algún momento Apple insistirá sobre las herramientas más recientes; por lo tanto, haga planes en consecuencia.