Parte 1 – Entendendo a plataforma móvel Xamarin

A plataforma Xamarin consiste em muitos elementos que permitem desenvolver aplicativos para iOS e Android:

  • Linguagem C# – Permite que você use uma sintaxe familiar e recursos sofisticados como Genéricos, LINQ e a Biblioteca de Tarefas Paralelas.
  • Mono .NET framework – Fornece uma implementação multiplataforma dos recursos abrangentes no .NET framework da Microsoft.
  • Compilador – Dependendo da plataforma, produz um aplicativo nativo (por exemplo, iOS) ou um aplicativo .NET integrado e tempo de execução (por exemplo, Android). O compilador também executa muitas otimizações para implantação móvel, como vincular código não utilizado.
  • Ferramentas IDE – O Visual Studio no Mac e no Windows permite criar, compilar e implantar projetos Xamarin.

Além disso, como a linguagem subjacente é C# com o .NET framework, os projetos podem ser estruturados para compartilhar código que também pode ser implantado no Windows Phone.

Nos bastidores

Embora o Xamarin permita que você escreva aplicativos em C# e compartilhe o mesmo código em várias plataformas, a implementação real em cada sistema é diferente.

Compilação

A origem do C# chega a um aplicativo nativo de maneiras diferentes em cada plataforma:

  • iOS – C# é antecipado (AOT) compilado para a linguagem assembly ARM. O .NET framework está incluído, com classes não utilizadas sendo removidas durante a vinculação para reduzir o tamanho do aplicativo. A Apple não permite a geração de código em tempo de execução no iOS, portanto, alguns recursos de idioma não estão disponíveis (consulte Limitações do Xamarin.iOS ).
  • Android – C# é compilado para IL e empacotado com MonoVM + JIT'ing. As classes não utilizadas na estrutura são removidas durante a vinculação. O aplicativo é executado lado a lado com Java/ART (tempo de execução do Android) e interage com os tipos nativos via JNI (consulte Limitações do Xamarin.Android).
  • Windows – C# é compilado para IL e executado pelo tempo de execução interno e não requer ferramentas Xamarin. Projetar aplicativos do Windows seguindo as orientações do Xamarin simplifica a reutilização do código no iOS e no Android. A Plataforma Universal do Windows também tem uma opção .NET Nativa , que se comporta de forma semelhante à compilação AOT do Xamarin.iOS.

A documentação do vinculador para Xamarin.iOS e Xamarin.Android fornece mais informações sobre essa parte do processo de compilação.

A "compilação" em tempo de execução – gerando código dinamicamente com System.Reflection.Emit – deve ser evitada.

O kernel da Apple impede a geração dinâmica de código em dispositivos iOS, portanto, emitir código em tempo real não funcionará no Xamarin.iOS. Da mesma forma, os recursos do Dynamic Language Runtime não podem ser usados com as ferramentas do Xamarin.

Alguns recursos de reflexão funcionam (por exemplo, MonoTouch.Dialog o usa para a API de reflexão), mas não a geração de código.

Acesso ao SDK da plataforma

O Xamarin torna os recursos fornecidos pelo SDK específico da plataforma facilmente acessíveis com sintaxe C# familiar:

  • iOS – Xamarin.iOS expõe as estruturas do SDK CocoaTouch da Apple como namespaces que você pode referenciar a partir do C#. Por exemplo, a estrutura UIKit que contém todos os controles da interface do usuário pode ser incluída com uma instrução simples using UIKit; .
  • Android – Xamarin.Android expõe o SDK do Android do Google como namespaces, para que você possa fazer referência a qualquer parte do SDK suportado com uma instrução de uso, como using Android.Views; para acessar os controles da interface do usuário.
  • Windows – Os aplicativos do Windows são criados usando o Visual Studio no Windows . Os tipos de projeto incluem Windows Forms, WPF, WinRT e a Plataforma Universal do Windows (UWP).

Integração perfeita para desenvolvedores

A beleza do Xamarin é que, apesar das diferenças sob o capô, o Xamarin.iOS e o Xamarin.Android (juntamente com os SDKs do Windows da Microsoft) oferecem uma experiência perfeita para escrever código C# que pode ser reutilizado em todas as três plataformas.

A lógica de negócios, o uso do banco de dados, o acesso à rede e outras funções comuns podem ser gravadas uma vez e reutilizadas em cada plataforma, fornecendo uma base para interfaces de usuário específicas da plataforma que parecem e funcionam como aplicativos nativos.

