Como depurar o processo de criação, instalação e execução do jogo

Introdução

Confira a seguir um guia sobre depuração do processo de compilação e criação de jogos do Unity usando o SDK do Firebase para Unity. Este guia descreve como investigar e resolver muitos dos problemas mais comuns que você pode encontrar durante a configuração e criação do seu jogo para uma nova plataforma ou após uma atualização. A ordem deste guia reflete a ordem em que esses erros podem ocorrer no processo. Consulte-os um por vez e prossiga quando eles forem resolvidos.

Além deste documento, confira as Perguntas frequentes sobre o Firebase para Unity para mais informações.

Problemas de compilação no modo de jogo

A primeira classe de problemas de compilação pode ocorrer durante os testes no editor antes de você tentar iniciar um build para dispositivos móveis. Esta seção se refere a todos os erros do Firebase ocorridos antes e durante o modo de jogo.

Quando o Unity inicia ou detecta mudanças em dependências, códigos ou outros recursos, ele tenta recriar o projeto. Se não for possível compilar o projeto nesse momento, o editor vai registrar os erros de compilação no console e, se você tentar entrar no modo de jogo, um pop-up de erro vai aparecer na guia Scene do Unity com a mensagem All compiler errors have to be fixed before you can enter playmode!.

Tipos, classes, métodos e membros ausentes

Muitos problemas do Firebase ocorrem devido à incapacidade do editor e do compilador de encontrar os tipos, classes, métodos e membros necessários. Os sintomas mais comuns disso são variantes do seguinte:

The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?

The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)

‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'

Etapas de solução:
  1. Ao usar classes ou métodos do Firebase no código, verifique a disponibilização dos mesmos com as diretivas using corretas para os produtos específicos do Firebase, como necessário.

    1. Exemplos de MechaHamster: suba de nível com o Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Verifique se você importou os pacotes apropriados do Firebase:

    1. Para importar os pacotes apropriados:
      1. Adicione o SDK do Firebase para Unity como .unitypackages ou
      2. Verifique e execute uma das alternativas em Outras opções de instalação do Unity.
    2. Verifique se todos os produtos do Firebase no seu projeto e EDM4U:
      • estão na mesma versão;
      • foram instalados exclusivamente como .unitypackages OU pelo Unity Package Manager.
  3. Se você importou o SDK do Firebase para Unity anterior à versão "10.0.0" como .unitypackages, o arquivo ZIP do SDK do Firebase para Unity vai conter pacotes para suporte com .NET 3.x e .NET 4.x. Certifique de incluir apenas o nível compatível do .NET Framework no projeto:

    1. A compatibilidade entre as versões dos níveis Editor do Unity e .NET Frameworks é abordada em Adicionar o Firebase ao seu projeto do Unity.
    2. Se você tiver importado seus pacotes do Firebase por engano no nível errado do .NET Framework ou precisar trocar de .unitypackage para uma das outras opções de instalação do Unity, a forma mais adequada é remover todos os pacotes do Firebase usando os métodos mencionados nesta seção de migração e importar todos os pacotes do Firebase de novo.
  4. Verifique se o editor está recompilando o projeto e se as tentativas de reprodução refletem o estado mais atual do projeto:

    1. Por padrão, o editor do Unity está configurado para recompilar sempre que detectar alterações de recursos ou de configuração.
    2. É possível que essa funcionalidade tenha sido desativada e que o Editor do Unity esteja configurado para a atualização/recompilação manual. Verifique isso e tente atualizar manualmente, se necessário.

Erros de tempo de execução do modo de jogo

Se o jogo começar, mas apresentar problemas com o Firebase durante a execução, tente o seguinte:

No Mac OS, aprove os pacotes do Firebase em "Segurança e privacidade"

Se, ao iniciar o jogo no editor no Mac OS, você encontrar uma caixa de diálogo com o texto "não foi possível abrir o FirebaseCppApp-<version>.bundle porque o desenvolvedor não pode ser verificado.", você precisa aprovar o arquivo específico do pacote no menu "Segurança e privacidade" do dispositivo Mac.

Para isso, clique em Ícone da Apple > Preferências do sistema > Segurança e privacidade

No menu de segurança, perto da metade da página, há uma seção informando que "O uso do "FirebaseCppApp-<version>.bundle" foi bloqueado porque ele não é de um desenvolvedor identificado".

Clique no botão Allow Anyway.

c35166e224cce720.png

Volte para o Unity e pressione Play novamente.

Você vai notar um aviso semelhante ao primeiro:

5ad9ddb0d3a52892.png

Pressione Open e seu programa vai continuar normalmente. Você não vai receber avisos sobre esse arquivo específico de novo.

Verifique se o projeto tem e usa arquivos de configuração válidos

  1. Verifique se as configurações de builds estão definidas para o sistema pretendido (iOS ou Android) em File > Build Settings. Para conferir uma discussão mais detalhada sobre isso, acesse a documentação das Build Settings do Unity.
  2. Faça o download do arquivo de configuração do app (google-services.json para Android ou GoogleService-Info.plist para iOS) e crie o destino no console do Firebase, em Configurações do projeto > Seus apps: se você já tiver os arquivos, exclua-os do seu projeto e substitua-os pela versão mais recente e verifique se eles estão escritos exatamente como exibidos acima, sem "(1)" ou com outros números acrescentados aos nomes dos arquivos.
  3. Se o console mostrar uma mensagem sobre arquivos em Assets/StreamingAssets/, verifique se não há mensagens informando que o Unity não conseguiu editar arquivos
  4. Verifique se Assets/StreamingAssets/google-services-desktop.json foi gerado e corresponde ao arquivo de configuração transferido por download.
    • Se ele não tiver sido gerado automaticamente e StreamingAssets/ não existir, crie manualmente o diretório em Assets.
    • Agora, verifique se o Unity gerou google-services-desktop.json.

