Atualizando aplicativos Xamarin.Forms existentes

Siga estas etapas para atualizar um aplicativo Xamarin.Forms existente para usar a API Unificada e atualizar para a versão 1.3.1

Importante

Como o Xamarin.Forms 1.3.1 é a primeira versão que dá suporte à API Unificada, toda a solução deve ser atualizada para usar a versão mais recente ao mesmo tempo em que migra o aplicativo iOS para o Unified. Isso significa que, além de atualizar o projeto do iOS para suporte unificado, você também precisará editar o código em todos os projetos da solução.

A atualização é realizada em duas etapas:

  1. Migre o aplicativo iOS para a API Unificada usando a ferramenta de migração interna do Visual Studio para Mac.

    • Use a ferramenta de migração para atualizar automaticamente o projeto.

    • Atualize as APIs nativas do iOS conforme descrito nas instruções para atualizar aplicativos iOS (especificamente no renderizador personalizado ou no código do serviço de dependência).

  2. Atualize toda a solução para o Xamarin.Forms versão 1.3.

    1. Instale o pacote NuGet do Xamarin.Forms 1.3.1.

    2. Atualize a App classe no código compartilhado.

    3. Atualize o AppDelegate no projeto iOS.

    4. Atualize o MainActivity no projeto Android.

    5. Atualize o MainPage no projeto do Windows Phone.

1. Aplicativo iOS (Migração Unificada)

Parte da migração requer a atualização do Xamarin.Forms para a versão 1.3, que dá suporte à API Unificada. Para que as referências de assembly corretas sejam criadas, primeiro precisamos atualizar o projeto do iOS para usar a API unificada.

Ferramenta de migração

Clique no projeto do iOS para que ele seja selecionado e, em seguida, escolha Migrar Projeto > para a API Unificada do Xamarin.iOS... e concorde com a mensagem de aviso exibida.

Escolha Migrar projeto > para a API unificada do Xamarin.iOS... e concorde com a mensagem de aviso que aparece

Isso irá automaticamente:

  • Altere o tipo de projeto para dar suporte à API unificada de 64 bits.
  • Altere a referência de estrutura para Xamarin.iOS (substituindo a referência monotouch antiga).
  • Altere as referências de namespace no código para remover o prefixo MonoTouch .
  • Atualize o arquivo csproj para usar os destinos de build corretos para a API Unificada.

Limpe e construa o projeto para garantir que não haja outros erros a serem corrigidos. Nenhuma ação adicional deve ser necessária. Essas etapas são explicadas com mais detalhes nos documentos da API unificada.

Atualizar APIs nativas do iOS (se necessário)

Se você tiver adicionado código nativo do iOS adicional (como renderizadores personalizados ou serviços de dependência), talvez seja necessário executar correções manuais de código adicionais. Recompile seu aplicativo e consulte as instruções de atualização de aplicativos iOS existentes para obter informações adicionais sobre as alterações que podem ser necessárias. Essas dicas também ajudarão a identificar as mudanças necessárias.

2. Atualização do Xamarin.Forms 1.3.1

Depois que o aplicativo iOS tiver sido atualizado para a API Unificada, o restante da solução precisará ser atualizado para o Xamarin.Forms versão 1.3.1. Isso inclui:

  • Atualizando o pacote NuGet do Xamarin.Forms em cada projeto.
  • Alterando o código para usar as novas classes Xamarin.Forms Application, FormsApplicationDelegate (iOS), FormsApplicationActivity (Android) e FormsApplicationPage (Windows Phone).

Essas etapas são explicadas abaixo:

2.1 Atualizar o NuGet em todos os projetos

Atualize o Xamarin.Forms para o pré-lançamento 1.3.1 usando o Gerenciador de Pacotes NuGet para todos os projetos na solução: PCL (se presente), iOS, Android e Windows Phone. É recomendável excluir e adicionar novamente o pacote NuGet do Xamarin.Forms para atualizar para a versão 1.3.

Observação

O Xamarin.Forms versão 1.3.1 está atualmente em pré-lançamento. Isso significa que você deve selecionar a opção de pré-lançamento no NuGet (por meio de uma caixa de seleção no Visual Studio para Mac ou uma lista suspensa no Visual Studio) para ver a versão de pré-lançamento mais recente.

Importante

Se você estiver usando o Visual Studio, verifique se a versão mais recente do Gerenciador de Pacotes NuGet está instalada. Versões mais antigas do NuGet no Visual Studio não instalarão corretamente a versão unificada do Xamarin.Forms 1.3.1. Vá para Ferramentas > , Extensões e Atualizações... e clique na lista Instalados para verificar se o Gerenciador de Pacotes NuGet para Visual Studio é pelo menos a versão 2.8.5. Se for mais antigo, clique na lista Atualizações para baixar a versão mais recente.

Depois de atualizar o pacote NuGet para o Xamarin.Forms 1.3.1, faça as seguintes alterações em cada projeto para atualizar para a nova Xamarin.Forms.Application classe.

2.2 Biblioteca de classes portátil (ou projeto compartilhado)

