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
Unsupported
en , puede aparecer el elemento emergenteCould 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:
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.
Seleccione compilación de tvOS y asegúrese de que está en la configuración de versión :
Agregue
--bitcode=asmonly
al campo Argumentos mtouch adicionales y haga clic en el botón Aceptar .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_BITCODE
de 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:
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:
- 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. - 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.