• Dica de Xamarin.Forms - Obtendo a Versão do App

    18 de janeiro de 2018

A versão do seu app é uma informação importante de deixar a vista do seu usuário para ajudar a identificar problemas. Em tempos de web, a prática de se manter o versionamento do site praticamente tinha se perdido, já que o usuário esta sempre acessando a versão mais recente. Já no mundo dos apps podemos nos confrotar com a temida fragmentação.

Nas plataformas iOS e Android o versionamento é dividido em dois campos, que eu gosto de generalizar da seguinte forma:

  • Versão: é o rótulo da versão, modificado cada vez que uma atualização é lançada. Geralmente segue o modelo de versionamento semântico, com uma string dividia em 3 números separados por pontos: x.y.z.
  • Build: é o número da compilação, modificado sempre que uma versão do aplicativo é compilado. No Android esse número é um inteiro e deve sempre aumentar (o Console do Google Play não aceita APK’s cujo o número do Build seja menor que o da versão mais recente publicada.

O esquema de versionamento é muito particular de cada equipe de desenvolvimento, mas ter essas duas informações em mãos é bastante importante. Para facilitar a vida, bolei um jeito fácil de obter essa informação em apps Xamarin.Forms, usando o Dependency Service. Primeiro criei uma interface com métodos para obter essas duas informações:

No projeto do app Android, criamos uma classe implementando esses métodos:

A informação de versão no Android esta contida no arquivo AndroidManifest.xml, que é empacotado no arquivo .apk, e que fica disponível para nós através do PackageManager. Note que é necessário ter o contexto da aplicação para conseguir acessar PackageManager e para isso, usei o plugin CurrentActivity, que mantém um registro da Activity sendo apresentada atualmente na tela, fazendo uma pequena modificação no arquivo MainApplication.cs criado pelo pacote para incluir uma referência ao AppContext:

O processo é o mesmo para iOS, uma nova classe implementando a interface no projeto nativo:

No caso do iOS as informações que desejamos estão contidos nas chaves CFBundleVersion (que representa o número do Build) e CFBundleShortVersionString (que representa o nome da versão) do arquivo Info.plist, e que estão facilmente acessíveis na propriedade static MainBundle da classe NSBundle.

Por fim, para consumirmos esse serviço basta pegarmos uma instância dessa interface através do DependencyService, que irá instanciar a implementação adequada de acordo com o sistema operacional em que o app esta sendo executado:

Usando DependencyService a solução proposta funciona tanto em Shared Projects quanto em bibliotecas compartilhadas.

Não se esqueça de declarar o atributo DependencyAttribute no arquivo com a implementação das classes em cada plataforma. É através desse atributo que o Dependency Service identifica a classe que implementa a interface solicitada.

Caso você esteja programando para as plataformas nativas e quiser acessar as informações de versões, basta pegar o trecho de código equivalente a cada plataforma e adaptar as suas necessidades.

Conclusão

Nesse artigo proponho uma forma estruturada e unificada de acessar os metadados de versionamanto incluídos no pacote de um aplicativo Android ou iOS. Isso poderia facilmente ser adaptado em um plugin, mas por se tratar de uma interface e duas implementações extremamente simples, eu prefiro copiá-las diretamente em meus projetos do que incluir o custo de carregar mais uma biblioteca na inicialização do aplicativo apenas para acessar informações tão simples.

Referências

Share

Desenvolvedor de aplicações, administrador de bancos de dados e gerente de projetos em uma ampla variedade de aplicativos de negócios, utilizando modernas metodologias e ferramentas de ALM e processos Agile. Me considero um entusiasta em tecnologia, com mais de 10 anos de experiência nesse mercado. Atualmente voltado para o mercado mobile, me especializei no desenvolvimento de aplicações para as principais plataformas do mercado (Android, iOS e Windows Phone), e em organizar e ministrar de treinamentos para desenvolvedores.

Leia também

Dica de Xamarin.Forms – Personalizando por plataforma em XAML
Xamarin.Forms
10 de janeiro de 2018

Dica de Xamarin.Forms – Personalizando por plataforma em XAML

O Xamarin.Forms permite personalizar os componentes de acordo com a plataforma em que a interface esta sendo renderizada. Isso é feito usando a tag <OnPlatform x:TypeArguments=”[Tipo]”>, onde o atributo x:TypeArguments determina o tipo de dado que estamos personalizando. Por exemplo, é possível determinar o tamanho de um botão de acordo com a plataforma usando a […]

LEIA MAIS
Xamarin vs. Nativo
Xamarin
20 de outubro de 2016

Xamarin vs. Nativo

Atenção: essa á uma tradução livre do texto Xamarin vs. Native, de autoria de Colby Williams, publicado originalmente em seu blog em 27/09/2016. Eu passo bastante tempo conversando com pessoas sobre o desenvolvimento mobile. Muitas dessas conversas são sobre Xamarin e como ele se compara com o “nativo”, então imaginei que precisava tomar um tempo […]

LEIA MAIS
Xamarin.Forms 2.3.4 Lançado
Xamarin
12 de abril de 2017

Xamarin.Forms 2.3.4 Lançado

Depois de quase 4 meses de desenvolvimento, finalmente a Microsoft lançou a versão 2.3.4 do Xamarin.Forms. Parece bastante tempo para um “dot release”, mas trata-se de uma atualização bastante significativa, especialmente do ponto de vista de estabilidade. O que há de novo? De acordo com a documentação oficial, a atualização traz as seguintes novidades: Melhoria […]

LEIA MAIS

Comentários