Criar um projeto Xamarin.Forms no Visual Studio

Concluído

O padrão mais usado para desenvolvimento de aplicativos móveis é desenvolver duas vezes. Uma vez para Android e uma vez para iOS. Isso envolve lidar não apenas com SDKs separados, mas com linguagens e conjuntos de ferramentas completamente diferentes.

O Xamarin.Forms permite que você trabalhe em um ambiente de desenvolvimento integrado, com uma linguagem. Você cria sua interface do usuário uma vez e tanto iOS quanto Android usam essa definição de interface do usuário, incluindo as ações e os eventos que você codifica. Ao contrário de algumas outras soluções multiplataforma, o Xamarin.Forms não é renderizado em uma exibição da Web. Em vez disso, ele usa internamente o SDK do Android ou o SDK do iOS para criar controles nativos para desempenho nativo.

Nesta unidade, vamos entender como funciona o Xamarin.Forms e como os projetos são estruturados para nos permitir escrever código e a definição de interface do usuário uma vez e executá-la em várias plataformas.

O que é a pilha de tecnologia do Xamarin.Forms?

O Xamarin.Forms é incrivelmente fácil de usar, mas para entender como ele gerencia tudo, vamos dar uma olhada nas tecnologias envolvidas.

Sistema operacional

Como cada software em execução em praticamente qualquer tipo de sistema, programas escritos para dispositivos móveis são executados em sistemas operacionais. Sistemas operacionais fornecem muitos serviços, incluindo o acesso a itens críticos, como memória e CPU.

É possível escrever um programa em que apenas os serviços que você consome venham diretamente do sistema operacional. No entanto, criar aplicativos móveis dessa maneira é incomum. Significa usar C e talvez até mesmo assembly para compilar todo o aplicativo.

SDKs de plataforma

As plataformas nos fornecem abstrações de nível mais alto, criadas sobre os sistemas operacionais chamados SDKs (Software Development Kits). Os SDKs fornecem todas as ferramentas comuns que a maioria dos desenvolvedores usa para criar aplicativos. Incluem visuais como botões e campos de entrada de texto, bem como serviços como reconhecimento de voz e rede. Linguagens de desenvolvimento móvel comuns, como Java, Kotlin e Swift têm como destino os SDKs da plataforma.

Xamarin.iOS e Xamarin.Android

A próxima camada é a primeira camada do Xamarin. O Xamarin.Android e o Xamarin.iOS fornecem ao C# acesso a todos esses SDKs de Plataforma e serviços do sistema operacional. Assim, por exemplo, você pode usar C# para acessar um objeto java.lang.string ou entrada de texto do Android. O mesmo se aplica aos tipos do iOS.

Xamarin.Android e Xamarin.iOS também nos dão .NET. Incluindo BCL (Bibliotecas de Classe Base) e runtime. Este é o local em que encontramos itens como List<T>, HttpClient, System.String. Todos os tipos com que os desenvolvedores do .NET estão acostumados.

O Xamarin também faz a maioria dos tipos de plataforma interagir diretamente com os tipos de BCL do .NET. Por exemplo, posso atribuir uma System.String do .NET a ser exibida por um UILabel do iOS e isso simplesmente funciona.

Usar o Xamarin.iOS e o Xamarin.Android para criar diretamente aplicativos móveis é uma escolha popular. Pode ser uma excelente opção e permite que nossos aplicativos Android e iOS compartilhem uma lógica. No entanto, ainda precisaríamos criar a interface do usuário para cada plataforma separadamente. Por exemplo, se quiséssemos uma tela com um botão, no projeto Xamarin.Android, precisaríamos criar um android.widget.button e, no projeto Xamarin.iOS, criaríamos um UIButton.

Xamarin.Forms

Se quisermos definir nossa interface do usuário e o comportamento da interface do usuário apenas uma vez, vamos usar o Xamarin.Forms.

Em um projeto Xamarin.Forms, definimos o código do manipulador de eventos e da interface do usuário apenas uma vez e cada tipo é interpretado com base na plataforma na qual o aplicativo está em execução. Se o aplicativo usar um Xamarin.Forms.Button e o executarmos no iOS, teremos um UIButton do iOS. Se o executarmos no Android, teremos Android.Widget.Button. Como o Xamarin.Forms sempre usa os tipos de SDK da plataforma internos, obtemos o desempenho ideal que acompanha isso.

Dica

Falamos principalmente sobre o que o Xamarin.Forms pode fazer em termos de aplicativos móveis em iOS e Android. O código do Xamarin.Forms também pode ser executado no Windows, por meio da Plataforma Universal do Windows (UWP), bem como áreas de trabalho Mac e Linux.

O que o Xamarin.Forms oferece?

Como vimos, o Xamarin.Forms torna mais fácil acessar controles comuns, como botões. Outros controles comuns, como campos de entrada de texto, rótulos e selecionadores de data, são tão fáceis quanto. Porém, os controles individuais não são suficientes para uma boa plataforma para a criação de aplicativos avançados. O Xamarin.Forms também nos fornece:

  • Um mecanismo de layout elaborado para a criação de nossas páginas.
  • Vários tipos de página para criar tipos de navegação avançados, como gavetas.
  • Suporte para XAML e associação de dados para padrões de desenvolvimento mais elegantes e fáceis de manter.

