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 na Xamarin é que você seja bem-sucedido em escrever seus aplicativos móveis e de desktop, e fornecemos alguns recursos para ajudar.

Com qualquer um desses recursos, há 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 forma possível para relatar falhas:

    • "Meu aplicativo falha" é difícil de diagnosticar. "Meu aplicativo falha 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 procurando o problema leva ordens de grandeza 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. Observando se você atualizou recentemente versões do Xamarin.Mac, cortar seções do seu aplicativo para encontrar a parte que causa o problema ou testar compilações 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 detectará 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.
  • Certos tempos de execução mono falham.
  • Algumas exceções e falhas do Objective-c.
  • Alguns travam muito cedo na vida útil do processo.
  • Alguns estouro de pilha.
  • A versão do macOS listada no Info.plist é mais recente do que a versão do macOS atualmente instalada ou é inválida.

Depurar esses 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 o Visual Studio for Mac Application Output (View ->Pads ->Application Output) para rastreamentos de pilha ou saída em vermelho do Cocoa que pode descrever a saída.

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

    MyApp.app/Contents/MacOS/MyApp (onde MyApp é o nome da sua candidatura)

  • 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 isso 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 lugares, conforme necessário), você pode escrever texto em um arquivo em um local conhecido para rastrear em qual etapa de inicialização você está tendo problemas.

Problemas conhecidos

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

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

O depurador se conecta aos aplicativos Xamarin.Mac por meio de TCP, o que significa que, por padrão, quando você habilita o sandboxing, 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 se conectar ao depurador".

Editing the entitlements in the App sandbox.

A permissão Permitir Conexões de Rede de Saída (Cliente) é a necessária para o depurador, habilitando esta 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 compilações 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 3rd em seu aplicativo Xamarin.Mac, você pode receber um erro no formato "System.NotSupportedException: Nenhum dado está disponível para codificação 437" ao tentar compilar e executar o aplicativo. Por exemplo, bibliotecas, como Ionic.Zip.ZipFile, podem lançar essa exceção durante a operação.

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

Editing the build options

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 que são exigidas pelo Xamarin.Mac. Além disso, você deve fazer uma compilação limpa depois de atualizar o Xcode ou sua versão Xamarin.Mac.

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

Direitos ausentes.plist

A versão mais recente do Visual Studio para Mac removeu a seção Direitos do editor Info.plist e a colocou no editor Entitlements.plist separado (para melhor suporte entre plataformas 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:

Selecting entitlements

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

Editing the entitlements

Para projetos Xamarin.Mac existentes, você precisará criar manualmente o arquivo Entitlements.plist clicando com o botão direito do mouse no projeto no Solution Pad e selecionando Add>New File.... Em seguida, selecione Lista de propriedades vazias do Xamarin.Mac>:

Adding a new property list

Digite Entitlements 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:

Verifying the overwrite of a file

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

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