Share via


Solução de problemas de vinculação

Algumas dicas para solucionar problemas de ligações com APIs do macOS (anteriormente conhecido como OS X) no Xamarin.Mac.

Ligações ausentes

Embora o Xamarin.Mac cubra grande parte das APIs da Apple, às vezes você pode precisar chamar alguma API da Apple que ainda não tem uma vinculação. Em outros casos, você precisa chamar C/Objective-C de terceiros que estão fora do escopo das ligações do Xamarin.Mac.

Se você estiver lidando com uma API da Apple, o primeiro passo é informar ao Xamarin que você está atingindo uma seção da API para a qual ainda não temos cobertura. Registre um bug observando a API ausente. Usamos relatórios de clientes para priorizar em quais APIs trabalhamos em seguida. Além disso, se você tiver uma licença Business ou Enterprise e essa falta de vinculação estiver bloqueando seu progresso, siga também as instruções no Suporte para registrar um ticket. Não podemos prometer uma vinculação, mas em alguns casos podemos obter uma solução alternativa.

Depois de notificar o Xamarin (se aplicável) sobre sua vinculação ausente, a próxima etapa é considerar vinculá-la você mesmo. Temos um guia completo aqui e alguma documentação não oficial aqui para embrulhar Objective-C encadernações à mão. Se você estiver chamando uma API C, poderá usar o mecanismo P/Invoke do C#, a documentação está aqui.

Se você decidir trabalhar na vinculação sozinho, esteja ciente de que erros na vinculação podem produzir todos os tipos de falhas interessantes no tempo de execução nativo. Em particular, tenha muito cuidado para que sua assinatura em C# corresponda à assinatura nativa em número de argumentos e no tamanho de cada argumento. Se isso não for feito, você poderá corromper a memória e/ou a pilha e você poderá falhar imediatamente ou em algum ponto arbitrário no futuro ou corromper dados.

Exceções de argumento ao passar null para uma associação

Embora o Xamarin trabalhe para fornecer ligações de alta qualidade e bem testadas para as APIs da Apple, às vezes erros e bugs aparecem. De longe, o problema mais comum que você pode encontrar é uma API lançando ArgumentNullException quando você passa em null quando a API subjacente aceita nil. Os arquivos de cabeçalho nativos que definem a API geralmente não fornecem informações suficientes sobre quais APIs aceitam zero e quais falharão se você passá-la.

Se você se deparar com um caso em que passar em null lança um ArgumentNullException mas você acha que deve funcionar, siga estas etapas:

  1. Verifique a documentação e/ou exemplos da Apple para ver se consegue encontrar provas de que aceita nilo . Se você estiver confortável com Objective-Co , você pode escrever um pequeno programa de teste para verificá-lo.
  2. Registre um bug.
  3. Você pode contornar o bug? Se você puder evitar chamar a API com nullo , uma simples verificação nula em torno das chamadas pode ser uma solução fácil.
  4. No entanto, algumas APIs exigem a passagem em null para desativar ou desativar alguns recursos. Nesses casos, você pode contornar o problema ativando o navegador de assembly (consulte Localizando o membro C# para um determinado seletor), copiando a associação e removendo a verificação nula. Certifique-se de registrar um bug (etapa 2) se você fizer isso, pois sua vinculação copiada não receberá atualizações e correções que fazemos no Xamarin.Mac, e isso deve ser considerado uma solução alternativa de curto prazo.

Como relatar bugs

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.