Atualizando aplicativos Xamarin.Mac Unificados para 64 bits
A partir de janeiro de 2018, a Apple exige que os novos envios do Mac App Store sejam destinados a 64 bits. Os aplicativos já disponíveis no Mac App Store devem ser atualizados para atingir 64 bits até junho de 2018.
O modelo de projeto Arquivo>Novo Xamarin.Mac cria aplicativos de 64 bits por padrão, portanto, todos os aplicativos criados recentemente já são compatíveis com 64 bits e não exigirão nenhuma alteração.
Direcionamento de 64 bits
Abra a janela Opções do Projeto para seu aplicativo Xamarin.Mac:
Selecione Compilar mac e defina Arquiteturas com suporte para x86_64:
Se o aplicativo tiver dependências externas, como referências nativas ou projetos de associação, atualize-os para atingir 64 bits.
Errors
Na primeira vez que você compilar ou executar seu aplicativo com suporte de 64 bits, poderá encontrar erros de link de problemas de clang ou runtime. Esses erros podem ocorrer se dependências de terceiros , por exemplo, referências nativas em seus projetos Xamarin.Mac ou associações ou estruturas de todo o sistema carregadas manualmente – não tiverem sido atualizadas para 64 bits.
Dica
Converter seu projeto em 64 bits é uma grande alteração e pode descobrir indiretamente vários erros de programação. Em particular, ele pode alterar o tamanho e o alinhamento das estruturas de dados, o que afetaria as assinaturas p/invoke e o código nativo vinculados ao seu projeto. Considere revisar todos os avisos de build dados e testar seu aplicativo completamente posteriormente para detectar possíveis problemas.
Exemplo de erro resultante de uma dependência de terceiros vinculada dinamicamente que não tem como destino 64 bits:
ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary,
file was built for i386 which is not the architecture being linked (x86_64):
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary
Esse erro pode ser seguido em runtime dlopen
retornando IntPtr.Zero
em vez de um identificador esperado.
Exemplo de erro resultante de uma dependência de terceiros vinculada estaticamente que não tem como destino 64 bits:
Undefined symbols for architecture x86_64:
"_LibraryFunction", referenced from:
-u command line option
ld: symbol(s) not found for architecture x86_64
Para compilar e executar com êxito, atualize essas dependências para 64 bits e recompile seu aplicativo.