Solución de problemas de aplicaciones tvOS compiladas con Xamarin

En este artículo se tratan los problemas conocidos que pueden surgir al trabajar con la compatibilidad con tvOS de Xamarin.

Problemas conocidos

La versión actual de la compatibilidad con tvOS de Xamarin tiene los siguientes problemas conocidos:

  • Mono Framework :Cryptography.ProtectedData de Mono 4.3 no puede descifrar datos de Mono 4.2. Como resultado, los paquetes NuGet no se restaurarán con el error Data unprotection failed cuando se configure un origen NuGet protegido.
    • Solución alternativa: en Visual Studio para Mac deberá agregar los orígenes de paquetes NuGet que usen la autenticación de contraseña antes de volver a intentar restaurar los paquetes.
  • Visual Studio para Mac con complemento de F# : error al crear una plantilla de Android de F# en Windows. Esto debería seguir funcionando correctamente en Mac.
  • Xamarin.Mac: al ejecutar el proyecto de plantilla unificada de Xamarin.Mac con el marco de destino establecido en Unsupported, puede aparecer el elemento emergente Could not connect to the debugger.
    • Posible solución alternativa: cambiar a una versión anterior la versión del marco Mono disponible en nuestro canal estable.
  • Xamarin Visual Studio y Xamarin.iOS: al implementar aplicaciones WatchKit en Visual Studio, puede aparecer el error The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist.

Notifique los errores que encuentre en GitHub.

Solución de problemas

En las secciones siguientes se enumeran algunos problemas conocidos que pueden producirse al usar tvOS 9 con Xamarin.tvOS y la solución a esos problemas:

Ejecutable no válido: el ejecutable no contiene bitcode

Al intentar enviar una aplicación de Xamarin.tvOS al App Store del Apple TV, es posible que aparezca un mensaje de error del tipo "Ejecutable no válido: el ejecutable no contiene bitcode".

Para resolver este problema, haga lo siguiente:

  1. En Visual Studio para Mac, haga clic con el botón derecho en el archivo de proyecto de Xamarin.tvOS en el Explorador de soluciones y seleccione Opciones.

  2. Seleccione Compilación de tvOS y asegúrese de que está en la configuración de versión:

    Selección de las opciones de compilación de tvOS

  3. Agregue --bitcode=asmonly al campo Argumentos mtouch adicionales y haga clic en el botón Aceptar.

  4. Vuelva a generar la aplicación en la configuración de versión.

Comprobación de que la aplicación tvOS contiene bitcode

Para comprobar que la compilación de la aplicación Xamarin.tvOS contiene Bitcode, abra la aplicación Terminal y escriba lo siguiente:

otool -l /path/to/your/tv.app/tv

En la salida, busque lo siguiente:

Section
  sectname __bundle
   segname __LLVM
      addr 0x0000000100001000
      size 0x000000000000124f
    offset 4096
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0

addr y size serán diferentes, pero otros campos deben ser idénticos.

Deberá asegurarse de que las bibliotecas estáticas de terceros (.a) que use se compilaron en bibliotecas tvOS (no en bibliotecas iOS) y que también incluyen información de bitcode.

En el caso de las aplicaciones o bibliotecas que incluyan un bitcode válido, size será mayor que uno. Hay algunas situaciones en las que una biblioteca puede tener el marcador de bitcode, pero no contiene un bitcode válido. Por ejemplo:

Bitcode no válido

 $ otool -arch arm64 libLibrary.a | grep __bitcode -A 3
   sect name __bitcode
   segname __LLVM
      add 0x0000000000000670
      size 0x0000000000000001

Bitcode válido

$ otool -l -arch arm64 libDownloadableAgent-tvos.a |grep __bitcode -A 3
   sectname __bitcode
   segname __LLVM
      addr 0x000000000001d2d0
      size 0x0000000000045440

Tenga en cuenta la diferencia de size entre las dos bibliotecas del ejemplo enumerado anteriormente. La biblioteca debe generarse a partir de una compilación de archivo de Xcode con bitcode habilitado (valor ENABLE_BITCODEde Xcode) como solución a este problema de tamaño.

Las aplicaciones que solo contienen el segmento arm64 también deben tener "arm64" en la lista de UIRequiredDeviceCapabilities en Info.plist

Al enviar una aplicación a la App Store de Apple TV para su publicación, es posible que reciba un error del tipo:

"Las aplicaciones que solo contienen el sector arm64 también deben tener 'arm64' en la lista de UIRequiredDeviceCapabilities en Info.plist"

