Solución de problemas de aplicaciones tvOS creadas 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 los datos de Mono 4.2. Como resultado, los NuGet no se restaurarán con el error cuando se Data unprotection failed configura un origen NuGet protegido.
    • Solución alternativa: Visual Studio para Mac deberá volver a agregar los orígenes de paquetes de 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 seguirá funcionando correctamente en Mac.
  • Xamarin.Mac: al ejecutar el proyecto de plantilla unificada de Xamarin.Mac con el marco de destino establecido en , puede aparecer el elemento Could not connect to the debugger emergente.
    • Posible solución alternativa: degradar la versión del marco mono disponible en nuestro canal estable.
  • Xamarin Visual Studio Xamarin.iOS: al implementar aplicaciones watchKit en Visual Studio, puede aparecer The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist el error.

Informe de los errores que encuentre en GitHub.

Solucionar problemas

En las secciones siguientes se incluyen 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 Xamarin.tvOS a Apple TV App Store, es posible que reciba un mensaje de error con el formato "Ejecutable no válido: el archivo ejecutable no contiene código de bits".

Para solucionar este problema, haga lo siguiente:

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

  2. Seleccione tvOS Build (Compilación de tvOS) y asegúrese de que está en la configuración Release (Versión):

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

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

  4. Recompile la aplicación en la configuración 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 que use se crearon en .a bibliotecas tvOS (no bibliotecas de iOS) y que también incluyen información de código de bits.

Para las aplicaciones o bibliotecas que incluyen código de bits size válido, será mayor que uno. Hay algunas situaciones en las que una biblioteca puede tener el marcador bitcode, pero no puede contener 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 size entre las dos bibliotecas en las ejecuciones de ejemplo enumeradas anteriormente. La biblioteca debe generarse a partir de una compilación de archivo de Xcode con bitcode habilitado (configuración de Xcode) como solución ENABLE_BITCODE 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 Apple TV App Store 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": ERROR

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

Ejecución de MTouch de la tarea

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

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 Xamarin.tvOS a Apple TV App Store para su lanzamiento, compruebe lo siguiente:

  1. Asegúrese de que ha incluido los recursos de icono grande en el Assets.car archivo que creó mediante la documentación Assets.car aplicación.
  2. Asegúrese de incluir el archivo Assets.car de la documentación trabajar con iconos e Assets.car en el paquete de aplicaciones final.

Paquete no válido: una aplicación que admite controladores de juegos también debe admitir 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 control remoto y el controlador.

Si va a enviar una aplicación Xamarin.tvOS compatible con Game Controller a App Store de Apple TV y recibe un mensaje de error en forma de:

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

Paquete no válido: una aplicación que admite controladores de juegos también debe admitir 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.

La solución es 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

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

Para obtener más información, consulte nuestra sección Trabajar con controladores de juegos de nuestra documentación de Siri Remote y Bluetooth Controllers.

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

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

Para solucionar 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 xamarin.tvOS.