Altere o arquivo App.cs para que:

  • A App classe agora herda de Application.
  • A MainPage propriedade é definida como a primeira página de conteúdo que você deseja exibir.
public class App : Application // superclass new in 1.3
{
    public App ()
    {
        // The root page of your application
        MainPage = new ContentPage {...}; // property new in 1.3
    }

Removemos completamente o GetMainPage método e, em vez disso, definimos a Application MainPage propriedade na subclasse.

Essa nova Application classe base também dá suporte a , OnSleepe OnResume substituições para ajudá-lo a gerenciar o OnStartciclo de vida do aplicativo.

A App classe é então passada para um novo LoadApplication método em cada projeto de aplicativo, conforme descrito abaixo:

2.3 Aplicativo iOS

Altere o arquivo AppDelegate.cs para que:

  • A classe herda de FormsApplicationDelegate (em vez de UIApplicationDelegate anteriormente).
  • LoadApplication é chamado com uma nova instância de App.
[Register ("AppDelegate")]
public partial class AppDelegate :
    global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init ();

        LoadApplication (new App ());  // method is new in 1.3

        return base.FinishedLaunching (app, options);
    }
}

2.3 Aplicativo Android

Altere o arquivo MainActivity.cs para que:

  • A classe herda de FormsApplicationActivity (em vez de FormsActivity anteriormente).
  • LoadApplication é chamado com uma nova instância de App
[Activity (Label = "YOURAPPNAM", Icon = "@drawable/icon", MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity :
    global::Xamarin.Forms.Platform.Android.FormsApplicationActivity // superclass new in 1.3
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        global::Xamarin.Forms.Forms.Init (this, bundle);

        LoadApplication (new App ()); // method is new in 1.3
    }
}

2.4 Aplicativo para Windows Phone

Precisamos atualizar o MainPage - tanto o XAML quanto o codebehind.

Altere o arquivo MainPage.xaml para que:

  • O elemento XAML raiz deve ser winPhone:FormsApplicationPage.
  • O xmlns:phone atributo deve ser alterado para xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"

Um exemplo atualizado é mostrado abaixo - você só deve editar essas coisas (o restante dos atributos deve permanecer o mesmo):

<winPhone:FormsApplicationPage
   ...
   xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
    ...>
</winPhone:FormsApplicationPage>

Altere o arquivo MainPage.xaml.cs para que:

  • A classe herda de FormsApplicationPage (em vez de PhoneApplicationPage anteriormente).
  • LoadApplication é chamado com uma nova instância da classe Xamarin.Forms App . Talvez seja necessário qualificar totalmente essa referência, pois o Windows Phone já tem sua própria App classe definida.
public partial class MainPage : global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage // superclass new in 1.3
{
    public MainPage()
    {
        InitializeComponent();
        SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new YOUR_APP_NAMESPACE.App()); // new in 1.3
    }
 }

Solução de problemas

Ocasionalmente, você verá um erro semelhante a este após atualizar o pacote NuGet do Xamarin.Forms. Isso ocorre quando o atualizador do NuGet não remove completamente as referências a versões mais antigas dos arquivos csproj .

YOUR_PROJECT.csproj: Erro: este projeto faz referência a pacotes NuGet que estão ausentes neste computador. Habilite a Restauração de Pacote NuGet para baixá-los. Para obter mais informações, consulte https://go.microsoft.com/fwlink/?LinkID=322105. O arquivo ausente é .. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)

Para corrigir esses erros, abra o arquivo csproj em um editor de texto e procure <Target elementos que se referem a versões mais antigas do Xamarin.Forms, como o elemento mostrado abaixo. Você deve excluir manualmente todo esse elemento do arquivo csproj e salvar as alterações.

  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets'))" />
  </Target>

O projeto deve ser compilado com êxito assim que essas referências antigas forem removidas.

Considerações

As considerações a seguir devem ser levadas em conta ao converter um projeto existente do Xamarin.Forms da API Clássica para a nova API Unificada se esse aplicativo depender de um ou mais Component ou NuGet Package.

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 Repositório de Componentes do Xamarin que dá suporte à API Unificada e faça um build limpo. 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 funcionar 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 dê suporte às APIs Unificadas e fazer um build limpo posteriormente.

Importante

Se você tiver um erro no formulário "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, normalmente é 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 dê suporte às APIs Unificadas e fazer um build limpo.

Habilitando builds 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 computadores de 64 bits nas Opções do aplicativo. Consulte o documento Habilitando builds de 64 bits de aplicativos Xamarin.iOS do documento Considerações de plataforma de 32/64 bits para obter instruções detalhadas sobre como habilitar builds de 64 bits.

Resumo

O aplicativo Xamarin.Forms agora deve ser atualizado para a versão 1.3.1 e o aplicativo iOS migrado para a API Unificada (que dá suporte a arquiteturas de 64 bits na plataforma iOS).

Conforme observado acima, se o aplicativo Xamarin.Forms incluir código nativo, como renderizadores personalizados ou serviços de dependência, eles também poderão precisar ser atualizados para usar os novos tipos introduzidos na API unificada.