Si esto ocurre, edite el archivo Info.plist y asegúrese de que tiene las siguientes claves:

<key>UIRequiredDeviceCapabilities</key>
<array>
  <string>arm64</string>
</array>

Vuelva a compilar la aplicación para su lanzamiento y vuelva a enviarla a iTunes Connect.

Ejecución de la tarea "MTouch" -- ERROR

Si usa una biblioteca de terceros (como MonoGame) y la compilación de lanzamiento produjo un error con una larga serie de mensajes de error que terminan en Task "MTouch" execution -- FAILED, intente agregar -gcc_flags="-framework OpenAL" a los argumentos táctiles adicionales:

Ejecución de la tarea MTouch

También debe incluir --bitcode=asmonly en los argumentos táctiles adicionales, tener las opciones del enlazador establecidas en Vincular todo y realizar una compilación limpia.

Error ITMS-90471. Falta el icono grande

Si recibe un mensaje de tipo "Error ITMS-90471. Falta el icono grande" al intentar enviar una aplicación de Xamarin.tvOS a la App Store de Apple TV para su lanzamiento, consulte lo siguiente:

  1. Asegúrese de que ha incluido los recursos de icono grande en el archivo Assets.car que creó con la documentación de iconos de aplicación.
  2. Asegúrese de que ha incluido el archivo Assets.car de la documentación Trabajo con iconos e imágenes en la agrupación final de la aplicación.

Agrupación no válida: una aplicación que admita controladores de juegos también debe admitir el Apple TV remoto

o

Agrupación no válida: las aplicaciones de Apple TV con el marco GameController deben incluir la clave GCSupportedGameControllers en info.plist de la aplicación.

Los controladores de juego se pueden usar para mejorar el juego y proporcionar una sensación de inmersión en un juego. También se pueden usar para controlar la interfaz estándar de Apple TV, por lo que el uso no tiene que cambiar entre el mando remoto y el controlador.

Si está enviando una aplicación de Xamarin.tvOS compatible con el controlador de juegos a la App Store de Apple TV y recibe un mensaje de error del tipo:

Hemos detectado uno o varios problemas con la entrega reciente para "nombre de aplicación". La entrega se realizó correctamente, pero es posible que desee corregir los siguientes problemas en la siguiente entrega:

Agrupación no válida: una aplicación que admita controladores de juegos también debe admitir el Apple TV remoto.

o

Agrupación no válida: las aplicaciones de Apple TV con el marco GameController deben incluir la clave GCSupportedGameControllers en info.plist de la aplicación.

La solución consiste en agregar compatibilidad con Siri Remote (GCMicroGamepad) al archivo Info.plist de la aplicación. Apple ha agregado el perfil del controlador de juego micro para dirigirse a Siri Remote. Por ejemplo, incluya las siguientes claves:

<key>GCSupportedGameControllers</key>  
  <array>  
    <dict>  
      <key>ProfileName</key>  
      <string>ExtendedGamepad</string>  
    </dict>  
    <dict>  
      <key>ProfileName</key>  
      <string>MicroGamepad</string>  
    </dict>  
  </array>  
<key>GCSupportsControllerUserInteraction</key>  
<true/>

Importante

Los controladores de juegos Bluetooth son una compra opcional que los usuarios finales pueden realizar, la aplicación no puede obligar al usuario a comprar uno. Si la aplicación admite controladores de juegos, también debe admitir el Siri Remote para que todos los usuarios de Apple TV puedan usar el juego.

Para obtener más información, consulte la sección Trabajo con controladores de juego de nuestra documentación Siri Remote y controladores Bluetooth.

Marco de destino incompatible: . NetPortable, Version=v4.5, Profile=Profile78

Al intentar incluir una biblioteca de clases portable (PCL) en un proyecto de Xamarin.tvOS, es posible que reciba un mensaje del tipo:

Marco de destino incompatible: . NetPortable, Version=v4.5, Profile=Profile78

Para resolver este problema, agregue un archivo XML llamado Xamarin.TVOS.xml con el siguiente contenido:

<Framework Identifier="Xamarin.TVOS" MinimumVersion="1.0" Profile="*" DisplayName="Xamarin.TVOS"/>

A la ruta de acceso siguiente:

/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile259/SupportedFrameworks/

Tenga en cuenta que el número de perfil de la ruta de acceso debe coincidir con el número de perfil de la PCL.

Con este archivo en su lugar, debería poder agregar correctamente el archivo PCL al proyecto de Xamarin.tvOS.