Busca avançada

Xamarin: O que é? Para que serve? Como funciona?

quinta-feira, 21 de junho de 2018 por Eduardo Spaki
Xamarin: O que é? Para que serve? Como funciona?

Muito se ouve sobre desenvolvimento de aplicações móveis, para smartphones. Desde os famosos desenvolvedores nativos até as aplicações híbridas. Ferramentas, siglas e nomes não faltam quando se fala em criar um software para esses “espertofones”.

Dentre nomes como Phonegap, Ionic, Android Studio, Swift… surge um tal de Xamarin. Mas o que é isso? Uma linguagem? Uma ferramenta?

Pois bem, vamos esclarecer algumas questões sobre esse tal de Xamarin.


O que é?


Antes de mais nada, Xamarin foi uma empresa, que desenvolvia uma série de ferramentas voltadas para aplicações móveis (o famoso “app”).

Dentre elas, podemos citar:
•    Xamarin Test Cloud (https://www.xamarin.com/test-cloud): Vamos combinar que hoje em dia há uma infinidade de celulares, com todo tipo de tela, capacidade e poder de processamento. Garantir compatibilidade com vários aparelhos poderia implicar em ter diversos dispositivos. Segundo o site da ferramenta, é possível testar sua aplicação em uma nuvem com mais de 2000 diferentes dispositivos.
•    Xamarin Insights: Uma plataforma que ajuda a monitorar e controlar a telemetria da sua aplicação quando instalada em um aparelho. Disponibilizando assim mais informações sobre o comportamento do app e seus eventuais erros.

Mas não é só isso. Ela também disponibiliza uma suíte de produtos e tecnologias baseada em Mono (https://www.mono-project.com/). O mono é uma implementação multiplataforma e open source do .NET, criada de forma independente e pela comunidade. Com essa plataforma, é possível escrever código .NET e o Mono se encarregará de fazer as chamadas da API do sistema móvel.

E assim temos os Xamarin.iOS, Xamarin.Android e Xamarin.Forms. Segundo a fabricante, é possível compartilhar 75% do código escrito entre as plataformas. Isso significa que toda a parte das regras de negócio da sua aplicação, logging e afins podem ser reaproveitados quando você compilar para diferentes plataforma (iOS e Android). Ficando na pendência, customizações a nível de Interface de Usuário (UI) e User Experience (UX).

Em junho de 2016 a Microsoft comprou a Xamarin. Então podemos entender o Xamarin como uma suíte de produtos e Tecnologias mobile baseada em Mono, em outras palavras, uma plataforma para desenvolvimento mobile.

Por que adotar?


Há dois grandes (e principais) players no mercado de Sistemas Operacionais (SO) para dispositivos móveis: Android e iOS.

Então, se o desejo é que um produto atinja o maior número possível de usuários, tenho que ter dois apps, um para cada SO. Isso implica em manter dois projetos, quando não duas equipes, com ferramentas e linguagens distintas.

Será que eu preciso mesmo ter essas duas tribos dentro da minha empresa?

Seria possível escrever um único app para as duas plataformas, com uma única ferramenta e código? Sim, e o Xamarin visa isso. As vantagens são notáveis, equipe menor, custo menor, além do prazo menor (visto que só um app seria desenvolvido).

Além do que, a plataforma .NET tem uma curva de aprendizado bem baixa, podendo ser adotada a linguagem vastamente conhecida, o C#. A documentação do C# e do .NET é muito vasta!

E sim, é possível utilizar os grandes trunfos, como Linq, Async, Nuget etc. As comunidades estão muito bem consolidadas e são experientes.

Quanto custa?


Para desenvolver usando Xamarin é necessário ter o Visual Studio. E ela está dentro de todos, inclusive do Community que é gratuito para desenvolvedores individuais ou estudantes!

Mas é Nativo?


Essa pergunta é batata! Sempre vai acontecer.

Sim, Xamarin é nativo!

Vamos entender como funciona todo o processo? Primeiro, se não é nativo, o que seria?

Há um conceito conhecido como aplicações híbridas. Estas, de alguma forma emulam uma UI e entregam aplicações para iOS e Android.

O problema disso é que, os aparelhos e SOs não são iguais, então para emular, essas ferramentas implementam somente o que há de comum nas plataforma. Limitando o acesso a funcionalidades de sensores ou características específicas do aparelho ou SO.

Muitas das aplicações híbridas lançam mão de um recurso que encapsulam uma aplicação web (HTML + CSS + Javascript) dentro de um componente webview. A plataforma Apache Cordova usa esse conceito, fundamentando frameworks como Ionic e Phonegap.

Isso é ruim? Não, pois nem toda aplicação precisará de acesso a tantos recursos assim. Pense em um app que mostra o menu de um restaurante e você pode fazer o pedido para sua mesa. Não precisei de acesso à câmera ou acelerômetro, por exemplo. Mesmo assim  a aplicação funciona 100% segundo sua necessidade.

Mas as vezes, você não precisa de acesso à recursos específicos, porém precisa de desempenho, e essa emulação pode ser um empecilho!

Já o Xamarin faz acesso direto a API do próprio SO (bind), quando compilada para uma determinada plataforma. E o Xamarin cobre 100% da API oficialmente lançada das plataformas. Ou seja, se o SO tiver um bug, sua aplicação poderá sofrer com ele, não por conta do Xamarin, mas sim por culpa do próprio SO.

A interface é a nativa da plataforma (não emulada), diferente de plataformas como o Firemonkey, por exemplo. Tanto é que, quando você compila a mesma aplicação nas diferentes plataformas, o look and feel reflete a plataforma. É possível reescrever um código Swift em C# com Xamarin e eles funcionaram iguais, inclusive em desempenho.

75% de reaproveitamento, e aqueles 25% restantes?


Como já citado, as plataformas além de serem diferentes, hardwares e sensores variam, além é claro, da experiência de usuário (UX).

Por isso que, sua regras e algoritmos básicos podem ser compartilhados, mas as interações com o usuário e/ou sensores específicos, acabam sendo muitas vezes customizadas. Ainda mais quando se leva em consideração que as plataformas têm experiências de usuário diferentes.

Mesmo em casos onde é necessário essa especialização, temos a vantagem de usar uma única linguagem de programação.

Xamarin.iOS

Essa é a plataforma que você pode desenvolver especificamente para os aparelhos da Apple. Terá todos os controles, look and feel disponíveis na plataforma. Além das permissões necessárias para rodar sua aplicação e acesso ao sistema de arquivos da plataforma.

Perceba que mesmo em um ambiente .NET, é necessário ter um bom conhecimento da própria plataforma, para tirar o máximo de proveito dela.

Xamarin.Android


O mesmo acontece para o Android. Há vários controles e interações específicas deste SO nesta plataforma.

Também demanda alto conhecimento de Android, mesmo desenvolvendo com .NET.

Xamarin.Forms


Aqui temos o grande trunfo do Xamarin. Com essa plataforma você consegue atingir 100% de reaproveitamento de código!

Claro, lembra aquela história de que “uma plataforma de desenvolvimento, para atender os principais SOs do mercado, deve conter somente funcionalidades comuns entre elas”?

Isso continua sendo verdade, mas com um grande diferencial. o Xamarin.Forms não emula UI. Ele utiliza os próprios componentes do SO.

E fica bem curioso o resultado, pois a mesma tela, terá as cores, a aparência e experiência inerente ao SO para qual foi compilada.

[https://mobileprogrammerblog.files.wordpress.com/2016/05/formspreviewermain.png]

E para construir as telas é possível tanto construir com o C#, por exemplo, como com o XAML, que nada mais é do que uma linguagem de definição de UI baseada em XML… lembrando bastante o HTML.

Como testar?


Para testar as aplicações é possível utilizar VMs com os SOs, ou plugar um aparelho (isso direto de dentro do Visual Studio). Dependendo da versão do Visual Studio e Xamarin, para emular iOS apps, só será possível em máquinas com MacOS (ou com um remote server). Mesmo dentro das VMs, ou plugando um aparelho, é perfeitamente possível aproveitar todos os recursos do ambiente de desenvolvimento (Visual Studio), como: debug, telemetria etc.

Como distribuir?


Umas vez que você compilou em release, você distribuirá como um aplicativo nativo dentro da app store da plataforma (no caso do Android, você também poderá distribuir o APK para quem quiser). Isso quer dizer que você deverá ser assinante das plataformas de desenvolvimento (Apple e Google).

Só da para desenvolver com Xamarin no Windows?


Não, é possível usar o Visual Studio for Mac. O que nesse caso, facilita a emulação de iOS apps.

“Mas é tudo um mar de flores!”


Não é bem assim. Particularmente achei que juntar tudo pode dar algumas dores de cabeça de vez em quando.

Lembre-se, estamos falando de uma plataforma .NET, que irá usar o Mono, para compilar nativo para um SO, que irá publicar em uma VM para que seja possível realizar debug em tempo real, em uma determinada versão do SO e com características de hardware emulados de uma determinada maneira. São muitas variáveis!

Além disso, há toda a problemática da fragmentação de SOs version, telas, hardware etc… felizmente, o Xamarin Cloud vem como a solução de encontro :)

“Queria ver um exemplo”


Recentemente publiquei um exemplo bem simples de uma aplicação Xamarin.Forms no meu github: https://github.com/spaki/Xamarin.ConsumingAPI

Nesse exemplo eu consumo uma API pública que provê informações sobre Star Wars: https://swapi.co

Então fiz um app para procurar as naves dos filmes… é bem simples, mas fica registrado o exemplo!


Conclusão


Há pouco tempo um colega desenvolvedor me questionou se seria profissional e maduro desenvolver um app com Ionic. Apenas para lembrar, o Ionic é baseado no Apache Cordova, então gera uma aplicação híbrida desenvolvida com HTML, CSS e Javascript.

Respondi que o Ionic seria muito bom para uma aplicação simples, com inputs de formulários!

Porém, o Xamarin provou ir muito além do simples! Ele engloba um conjunto de plataformas e ferramentas, para desenvolver apps nativas, com look and feel do SO, desempenho garantido, testar o app na cloud em diferentes aparelhos, colher a telemetria, tudo isso usando as facilidades do C#/.NET/Visual Studio.

Então não perca tempo e publique agora mesmo sua app nativa nas duas lojas de aplicativos construindo apenas com Xamarin, necessitando saber apenas uma linguagem e uma ferramenta!

Ainda não se sente pronto? Pois fique sabendo que o Curitba TI Academy tem o curso Desenvolvimento Mobile com Xamarin. Um curso introdutório para essa plataforma, acessível e que te capacitará para o mercado de apps. Não perca tempo e garanta já sua vaga! Faça agora mesmo sua pré-inscrição!!!

Compartilhar

Eduardo Spaki
Autor
Eduardo Spaki

Arquiteto de Soluções da Code 21. Atua há 14 anos com desenvolvimento de tecnologias, tendo participado de projetos em diversos países. É especialista em softwares para a Internet e possui MBA em Gerência de Projetos. Já publicou livro e artigos na área de tecnologia e vem palestrando sobre carreira profissional, inovação e TI. Se deseja viabilizar seu software web ou mobile, migrar para nuvem ou implantar ferramentas de TI, entre em contato com ele pela Code 21.