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 : Mono 4.3 Cryptography.ProtectedData 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 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 Unsupporteden , puede aparecer el elemento emergente Could not connect to the debugger .
    • Posible solución alternativa : degrada 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 código de bits

Al intentar enviar una aplicación de Xamarin.tvOS a apple TV App Store, es posible que reciba un mensaje de error con el formato "Ejecutable no válido: el ejecutable no contiene código de bits".

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 :

    Select tvOS Build options

  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.a () de terceros que use se compilaron en bibliotecas tvOS (no en bibliotecas iOS) y que también incluyen información de código de bits.

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

Código de bits no válido

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

Código de bits 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 entre size las dos bibliotecas del ejemplo enumerado anteriormente. La biblioteca debe generarse a partir de una compilación de archivo de Xcode con bitcode habilitado (configuración 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 en el formulario:

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

Si esto ocurre, edite el Info.plist archivo 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 Conectar.

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

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:

Task MTouch execution

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 con el formato "ERROR ITMS-90471. Falta el icono Grande" al intentar enviar una aplicación de Xamarin.tvOS a apple TV App Store para su lanzamiento, consulte lo siguiente:

  1. Asegúrese de que ha incluido los recursos de icono grande en el Assets.car archivo que creó con la documentación de iconos de aplicación.
  2. Asegúrese de incluir el Assets.car archivo de la documentación Working with Icons and Images (Trabajar con iconos e imágenes ) en la agrupación final de la aplicación.

Paquete no válido: una aplicación que admita controladores de juegos también debe admitir el apple TV remoto

o

Paquete no válido: 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 para que el usuario no tenga que cambiar entre el mando remoto y el controlador.

Si va a enviar una aplicación de Xamarin.tvOS con compatibilidad con el controlador de juegos a la tienda de aplicaciones de Apple TV y recibe un mensaje de error en forma de:

Hemos descubierto 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:

Paquete no válido: una aplicación que admita controladores de juegos también debe admitir el mando a distancia de Apple TV.

o

Paquete no válido: 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 de la Info.plist aplicación. Apple ha agregado el perfil de Micro Game Controller 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 control remoto siri para que todos los usuarios de Apple TV puedan usar el juego.

Para obtener más información, consulta nuestra sección Working with Game Controllers (Trabajar con controladores de juegos) de nuestra documentación de Siri Remote and Bluetooth Controllers (Controladores remotos y 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 en forma:

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"/>

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