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 failedconfigura 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 debuggeremergente.- 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 existel 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:
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.
Seleccione tvOS Build (Compilación de tvOS) y asegúrese de que está en la configuración Release (Versión):
Agregue
--bitcode=asmonlyal campo--bitcode=asmonlyhaga clic en el botón Aceptar.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:
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:
- Asegúrese de que ha incluido los recursos de icono grande en el
Assets.cararchivo que creó mediante la documentaciónAssets.caraplicación. - Asegúrese de incluir el archivo
Assets.carde la documentación trabajar con iconos eAssets.caren 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.