Disponibilidade do ambiente de desenvolvimento integrado (IDE)

O desenvolvimento do Xamarin pode ser feito no Visual Studio no Mac ou no Windows. O IDE que você escolher será determinado pelas plataformas que você deseja segmentar.

Como os aplicativos do Windows só podem ser desenvolvidos no Windows, para compilar para iOS, Android e Windows é necessário o Visual Studio para Windows. No entanto, é possível compartilhar projetos e arquivos entre computadores Windows e Mac, para que os aplicativos iOS e Android possam ser criados em um Mac e o código compartilhado possa ser adicionado posteriormente a um projeto do Windows.

Os requisitos de desenvolvimento para cada plataforma são discutidos em mais detalhes no Guia de requisitos .

iOS

O desenvolvimento de aplicativos iOS requer um computador Mac com macOS. Você também pode usar o Visual Studio para escrever e implantar aplicativos iOS com o Xamarin no Visual Studio. No entanto, um Mac ainda é necessário para fins de compilação e licenciamento.

O Xcode IDE da Apple deve ser instalado para fornecer o compilador e o simulador para teste. Você pode testar em seus próprios dispositivos gratuitamente, mas para criar aplicativos para distribuição (por exemplo, a App Store), você deve participar do Programa de Desenvolvedores da Apple (US $ 99 por ano). Cada vez que você enviar ou atualizar um aplicativo, ele deve ser revisado e aprovado pela Apple antes de ser disponibilizado para download pelos clientes.

O código é escrito com o IDE do Visual Studio e os layouts de tela podem ser criados programaticamente ou editados com o Xcode em um Mac.

Consulte o Guia de Instalação do Xamarin.iOS para obter instruções detalhadas sobre como configurar.

Android

O desenvolvimento de aplicativos Android requer que os SDKs Java e Android sejam instalados. Os SDKs fornecem o compilador, emulador e outras ferramentas necessárias para compilação, implantação e teste. Java, SDK Android do Google e ferramentas do Xamarin podem ser instalados e executados no Windows e macOS. As seguintes configurações são recomendadas:

  • Windows 10 com Visual Studio 2019
  • macOS Mojave (10.11+) com Visual Studio 2019 para Mac

O Xamarin fornece um instalador unificado que configurará seu sistema com as ferramentas Java, Android e Xamarin de pré-requisito (incluindo um designer visual para layouts de tela). Consulte o Guia de Instalação do Xamarin.Android para obter instruções detalhadas.

Você pode criar e testar aplicativos em um dispositivo real sem qualquer licença do Google, no entanto, para distribuir seu aplicativo através de uma loja (como Google Play, Amazon ou Barnes & Noble) uma taxa de registro pode ser paga ao operador. O Google Play publicará seu aplicativo instantaneamente, enquanto as outras lojas têm um processo de aprovação semelhante ao da Apple.

Windows

Os aplicativos do Windows (WinForms, WPF ou UWP) são criados com o Visual Studio. Eles não usam Xamarin diretamente. No entanto, o código C# pode ser compartilhado entre Windows, iOS e Android. Visite o Centro de Desenvolvimento da Microsoft para saber mais sobre as ferramentas necessárias para o desenvolvimento do Windows.

Criando a interface do usuário (UI)

Um dos principais benefícios do uso do Xamarin é que a interface do usuário do aplicativo usa controles nativos em cada plataforma, criando aplicativos que são indistinguíveis de um aplicativo escrito em Objective-C ou Java (para iOS e Android, respectivamente).

Ao criar telas em seu aplicativo, você pode dispor os controles no código ou criar telas completas usando as ferramentas de design disponíveis para cada plataforma.

Criar controles programaticamente

Cada plataforma permite que os controles da interface do usuário sejam adicionados a uma tela usando código. Isso pode ser demorado, pois pode ser difícil visualizar o design concluído ao codificar coordenadas de pixel para posições e tamanhos de controle.

No entanto, a criação programática de controles tem benefícios, especialmente no iOS para criar visualizações que redimensionam ou renderizam de forma diferente nos tamanhos de tela do iPhone e iPad.

Visual Designer