Confira se todos os produtos do Firebase e o EDM4U foram instalados exclusivamente pelo .unitypackage ou pelo Unity Package Manager

  1. Consulte a pasta Assets/ e o Unity Package Manager para garantir que os SDKs do Firebase e o EDM4U foram instalados exclusivamente por um método ou pelo outro.
  2. Pode ser que alguns plug-ins externos e desenvolvidos pelo Google, como o Google Play, dependam do EDM4U. Esses plug-ins podem incluir EDM4U nos pacotes do .unitypackage ou do Unity Package Manager (UPM). Verifique se o seu projeto tem apenas uma cópia do EDM4U. Se algum pacote do UPM depender do EDM4U, é melhor manter só as versões do UPM do EDM4U. Elas podem ser consultadas na página do Arquivo das APIs do Google para Unity.

Verifique se todos os produtos do Firebase no seu projeto estão na mesma versão.

  1. Se os SDKs do Firebase foram instalados pelo .unitypackage, verifique se todas as bibliotecas do FirebaseCppApp em Assets/Firebase/Plugins/x86_64/ estão na mesma versão.
  2. Se os SDKs do Firebase foram instalados pelo Unity Package Manager (UPM), abra Windows > Package Manager, procure por "Firebase" e verifique se todos os pacotes do Firebase estão na mesma versão.
  3. Caso seu projeto tenha versões diferentes dos SDKs do Firebase, recomendamos que você remova todos e instale os SDKs do Firebase de novo, só que com as mesmas versões. A maneira mais adequada de fazer isso é remover todos os pacotes do Firebase usando os métodos mencionados nesta seção de migração.

Erros de criação do dispositivo de destino e do resolvedor

Caso seu jogo funcione no editor (configurado para o destino de compilação escolhido), verifique se o Gerenciador de dependências externas para Unity (EDM4U, na sigla em inglês) está configurado e funcionando corretamente.

O repositório EDM4U do GitHub tem um guia explicativo para essa parte do processo. É recomendado que você o analise e siga antes de continuar.

Problemas e minificação de "Single Dex" (obrigatório se você estiver usando o Cloud Firestore)

Ao criar apps Android, pode ser que você se depare com uma falha de compilação relacionada à existência de um único arquivo dex. Se o seu projeto estiver configurado para usar o sistema de build do Gradle, a mensagem de erro será semelhante à seguinte:

Cannot fit requested classes in a single dex file.

Os arquivos .dex são usados para armazenar um conjunto de definições de classe e os dados associados para aplicativos Android. Um único arquivo dex tem limitação de referências a 65.536 métodos. Os builds vão falhar se o número total de métodos de todas as bibliotecas Android no projeto exceder esse limite.

As duas etapas a seguir podem ser aplicadas em sequência. Só ative a configuração multidex se a minificação não resolver o problema.

Ativar minificação

O Unity introduziu a Minificação no segundo semestre de 2017 para remover códigos não utilizados, o que pode reduzir o número total de métodos referenciados em um único arquivo dex. * A opção pode ser encontrada em Player Settings > Android > Publishing Settings > Minify. As opções podem diferir em versões distintas do Unity. Portanto, consulte a documentação oficial do Unity.

Ativar Multidex

Se, depois de ativar a minificação, o número de métodos referenciados ainda exceder o limite, outra opção será ativar multidex. Há várias maneiras de fazer isso no Unity:

  • Se Custom Gradle Template em Player Settings estiver ativado, modifique mainTemplate.gradle.
  • Se você usar o Android Studio para criar o projeto exportado, modifique o arquivo build.gradle do módulo.

Confira outros detalhes no guia para usuários do multidex.

Como entender e corrigir erros de tempo de execução do dispositivo de destino

Se o jogo funcionar no editor e puder ser criado e instalado no dispositivo de destino, mas você se deparar com erros de tempo de execução, inspecione e investigue os registros gerados no dispositivo.

Esta seção explica como investigar os registros em busca de erros e um erro que só ocorre durante a execução no dispositivo ou simulador.

Android

Simulador

  • Inspecione os registros que aparecem no console do emulador ou consulte a janela Logcat.

Dispositivo

Familiarize-se com o adb, o adb logcat e a forma de usá-los.

  • Embora as diversas ferramentas do ambiente de linha de comando possam ser usadas para filtrar a saída, não desconsidere as opções do logcat.
  • Uma forma simples de iniciar uma sessão ADB do zero é:

    adb logcat -c && adb logcat <OPTIONS>
    

    em que OPTIONS são flags que você transmite à linha de comando para filtrar saídas.

Como usar o Logcat pelo Android Studio

Quando você usa o Logcat pelo Android Studio, há outras ferramentas de pesquisa que simplificam a geração de buscas produtivas.

iOS

Como inspecionar registros

Se estiver usando um dispositivo físico, conecte-o a um computador. Inspecione o lldb no Xcode.

Problemas com o Swift

Se você se deparar com registros de erros que mencionam o Swift, consulte a seção Gerenciador de dependências externas para Unity sobre eles.

Outras etapas

Se o jogo ainda apresentar problemas de compilação, criação ou execução relacionados ao Firebase, consulte a página de problemas do SDK do Firebase para Unity e considere enviar um novo registro de problema. Além disso, consulte a página de suporte do Firebase para conferir outras opções.