Compartilhar via


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-up Could 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:

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

  2. Selecione tvOS Build e verifique se você está na configuração de lançamento :

    Selecione as opções de compilação do tvOS

  3. Adicione --bitcode=asmonly ao campo Argumentos adicionais do mtouch e clique no botãoOK.

  4. 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_BITCODEXcode) 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:

Execução da tarefa MTouch

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:

  1. Certifique-se de ter incluído os ativos de ícone grande no Assets.car arquivo criado usando a documentação de ícones de aplicativo.
  2. 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.