Cada plataforma tem um método diferente para dispor visualmente as telas:

  • iOS – Os storyboards contêm várias Visualizações e Controles e podem ser acessados no . Arquivo de storyboard incluído no seu projeto.
  • Android – O Xamarin fornece um designer de interface do usuário de arrastar e soltar do Android para Visual Studio.
  • Windows – A Microsoft fornece um designer de interface do usuário de arrastar e soltar no Visual Studio e no Blend. Os layouts de tela são armazenados como . Arquivos XAML.

Estas capturas de tela mostram os designers de tela visual disponíveis em cada plataforma:

These screenshots show the visual screen designers available on each platform

Em todos os casos, os elementos que você cria visualmente podem ser referenciados em seu código.

Considerações sobre a interface do usuário

Um dos principais benefícios do uso do Xamarin para criar aplicativos de plataforma cruzada é que eles podem aproveitar os kits de ferramentas de interface do usuário nativos para apresentar uma interface familiar ao usuário. A interface do usuário também será executada tão rápido quanto qualquer outro aplicativo nativo.

Algumas metáforas da interface do usuário funcionam em várias plataformas (por exemplo, todas as três plataformas usam um controle de lista de rolagem semelhante), mas para que seu aplicativo "se sinta" certo, a interface do usuário deve aproveitar os elementos da interface do usuário específicos da plataforma quando apropriado. Exemplos de metáforas de interface do usuário específicas da plataforma incluem:

  • iOS – navegação hierárquica com botão de volta suave, abas na parte inferior da tela.
  • Android – botão voltar de hardware/sistema-software, menu de ação, abas na parte superior da tela.
  • Windows – As aplicações do Windows podem ser executadas em computadores de secretária, tablets (como o Microsoft Surface) e telemóveis. Os dispositivos Windows 10 podem ter botão Voltar de hardware e blocos dinâmicos, por exemplo.

É recomendável que você leia as diretrizes de design relevantes para as plataformas que você está segmentando:

Reutilização de biblioteca e código

A plataforma Xamarin permite a reutilização do código C# existente em todas as plataformas e a integração de bibliotecas escritas nativamente para cada plataforma.

Código-fonte e bibliotecas em C#

Como os produtos Xamarin usam C# e a estrutura .NET, muitos códigos-fonte existentes (projetos internos e de código aberto) podem ser reutilizados em projetos Xamarin.iOS ou Xamarin.Android. Muitas vezes, a fonte pode ser simplesmente adicionada a uma solução Xamarin e funcionará imediatamente. Se um recurso do .NET framework sem suporte tiver sido usado, alguns ajustes podem ser necessários.

Exemplos de origem C# que podem ser usados no Xamarin.iOS ou Xamarin.Android incluem: SQLite-NET, NewtonSoft.JSON e SharpZipLib.

Objective-C Vinculações + Projetos de Vinculação

O Xamarin fornece uma ferramenta chamada btouch que ajuda a criar associações que permitem Objective-C que bibliotecas sejam usadas em projetos Xamarin.iOS. Consulte a documentação de Tipos de Vinculação Objective-C para obter detalhes sobre como isso é feito.

Exemplos de bibliotecas que podem ser usadas no Xamarin.iOS incluem: digitalização de código de Objective-C barras RedLaser, Google Analytics e integração PayPal. As associações Xamarin.iOS de código aberto estão disponíveis no GitHub.

.jar Vinculações + Projetos de Vinculação

O Xamarin suporta o uso de bibliotecas Java existentes no Xamarin.Android. Consulte a documentação Vinculando uma biblioteca Java para obter detalhes sobre como usar um arquivo . Arquivo JAR do Xamarin.Android.

As ligações Xamarin.Android de código aberto estão disponíveis no GitHub.

C via PInvoke

A tecnologia "Platform Invoke" (P/Invoke) permite que o código gerenciado (C#) chame métodos em bibliotecas nativas, bem como suporte para bibliotecas nativas chamarem de volta para o código gerenciado.

Por exemplo, a biblioteca SQLite-NET usa instruções como esta:

[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);

Isso se vincula à implementação nativa da linguagem C SQLite no iOS e Android. Os desenvolvedores familiarizados com uma API C existente podem construir um conjunto de classes C# para mapear para a API nativa e utilizar o código da plataforma existente. Há documentação para vincular bibliotecas nativas no Xamarin.iOS, princípios semelhantes se aplicam ao Xamarin.Android.

C++ via CppSharp

Miguel explica CXXI (agora chamado CppSharp) em seu blog. Uma alternativa para vincular a uma biblioteca C++ diretamente é criar um wrapper C e vincular a isso via P/Invoke.