Atualizando aplicativos Mac existentes
A atualização de um aplicativo existente para usar a API Unificada requer alterações no próprio arquivo de projeto, bem como nos namespaces e APIs usados no código do aplicativo.
O caminho para 64 bits
As novas APIs unificadas são necessárias para oferecer suporte a arquiteturas de dispositivo de 64 bits de um aplicativo Xamarin.Mac. A partir de 1º de fevereiro de 2015, a Apple exige que todos os novos envios de aplicativos para a Mac App Store ofereçam suporte a arquiteturas de 64 bits.
O Xamarin fornece ferramentas para o Visual Studio para Mac e o Visual Studio para automatizar o processo de migração da API Clássica para a API Unificada ou você pode converter os arquivos de projeto manualmente. Embora o uso do ferramental automático seja altamente sugerido, este artigo abordará ambos os métodos.
Antes de começar...
Antes de atualizar o código existente para a API unificada, é altamente recomendável eliminar todos os avisos de compilação. Muitos avisos na API Clássica se tornarão erros quando você migrar para o Unified. Corrigi-los antes de iniciar é mais fácil porque as mensagens do compilador da API clássica geralmente fornecem dicas sobre o que atualizar.
Atualização automatizada
Depois que os avisos tiverem sido corrigidos, selecione um projeto Mac existente no Visual Studio para Mac ou Visual Studio e escolha Migrar para a API unificada do Xamarin.Mac no menu Projeto . Por exemplo:
Você precisará concordar com este aviso antes que a migração automatizada seja executada (obviamente, você deve garantir que tenha backups/controle do código-fonte antes de embarcar nesta aventura):
Há dois tipos de Target Framework com suporte que podem ser selecionados ao usar a API unificada em um aplicativo Xamarin.Mac:
- Xamarin.Mac Mobile Framework - Este é o mesmo framework .NET ajustado usado pelo Xamarin.iOS e Xamarin.Android que suporta um subconjunto da estrutura completa do Desktop . Essa é a estrutura recomendada porque fornece binários médios menores devido ao comportamento de vinculação superior.
- Xamarin.Mac .NET 4.5 Framework - Esta estrutura é, novamente, um subconjunto da estrutura Desktop . No entanto, ele corta muito menos da estrutura completa do Desktop do que a estrutura Mobile e deve "apenas funcionar" com a maioria dos Pacotes NuGet ou bibliotecas 3rd party. Isso permite que o desenvolvedor consuma assemblies de área de trabalho padrão enquanto ainda usa uma estrutura com suporte, mas essa opção produz pacotes de aplicativos maiores. Esta é a estrutura recomendada onde assemblies .NET de terceiros 3rd estão sendo usados que não são compatíveis com o Xamarin.Mac Mobile Framework. Para obter uma lista de assemblies suportados, consulte nossa documentação de montagens .
Para obter informações detalhadas sobre as Estruturas de Destino e as implicações de selecionar um destino específico para seu aplicativo Xamarin.Mac, consulte nossa documentação de Estruturas de Destino.
A ferramenta basicamente automatiza todas as etapas descritas na seção Atualizar manualmente apresentada abaixo e é o método sugerido para converter um projeto Xamarin.Mac existente para a API unificada.
Etapas para atualizar manualmente
Novamente, depois que os avisos forem corrigidos, siga estas etapas para atualizar manualmente os aplicativos Xamarin.Mac para usar a nova API unificada:
1. Atualizar o tipo de projeto & Build Target
Altere o sabor do projeto em seus arquivos csproj de 42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23
para A3F8F2AB-B479-4A4A-A458-A89E7DC349F1
. Edite o arquivo csproj em um editor de texto, substituindo o primeiro item no <ProjectTypeGuids>
elemento conforme mostrado:
Altere o elemento Import que contém Xamarin.Mac.targets
para Xamarin.Mac.CSharp.targets
conforme mostrado:
Adicione as seguintes linhas de código após o <AssemblyName>
elemento :
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>
Exemplo:
2. Atualizar referências do projeto
Expanda o nó Referências do projeto de aplicativo Mac. Ele mostrará inicialmente uma referência *broken- XamMac semelhante a esta captura de tela (porque acabamos de mudar o tipo de projeto):
Clique no ícone de engrenagem ao lado da entrada XamMac e selecione Excluir para remover a referência quebrada.
Em seguida, clique com o botão direito do mouse na pasta Referências no Gerenciador de Soluções e selecione Editar Referências. Role até o final da lista de referências e marque o Xamarin.Mac.
Pressione OK para salvar as alterações de referências do projeto.
3. Remover MonoMac de namespaces
Remova o prefixo MonoMac de namespaces em using
instruções ou onde quer que um nome de classe tenha sido totalmente qualificado (por exemplo, MonoMac.AppKit
torna-se apenas AppKit
).
4. Remapear tipos
Foram introduzidos tipos nativos que substituem alguns tipos que foram usados anteriormente, como instâncias de System.Drawing.RectangleF
com CoreGraphics.CGRect
(por exemplo). A lista completa de tipos pode ser encontrada na página de tipos nativos.
5. Corrigir substituições de método
Alguns AppKit
métodos tiveram sua assinatura alterada para usar os novos tipos nativos (como nint
). Se as subclasses personalizadas substituírem esses métodos, as assinaturas não corresponderão mais e resultarão em erros. Corrija essas substituições de método alterando a subclasse para corresponder à nova assinatura usando tipos nativos.
Considerações
As considerações a seguir devem ser levadas em conta ao converter um projeto Xamarin.Mac existente da API Clássica para a nova API Unificada se esse aplicativo depender de um ou mais Componentes ou Pacotes NuGet.
Componentes
Qualquer componente que você tenha incluído em seu aplicativo também precisará ser atualizado para a API unificada ou você terá um conflito ao tentar compilar. Para qualquer componente incluído, substitua a versão atual por uma nova versão do Xamarin Component Store que ofereça suporte à API Unificada e faça uma compilação limpa. Qualquer componente que ainda não tenha sido convertido pelo autor, exibirá um aviso somente de 32 bits no repositório de componentes.
Suporte do NuGet
Embora tenhamos contribuído com alterações no NuGet para trabalhar com o suporte à API Unificada, não houve uma nova versão do NuGet, portanto, estamos avaliando como fazer com que o NuGet reconheça as novas APIs.
Até lá, assim como os componentes, você precisará alternar qualquer Pacote NuGet incluído em seu projeto para uma versão que ofereça suporte às APIs Unificadas e fazer uma compilação limpa depois.
Importante
Se você tiver um erro no formato "Erro 3 não é possível incluir 'monomac.dll' e 'Xamarin.Mac.dll' no mesmo projeto Xamarin.Mac - 'Xamarin.Mac.dll' é referenciado explicitamente, enquanto 'monomac.dll' é referenciado por 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'" depois de converter seu aplicativo para as APIs unificadas, geralmente é devido a ter um componente ou pacote NuGet no projeto que não foi atualizado para a API unificada. Você precisará remover o componente/NuGet existente, atualizar para uma versão que ofereça suporte às APIs Unificadas e fazer uma compilação limpa.
Ativando compilações de 64 bits de aplicativos Xamarin.Mac
Para um aplicativo móvel Xamarin.Mac que foi convertido para a API unificada, o desenvolvedor ainda precisa habilitar a criação do aplicativo para máquinas de 64 bits a partir das Opções do aplicativo. Consulte o documento Habilitando compilações de 64 bits de aplicativos Xamarin.Mac do documento Considerações sobre a plataforma de 32/64 bits para obter instruções detalhadas sobre como habilitar compilações de 64 bits.
Finalização
Independentemente de você optar ou não por usar o método automático ou manual para converter seu aplicativo Xamarin.Mac das APIs Clássicas para as Unificadas, há várias instâncias que exigirão intervenção manual adicional. Consulte nossas Dicas para atualizar o código para o documento da API unificada para problemas conhecidos e soluções alternativas.