Você também pode estender a funcionalidade do Xamarin.Forms de várias maneiras:

  • Pacotes do NuGet ajudam você a usar produtos de terceiros e outras bibliotecas da Microsoft em seus aplicativos Xamarin.Forms.
  • Controles nativos. Por exemplo, quando seu aplicativo Xamarin.Forms é executado no Android, ele pode incluir um botão de ação flutuante. Ou, no iOS, você pode incluir um UISegmentedControl.
  • Controles personalizados. Você sempre pode disponibilizar seus próprios controles personalizados para o Xamarin.Forms. Na verdade, se o controle já existir para Android e iOS, expô-los ao Xamarin.Forms costuma exigir apenas algumas linhas de código.

Abordaremos controles nativos e personalizados melhor em outros módulos.

Xamarin.Essentials

O Xamarin.Forms central torna a interface do usuário mais fácil de gerenciar. Porém, o Xamarin.Essentials trata de muitas das necessidades comuns de aplicativos móveis que não estão relacionadas à interface do usuário. Isso significa que, depois de adicionar o pacote do NuGet do Xamarin.Essentials, você pode acessar itens como GPS, acelerômetro e estados da bateria e da rede. Existem dezenas de sensores e serviços comuns para desenvolvimento móvel aos quais o Xamarin.Essentials nos dá acesso conveniente.

Novos modelos de projeto do Visual Studio para aplicativos do Xamarin.Forms incluem o pacote do NuGet do Xamarin.Essentials automaticamente.

Como começar

Com o Visual Studio e a carga de trabalho de desenvolvimento móvel instalados, temos o necessário para começar a criar aplicativos móveis. Até mesmo a Community Edition gratuita do Visual Studio funciona.

Para criar um projeto do Visual Studio 2019, vá para a caixa de diálogo Novo Projeto e pesquise "móvel". Em seguida, selecione o modelo Aplicativo Móvel (Xamarin.Forms). (Faremos exatamente isso durante nosso primeiro exercício de codificação.) Em seguida, você inserirá um nome e um local para o novo projeto. A próxima caixa de diálogo tem alguns modelos de aplicativo inicial para escolher. Selecione Em Branco, pois vamos adicionar nossas próprias páginas e navegação personalizadas. Conforme você verá em nosso primeiro exercício, até mesmo o modelo de aplicativo em branco vem com uma página de tipo "Olá, Mundo" inicial, portanto, não está totalmente em branco. Essa também é a caixa de diálogo em que você escolherá as plataformas às quais deseja dar suporte com o aplicativo Xamarin.Forms.

A estrutura da solução tem esta aparência:

Screenshot of Solution Explorer showing a new blank Xamarin.Forms app collapsed to project names: App1, App1.Android, and App1.iOS.

Três projetos são criados na solução. Todos eles têm o mesmo nome raiz, mas dois deles têm um sufixo (".iOS"ou ".Android"). Os projetos são compilados em programas executáveis, um para cada plataforma. Às vezes, eles são chamados de projetos principais. O terceiro projeto é usado pelos executáveis e é nele que colocamos todo o código e marcação que desejamos que tenham em comum. Em uma solução típica do Xamarin.Forms, quase todo o nosso trabalho acontecerá neste projeto de terceiro.

Projetos principais

Observando mais atentamente os projetos principais, podemos ver que o iOS e o Android têm diferentes construções básicas. Por exemplo, o iOS tem um Main.cs e um AppDelegate.cs, mas o Android tem um MainActivity.cs. O motivo pelo qual eles são diferentes é que a construção do projeto iOS usa os mesmos blocos de construção que qualquer projetos do iOS, incluindo projetos Objective-C ou Swift. O projeto do Android usa os mesmos blocos de construção que um projeto Java ou Kotlin do Android. Fundamentalmente, esses projetos são apenas um aplicativo Android usando o Xamarin.Android e um aplicativo IOS usando o Xamarin.iOS, expondo suas APIs como classes C#.

Screenshot showing platform-specific head projects, with project file structure and contents expanded.

The Android app, App1.Android, includes an Assets folder, Resources folder, and MainActivity.cs. The iOS app, App1.iOS, includes Asset Catalogs, Native References, Resources, AppDelegate.cs, and Entitlements.plist.

Se observarmos o ponto de entrada principal de cada tipo de projeto, veremos que cada um inicializa o Xamarin.Forms e proporciona explicitamente a nosso aplicativo Xamarin.Forms a capacidade de controlar como a interface do usuário é criada.

No iOS, vemos isso no método FinishedLaunching do arquivo AppDelegate.cs.

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();
    LoadApplication(new App());
    ...
}

No Android, ele está no método OnCreate do arquivo MainActivity.cs.

protected override void OnCreate(Bundle savedInstanceState)
{
    ...
    global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
    LoadApplication(new App());
}

Dica

Se quisermos que nosso projeto Xamarin.Forms seja executado em ainda mais plataformas, poderemos adicionar mais projetos principais à solução. Eles teriam as próprias maneiras de carregar e inicializar o Xamarin.Forms.

Essa chamada para LoadApplication() tem uma referência a new App() nela. Essa classe App é o nosso aplicativo Xamarin.Forms. É nela que vamos definir a interface do usuário e o comportamento para nosso aplicativo.

A seção Referências em nossos projetos principais mostrará que cada projeto principal faz referência ao projeto comum. Os projetos principais e o projeto comum também fazem referência às bibliotecas do Xamarin.Forms. É assim que podemos usar a funcionalidade do Xamarin.Forms.

Verificar seu conhecimento

1.

Os projetos de cabeçalho precisam carregar um aplicativo Xamarin.Forms para ele ser executado. Qual dessas ações ele precisa fazer primeiro?

2.

O Xamarin.Essentials nos permite usar muitos serviços e sensores em nossos dispositivos. Qual destes é um dos serviços com os quais ele ajuda?