Dicas de solução de problemas do Xamarin.Mac

Visão geral

Às vezes, todos nós ficamos presos enquanto trabalhamos em um projeto, seja na incapacidade de fazer com que uma API funcione da maneira que queremos ou na tentativa de contornar um bug. Nosso objetivo no Xamarin é que você tenha sucesso ao escrever seus aplicativos móveis e da área de trabalho, e fornecemos alguns recursos para ajudar.

Com qualquer um desses recursos, existem algumas etapas de preparação que você pode seguir para ajudá-los a resolver seu problema rapidamente:

  • Determine a causa raiz do problema da melhor maneira possível para relatar falhas:

    • "Meu aplicativo trava" é difícil de diagnosticar. "Meu aplicativo trava quando eu retorno uma matriz vazia para esta chamada" é muito mais fácil de trabalhar na correção.

    • "Não consigo fazer o NSTable funcionar" é menos útil do que "Nenhum dos métodos no meu NSTableDelegate parece ser chamado neste caso".

  • Se possível, forneça um pequeno programa de exemplo mostrando o problema. Vasculhar páginas de código-fonte em busca do problema leva muito mais tempo e esforço.

  • Saber quais alterações você fez em seu aplicativo para fazer com que um problema apareça pode restringir rapidamente a origem do problema. Observar se você atualizou recentemente versões do Xamarin.Mac, cortar seções do aplicativo para encontrar a parte que está causando o problema ou testar builds anteriores para descobrir qual alteração introduziu o problema pode ser muito útil.

O que fazer quando seu aplicativo falha sem saída

Na maioria dos casos, o depurador no Visual Studio para Mac capturará exceções e falhas em seu aplicativo e ajudará você a rastrear a causa raiz. No entanto, há alguns casos em que seu aplicativo irá saltar no dock e, em seguida, sair com pouca ou nenhuma saída. Isso inclui:

  • Problemas de assinatura de código.
  • Certas falhas de tempo de execução mono.
  • Algumas Objective-c exceções e falhas.
  • Alguns travam muito cedo durante a vida útil do processo.
  • Alguns estouros de pilha.
  • A versão do macOS listada em seu Info.plist é mais recente do que a versão do macOS atualmente instalada ou é inválida.

A depuração desses programas pode ser frustrante, pois encontrar as informações necessárias pode ser difícil. Aqui estão algumas abordagens que podem ajudar:

  • Verifique se a versão do macOS listada no Info.plist é a mesma que a versão do macOS atualmente instalada no computador.

  • Verifique a saída do aplicativo Visual Studio para Mac (View ->Pads ->Application Output) para rastreamentos de pilha ou saída em vermelho do Cocoa que podem descrever a saída.

  • Execute seu aplicativo na linha de comando e examine a saída (no aplicativo Terminal ) usando:

    MyApp.app/Contents/MacOS/MyApp (onde MyApp está o nome do seu aplicativo)

  • Você pode aumentar a saída adicionando "MONO_LOG_LEVEL" ao seu comando na linha de comando, por exemplo:

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • Você pode anexar um depurador nativo (lldb) ao seu processo para ver se ele fornece mais informações (isso requer uma licença paga). Por exemplo, faça o seguinte:

    1. Entre lldb MyApp.app/Contents/MacOS/MyApp no Terminal.
    2. Entre run no Terminal.
    3. Entre c no Terminal.
    4. Saia quando terminar a depuração.
  • Como último recurso, antes de chamar NSApplication.Init seu Main método (ou em outros locais, conforme necessário), você pode gravar texto em um arquivo em um local conhecido para rastrear em qual etapa da inicialização você está tendo problemas.

Problemas conhecidos

As seções a seguir abordam problemas conhecidos e suas soluções.

Não é possível se conectar ao depurador em aplicativos em área restrita

O depurador se conecta a aplicativos Xamarin.Mac por meio de TCP, o que significa que, por padrão, quando você habilita a área restrita, ele não consegue se conectar ao aplicativo, portanto, se você tentar executar o aplicativo sem as permissões adequadas habilitadas, receberá um erro "Não é possível conectar-se ao depurador".

Editando os direitos na sandbox do aplicativo.

A permissão Permitir Conexões de Rede de Saída (Cliente) é a necessária para o depurador, habilitar essa permitirá a depuração normalmente. Como você não pode depurar sem ele, atualizamos o CompileEntitlements destino para msbuild adicionar automaticamente essa permissão aos direitos de qualquer aplicativo que esteja em área restrita apenas para builds de depuração. As compilações de versão devem usar os direitos especificados no arquivo de direitos, sem modificações.

System.NotSupportedException: nenhum dado está disponível para codificação 437

Ao incluir bibliotecas de terceiros em seu aplicativo Xamarin.Mac, você pode receber um erro no formato "System.NotSupportedException: nenhum dado está disponível para codificar 437" ao tentar compilar e executar o aplicativo. Por exemplo, bibliotecas, como Ionic.Zip.ZipFileo , podem lançar essa exceção durante a operação.

Isso pode ser resolvido abrindo as opções do projeto Xamarin.Mac, indo para Mac Build>Internationalization e verificando a internacionalização do Ocidente:

Editar as opções de build

Falha ao compilar (mm5103)

Esse erro geralmente é causado quando uma nova versão do Xcode é lançada e você instalou a nova versão, mas ainda não a executou. Antes de tentar compilar com uma nova versão do Xcode, você precisa primeiro executar essa versão pelo menos uma vez.

Na primeira vez que você executa uma nova versão do Xcode, ele instala várias ferramentas de linha de comando exigidas pelo Xamarin.Mac. Além disso, você deve fazer um build limpo depois de atualizar o Xcode ou sua versão do Xamarin.Mac.

Se você não conseguir resolver esse problema, registre um bug.

entitlements.plist ausente

A versão mais recente do Visual Studio para Mac removeu a seção Entitlements do editor Info.plist e a colocou em um editor Entitlements.plist separado (para melhor suporte multiplataforma com o Xamarin.iOS).

Com o novo Visual Studio para Mac instalado, quando você cria um novo projeto de aplicativo Xamarin.Mac, um arquivo Entitlements.plist será adicionado automaticamente à árvore do projeto:

Selecionando direitos

Se você clicar duas vezes no arquivo Entitlements.plist , o Editor de Direitos será exibido:

Editando os direitos

Para projetos Xamarin.Mac existentes, você precisará criar manualmente o arquivo Entitlements.plist clicando com o botão direito do mouse no projeto no Painel de Soluções e selecionando Adicionar>Novo Arquivo.... Em seguida, selecione Lista de Propriedades Vazias do Xamarin.Mac>:

Adicionando uma nova lista de propriedades

Digite Entitlements para o nome e clique no botão Novo . Se o seu projeto incluiu anteriormente um arquivo de direitos, você será solicitado a adicioná-lo ao projeto em vez de criar um novo arquivo:

Verificando a substituição de um arquivo

Suporte da comunidade nos fóruns

A comunidade de desenvolvedores que usam produtos Xamarin é incrível e muitos visitam nossos fóruns Xamarin.Mac para compartilhar experiências e seus conhecimentos. Além disso, os engenheiros da Xamarin visitam periodicamente o fórum para ajudar.

Arquivando um bug

Seus comentários são importantes para nós. Se você encontrar algum problema com o Xamarin.Mac:

Os problemas do GitHub são todos públicos. Não é possível ocultar comentários ou anexos.

Inclua tanto do seguinte quanto possível:

  • Um exemplo simples reproduzindo o problema. Isso é inestimável, quando possível.
  • O rastreamento de pilha completo da falha.
  • O código C# ao redor da falha.