Atualizando aplicativos iOS existentes

Siga estas etapas para atualizar um aplicativo Xamarin.iOS existente para usar a API unificada.

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 dispositivos de 64 bits a partir de um aplicativo móvel Xamarin.iOS. A partir de 1º de fevereiro de 2015, a Apple exige que todos os novos envios de aplicativos para a iTunes App Store suportem 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 forem corrigidos, selecione um projeto iOS existente no Visual Studio para Mac ou Visual Studio e escolha Migrar para a API unificada do Xamarin.iOS no menu Projeto . Por exemplo:

Choose Migrate to Xamarin.iOS 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

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.iOS 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.iOS para usar a nova API unificada:

1. Atualizar o tipo de projeto & Build Target

Altere o sabor do projeto em seus arquivos csproj de 6BC8ED88-2882-458C-8E55-DFD12B67127B para FEACFBD2-3405-455C-9665-78FE426C6842. 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.MonoTouch.CSharp.targets para Xamarin.iOS.CSharp.targets conforme mostrado:

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

2. Atualizar referências do projeto

Expanda o nó Referências do projeto de aplicativo iOS. Ele mostrará inicialmente uma referência *broken-monotouch semelhante a esta captura de tela (porque acabamos de mudar o tipo de projeto):

It will initially show a broken- monotouch reference similar to this screenshot because the project type changed

Clique com o botão direito do mouse no projeto do aplicativo iOS para Editar referências, clique na referência monotouch e exclua-a usando o botão vermelho "X".

Right-click on the iOS application project to Edit References, then click on the monotouch reference and delete it using the red X button

Agora role até o final da lista de referências e marque o assembly Xamarin.iOS .

Now scroll to the end of the references list and tick the Xamarin.iOS assembly

Pressione OK para salvar as alterações de referências do projeto.

3. Remover MonoTouch de namespaces

Remova o prefixo MonoTouch de namespaces em using instruções ou onde quer que um nome de classe tenha sido totalmente qualificado (por exemplo, MonoTouch.UIKit torna-se apenas UIKit).

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

Os exemplos incluem alterar public override int NumberOfSections (UITableView tableView) para retornar nint e alterar o tipo de retorno e os tipos de parâmetro em public override int RowsInSection (UITableView tableView, int section) nint.

Considerações

As considerações a seguir devem ser levadas em conta ao converter um projeto Xamarin.iOS 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 'monotouch.dll' e 'Xamarin.iOS.dll' no mesmo projeto Xamarin.iOS - 'Xamarin.iOS.dll' é referenciado explicitamente, enquanto 'monotouch.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.iOS

Para um aplicativo móvel Xamarin.iOS 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.iOS 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.iOS das APIs Clássicas para as APIs 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.