Partilhar via


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:

Choose Migrate to Xamarin.Mac Unified API from the Project menu

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):

Agree to this warning before the automated migration will run

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:

Edit the csproj file in a text editor, replacing the first item in the ProjectTypeGuids element as shown

Altere o elemento Import que contém Xamarin.Mac.targets para Xamarin.Mac.CSharp.targets conforme mostrado:

Change the Import element that contains Xamarin.Mac.targets to Xamarin.Mac.CSharp.targets as shown

Adicione as seguintes linhas de código após o <AssemblyName> elemento :

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>

Exemplo:

Add these lines of code after the <AssemblyName> element

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):

It will initially show a broken- XamMac reference similar to this screenshot

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.

Scroll to the bottom of the list of references and place a check besides 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.