Solução de problemas de aplicativos tvOS criados com o Xamarin
Este artigo aborda problemas conhecidos que você pode encontrar ao trabalhar com o suporte tvOS do Xamarin.
Problemas conhecidos
A versão atual do suporte ao tvOS do Xamarin tem os seguintes problemas conhecidos:
- Mono Framework – Mono 4.3 Cryptography.ProtectedData falha ao descriptografar dados do Mono 4.2. Como resultado, os pacotes NuGet falharão ao restaurar com o erro
Data unprotection failed
quando uma origem NuGet protegida for configurada.- Solução alternativa – No Visual Studio para Mac, você precisará adicionar de volta todas as fontes de pacotes NuGet que usam autenticação de senha antes de tentar restaurar novamente os pacotes.
- Visual Studio para Mac com suplemento F# – Erro ao criar um modelo Android F# no Windows. Isso ainda deve funcionar corretamente no Mac.
- Xamarin.Mac – Ao executar o projeto de modelo unificado Xamarin.Mac com o Framework de destino definido como
Unsupported
, o pop-upCould not connect to the debugger
pode aparecer.- Solução alternativa potencial – Faça o downgrade da versão do framework Mono disponível em nosso canal estável.
- Xamarin Visual Studio & Xamarin.iOS – Ao implantar aplicativos WatchKit no Visual Studio, o erro
The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist
pode aparecer.
Por favor, relate quaisquer bugs que você encontrar no GitHub.
Solução de problemas
As seções a seguir listam alguns problemas conhecidos que podem ocorrer ao usar o tvOS 9 com o Xamarin.tvOS e a solução para esses problemas:
Executável inválido - O executável não contém código de bits
Ao tentar enviar um aplicativo Xamarin.tvOS para a Apple TV App Store, você pode receber uma mensagem de erro no formato "Executável inválido - O executável não contém código de bits".
Para resolver esse problema, faça o seguinte:
No Visual Studio para Mac, clique com o botão direito do mouse no arquivo de projeto Xamarin.tvOS no Gerenciador de Soluções e selecione Opções.
Selecione tvOS Build e verifique se você está na configuração de lançamento :
Adicione
--bitcode=asmonly
ao campo Argumentos adicionais do mtouch e clique no botãoOK.Recrie seu aplicativo na configuração Versão.
Verificando se o aplicativo tvOS contém código de bits
Para verificar se a compilação do aplicativo Xamarin.tvOS contém Bitcode, abra o aplicativo Terminal e digite o seguinte:
otool -l /path/to/your/tv.app/tv
Na saída, procure o seguinte:
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
e size
será diferente, mas outros campos devem ser idênticos.
Você precisará certificar-se de que todas as bibliotecas estáticas (.a
) de terceiros que você está usando foram criadas em bibliotecas tvOS (não bibliotecas iOS) e que elas também incluem informações de código de bits.
Para aplicativos ou bibliotecas que incluem código de bits válido, o size
será maior que um. Há algumas situações em que uma biblioteca pode ter o marcador de código de bits, mas não conter código de bits válido. Por exemplo:
Bitcode invá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
Observe a diferença entre size
as duas bibliotecas no exemplo listado executado acima. A biblioteca deve ser gerada a partir de uma compilação de arquivo Xcode com bitcode habilitado (configuração ENABLE_BITCODE
Xcode) como uma solução para esse problema de tamanho.
Os aplicativos que contêm apenas a fatia arm64 também devem ter "arm64" na lista de UIRequiredDeviceCapabilities em Info.plist
Ao enviar um aplicativo para a Apple TV App Store para publicação, você pode receber um erro no formulário:
"Os aplicativos que contêm apenas a fatia arm64 também devem ter "arm64" na lista de UIRequiredDeviceCapabilities em Info.plist"
Se isso ocorrer, edite o Info.plist
arquivo e verifique se ele tem as seguintes chaves:
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arm64</string>
</array>
Recompile seu aplicativo para lançamento e reenvie para o iTunes Connect.
Execução da tarefa "MTouch" -- FALHOU
Se você estiver usando uma biblioteca de terceiros 3rd (como MonoGame) e sua compilação de lançamento falhou com uma longa série de mensagens de erro terminando em Task "MTouch" execution -- FAILED
, tente adicionar -gcc_flags="-framework OpenAL"
aos seus argumentos de toque adicionais:
Você também deve incluir --bitcode=asmonly
nos argumentos de toque adicional, ter suas opções de vinculador definidas como Vincular tudo e fazer uma compilação limpa.
Erro ITMS-90471. O ícone Grande está ausente
Se você receber uma mensagem no formato "ITMS-90471 erro. O ícone grande está faltando" ao tentar enviar um aplicativo Xamarin.tvOS para a Apple TV App Store para lançamento, verifique o seguinte:
- Certifique-se de ter incluído os ativos de ícone grande no
Assets.car
arquivo criado usando a documentação de ícones de aplicativo. - Certifique-se de ter incluído o
Assets.car
arquivo da documentação Trabalhando com ícones e imagens no pacote final do aplicativo.
Pacote inválido – Um aplicativo que suporte controladores de jogos também deve ser compatível com o controle remoto da Apple TV
or
Pacote inválido – os aplicativos da Apple TV com a estrutura GameController devem incluir a chave GCSupportedGameControllers no Info.plist do aplicativo
Os Controladores de Jogo podem ser usados para melhorar a jogabilidade e proporcionar uma sensação de imersão em um jogo. Eles também podem ser usados para controlar a interface padrão da Apple TV para que o usuário não precise alternar entre o controle remoto e o controle.
Se você estiver enviando um aplicativo Xamarin.tvOS com suporte ao Game Controller para a Apple TV App Store e estiver recebendo uma mensagem de erro na forma de:
Descobrimos um ou mais problemas com sua entrega recente para "nome do aplicativo". Sua entrega foi bem-sucedida, mas você pode querer corrigir os seguintes problemas em sua próxima entrega:
Pacote inválido – Um aplicativo que ofereça suporte a controladores de jogos também deve ser compatível com o controle remoto da Apple TV.
or
Pacote inválido – os aplicativos da Apple TV com a estrutura GameController devem incluir a chave GCSupportedGameControllers no Info.plist do aplicativo.
A solução é adicionar suporte para o Siri Remote (GCMicroGamepad
) ao arquivo do Info.plist
seu aplicativo. O perfil do Micro Game Controller foi adicionado pela Apple para atingir o Siri Remote. Por exemplo, inclua as seguintes chaves:
<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
Os Controladores de Jogos Bluetooth são uma compra opcional que os usuários finais podem fazer, seu aplicativo não pode forçar o usuário a comprar um. Se o seu aplicativo for compatível com Controladores de Jogo, ele também deverá suportar o Siri Remote para que o jogo possa ser usado por todos os usuários da Apple TV.
Para obter mais informações, consulte nossa seção Trabalhando com controladores de jogos da documentação do Siri Remote e Bluetooth Controllers .
Quadro de destino incompatível: . NetPortable, Versão=v4.5, Perfil=Perfil78
Ao tentar incluir uma biblioteca de classes portátil (PCL) em um projeto Xamarin.tvOS, você pode receber uma mensagem no formulário:
Quadro de destino incompatível: . NetPortable, Versão=v4.5, Perfil=Perfil78
Para resolver esse problema, adicione um arquivo XML chamado Xamarin.TVOS.xml
com o seguinte conteúdo:
<Framework Identifier="Xamarin.TVOS" MinimumVersion="1.0" Profile="*" DisplayName="Xamarin.TVOS"/>
Para o seguinte caminho:
/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile259/SupportedFrameworks/
Observe que o número de perfil no caminho deve corresponder ao número de perfil da PCL.
Com esse arquivo no lugar, você deve ser capaz de adicionar com êxito o arquivo PCL para o projeto Xamarin.tvOS.