Visão Geral

O Xamarin.Forms geralmente é usado para desenvolver aplicativos multiplataforma nativos. Basicamente, o Xamarin.Forms é uma camada de abstração que permite a interação do código compartilhado com o código da plataforma subjacente do Android, iOS e Windows.

Usando o Xamarin.Forms, um desenvolvedor de aplicativo móvel multiplataforma pode economizar tempo de desenvolvimento escrevendo toda a lógica de negócios em um único idioma. Quase 90% do código necessário para desenvolver um aplicativo é compartilhado entre plataformas, permitindo que você obtenha desempenho nativo e a mesma aparência em cada uma delas.

Como você sabe, a interface do usuário do aplicativo multiplataforma .NET é popularmente conhecida como .NET MAUI. Ele é usado para criar aplicativos multiplataforma nativos com .NET para Android, iOS, macOS e Windows. O .NET MAUI é construído sobre o Xamarin.Forms, evoluindo a plataforma para o próximo nível.

Com o .NET MAUI, a Microsoft inicia uma jornada para criar uma plataforma .NET unificada como uma única classe base para .NET Core e Mono/Xamarin juntos.

Como o .NET MAUI é uma evolução do Xamarin.Forms, eles têm a maioria de seus recursos em comum. É possível obter quase tudo que o Xamarin possui no .NET MAUI, como controles, layouts, Shell, gestures, templates e APIs multiplataforma para recursos de dispositivo.


Não é necessário reescrever os aplicativos Xamarin.Forms para migra-los para o .NET MAUI. No entanto, será preciso fazer algumas alterações de código em cada aplicativo. Da mesma forma, é possível utilizar os recursos de projeto único sem mesclar todos os projetos do Xamarin.Forms em um projeto. Para iniciar a migração, siga os seguintes passos:

Criando uma Nova Solução

Visão geral

Para migrar o aplicativo Xamarin.Forms, crie uma nova solução MAUI.

Certifique-se de que o novo nome da solução corresponda ao namespace raiz do aplicativo existente. 

Isso garantirá o mínimo de conflito possível ao importar os componentes existentes.

Linha de Comando

Em um terminal, execute o seguinte comando para gerar um novo MAUI App:

dotnet new maui -n TotvsApp



Visual Studio 2022

Criar um novo projeto com o modelo padrão .NET MAUI App.

Navegando na Solução

A nova solução será criada e conterá um arquivo TotvsApp.sln que pode ser aberto com o Visual Studio 2022 no Windows ou Mac.

A solução recém-gerada conterá um aplicativo MAUI simples. Os projetos MAUI têm uma nova estrutura, consolidando todos os projetos específicos de plataforma em um único projeto. Eles foram movidos para a pasta Platforms. Ainda é possível escrever código iOS, Android ou Windows e configurações específicas para cada plataforma nesta pasta. Em Resources conterá outros arquivos necessários para o aplicativo, como imagens, fontes, arquivos de banco de dados etc.

Compatibilidade entre Plataformas

Para evitar erros de compilação, remova as plataformas que não são compatíveis com os pacotes do seu Aplicativo no arquivo de projeto (.csproj):

<TargetFrameworks>net6.0-android;net6.0-ios;net6.0-maccatalyst</TargetFrameworks>

<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net6.0-windows10.0.19041.0</TargetFrameworks>

<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">14.2</SupportedOSPlatformVersion>

<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">14.0</SupportedOSPlatformVersion>

<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>

<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>

<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>

Migrando XAML e Códigos Existentes

 O primeiro passo é trazer o XAML e o código-fonte do aplicativo existente no Xamarin.Forms. Abaixo está uma lista de todos os arquivos e pastas que foram migrados.

Seria uma boa ideia adicionar o projeto MAUI a um provedor de controle de versão e verificar regularmente as alterações ao longo da migração. 

Isso facilitará a reversão para alterações anteriores ou a execução de algumas tentativas e erros.


Usando o explorador de arquivos, arraste e solte o conteúdo necessário do projeto existente para a pasta raiz do seu novo projeto MAUI. O conteúdo ficará semelhante à figura abaixo.

Etapas Principais de Migração de Código do Xamarin.Forms



Etapas de Migração do Xamarin Community Toolkit

       



Adicionando o Pacote do SQLite

       



Adicionando o Pacote do Firebase



Migrando Arquivos de Fonte

O registro de fontes foi simplificado no Microsoft MAUI.



Migrando Imagens

O registro de fontes foi simplificado no Microsoft MAUI.


Controles Personalizados

O .NET MAUI Entry é um controle de entrada de texto, que implementa a interface IEntry. No iOS, o EntryHandler mapeia o Entry para o controle nativo UITextField. No Android, o Entry é mapeado para um AppCompatEditText, e no Windows o Entry é mapeado para um TextBox, como é mostrado na figura abaixo:


O mapeador de propriedades do Entry, na classe EntryHandler, mapeia as propriedades de controle multiplataforma para a API de visualização nativa. Isso garante que, quando uma propriedade for definida em um Entry, a exibição nativa seja atualizada conforme necessário.

void ModifyEntry()
    {
        Microsoft.Maui.Handlers.EntryHandler.Mapper.AppendToMapping("MyCustomization", (handler, view) =>
        {
#if ANDROID
            handler.PlatformView.SetBackgroundColor(Colors.Transparent.ToPlatform());
#elif IOS
            handler.PlatformView.BorderStyle = UIKit.UITextBorderStyle.None;
#elif WINDOWS
            handler.PlatformView.FontWeight = Microsoft.UI.Text.FontWeights.Thin;
#endif
        });
    }

Reutilizando um Controle Customizado do Xamarin.Forms