Connect(); 2016

Volume 31 - Número 12

Connect(); Mobile DevOps - Explorando o Visual Studio Mobile Center

Por Thomas Dohmke; 2016

Os dispositivos móveis estão agora no centro do ecossistema de tecnologia. Muitas pessoas sentem que não conseguem viver sem seus respectivos telefones, tablets e laptops e utilizam-nos para organizar informações tanto da vida pessoal como da vida profissional. O mundo dos negócios está reagindo a isso e, hoje em dia, todas as empresas estão inclinadas a se transformar em um negócio móvel. Para ter êxito e progredir, as empresas deverão suportar não apenas um aplicativo móvel, mas uma estratégia móvel com vários aplicativos. Isso passou a ser chamado de appficação dos negócios modernos - a proliferação de aplicativos de destino altamente otimizados projetados para um grupo específico de usuários ou para tarefas específicas. Em um mundo appficado, as equipes de desenvolvimento têm que fornecer mais aplicativos com mais valor aos clientes, enquanto as plataformas móveis que executam esses aplicativos estão sempre evoluindo e o número de dispositivos está em constante crescimento. Os aplicativos maiores estão instalados em mais de 1 bilhão de dispositivos, com milhares de configurações de dispositivo baseadas em critérios como tamanho da tela, idioma, local ou provedor de rede.

Para enfrentar esses desafios, a Microsoft oferece uma solução de ponta a ponta baseada em três pilares: O Visual Studio e o Xamarin permitem-lhe criar aplicativos móveis e de área de trabalho para todas as plataformas principais. O Microsoft Azure fornece serviços de nuvem avançados e flexíveis que ajudam a iniciar ou estender ativos de infraestrutura existentes e gerenciar dados entre o servidor e as experiências de cliente. Por fim, o processo do Mobile DevOps ajuda-o a gerenciar o ciclo de vida do aplicativo e permite-lhe automatizar a integração, o teste, o fornecimento e o monitoramento de seu aplicativo. A versão atual desta pilha do Mobile DevOps consiste em várias ferramentas integradas mas diferentes, como o Visual Studio Team Services (VSTS), Xamarin Test Cloud e o Hockey­App. A Microsoft aprendeu bastante ao oferecer esses produtos nos últimos anos, incluindo sobre como os desenvolvedores podem adotar práticas do DevOps Móvel de forma mais rápida e com menos fricção.

Neste artigo, estou feliz em anunciar a visualização pública de nosso produto, combinando todos os recursos em uma única plataforma: Visual Studio Mobile Center.

O ciclo de vida do aplicativo móvel

As práticas do DevOps podem cobrir todo o processo de desenvolvimento, mas elas não são um compromisso tudo ou nada. Semelhante a um conjunto de ferramentas de linha de comando, cada prática pode ser usada em separado, mas você obtém valor adicional ao combinar várias práticas. É exatamente assim que o Mobile Center foi projetado. Ele começa com uma ótima experiência de integração para desenvolvedores, incluindo um design de API que permite usar o Mobile Center totalmente através da API REST ou da interface de linha de comando (CLI). Cada recurso resolve um problema específico e é utilizável pro si próprio.

Com o Build, você pode levar seu código-fonte para qualquer repositório Git e criar um pacote de aplicativos instalável automaticamente com cada confirmação ou envio por push. E o melhor de tudo: você não precisa provisionar os agentes ou computadores externos que executam o macOS para compilar seus aplicativos iOS. O Mobile Center cuida disso e compila seu aplicativo Android e iOS diretamente no código-fonte, sem você precisar efetuar uma configuração manual.

Após a conclusão do processo de compilação, execute seus testes em dispositivos reais. O Test Cloud oferece mais de 400 configurações exclusivas do dispositivo para validar o comportamento de seu aplicativo. Os testes podem ser escritos em C# (UITest), Ruby (Calabash) ou Java (Appium), e são executados automaticamente após a conclusão da compilação.

Quando todos os testes estão verdes, significa que seu aplicativo precisará passar pelas mãos dos testadores - que é exatamente o que o recurso Distribuir oferece. Insira um conjunto de emails - chamado de Grupo de Distribuição - e seus usuários podem instalar o aplicativo diretamente em seus telefones, pois eles vão baixar um aplicativo na loja de aplicativos. A Compilação do Mobile Center, Teste e a Distribuição trabalham em conjunto diretamente, para que cada uma de suas confirmações de código obtenham o nível máximo de validação. E nenhum desses recursos solicita modificação de seu código.

A próxima etapa é adicionar monitoramento ao aplicativo. Seja um teste automatizado, teste manual, demonstração para um cliente ou o lançamento de uma nova versão na App Store, a coleção de uso e os dados de diagnóstico são vitais para o êxito de seu aplicativo. Ao adicionar o SDK do Mobile Center, você pode coletar Falhas e aproveitar o Analytics para avaliar os problemas de qualidade, saber como e onde os clientes estão usando seu aplicativo e, por último, melhorar as taxas e as revisões respondendo às solicitações.

O SDK também habilita dois outros recursos: Identidade e Tabelas. A Identidade é a maneira mais fácil para autenticar seus usuários de aplicativo com suas respectivas contas do Google, Facebook, Twitter ou Microsoft. As Tabelas permitem compilar um armazenamento em nuvem para exibição, adição ou modificação de dados de aplicativo, mesmo quando não há conexão de rede.

A Figura 1 mostra como esses recursos habilitam o ciclo de vida do aplicativo móvel.

O ciclo de vida do aplicativo móvel com o Visual Studio Mobile Center
Figura 1 - O ciclo de vida do aplicativo móvel com o Visual Studio Mobile Center

Introdução

Inscrever-se no Mobile Center é muito fácil. Se você já possui um conta do HockeyApp, seu email existente e sua senha continuarão funcionando e em sincronização em ambos os sistemas. Caso contrário, você pode criar uma nova conta através do formulário de registro. Mas agora quero lhe mostrar a maneira mais rápida para começar: Conectar com o GitHub. Se você utiliza muito o GitHub como eu, então não é necessário inserir a senha do GitHub: você verá imediatamente a página de autenticação que é exibida na Figura 2. Basta aprovar o acesso e você entrará no painel do Mobile Center com uma conta totalmente habilitada. Não é necessário confirmação por email, cartão de crédito nem etapas de configuração.

Inscrever-se no Mobile Center com o GitHub
Figura 2 - Inscrever-se no Mobile Center com o GitHub

Após conectar sua conta ao GitHub, você fica a apenas algumas etapas de sua primeira compilação. Para criar seu aplicativo, basta inserir o nome e, em seguida, escolher seu repositório Git e o desvio no menu do Build conforme exibido na Figura 3. O Mobile Center irá detectar automaticamente seu tipo de projeto, então você não precisa adicionar ou configurar manualmente as etapas da compilação. Nos bastidores, o pipeline de compilação provisiona uma máquina virtual para compilar o aplicativo, executa todos os testes de unidade e assina o pacote do aplicativo para distribuição.

Selecionar um repositório GitHub para o Build
Figura 3 - Selecionar um repositório GitHub para o Build

Ao concluir o processo de compilação, você pode baixar o arquivo do pacote de aplicativo para instalação local, executar testes automatizados em dispositivos reais usando o Mobile Center Test ou você pode continuar com o recurso de Distribuição para remeter o aplicativo para seus testadores. Cada membro do seu grupo de distribuição receberá uma notificação por email para instalar o aplicativo. Abra o email no telefone e instale o aplicativo no navegador.

Adicionar o SDK

Para Falhas e Análise, é necessário adicionar o SDK do Mobile Center ao seu projeto. O SDK é projetado com uma arquitetura modular que lhe permite integrar apenas esses recursos que você deseja em seu aplicativo. Vamos começar com um exemplo para um aplicativo iOS. Primeiro, adicione as instruções de importação a seguir à parte superior do arquivo AppDelegate.swift:

import MobileCenter
import MobileCenterCrashes
import MobileCenterAnalytics

O MobileCenterCore é necessário para todos os recursos, enquanto os outros dois podem ser omitidos caso você não queira os recursos de Falha ou Análise. A seguir, inicie o SDK no método didFinishLaunchingWithOptions:

MSMobileCenter.start("{Your App Secret}", withServics:[MSAnalytics.self,
  MSCrashes.self])

O Segredo do Aplicativo é um GUID que pode ser levado da página de gerenciamento do aplicativo no Mobile Center. Em vez de digitar essas quatro linhas, você pode simplesmente copiá-las da página de visão geral do aplicativo, conforme exibido na Figura 4.

Introdução ao SDK do Mobile Center
Figura 4 - Introdução ao SDK do Mobile Center

A configuração parece muito semelhante no Android:

import com.microsoft.azure.mobile.MobileCenter;
import com.microsoft.azure.mobile.crashes.Crashes;
import com.microsoft.azure.mobile.analytics.Analytics;
// ...
MobileCenter.start(getApplication(), "{Your App Secret}", Analytics.class,
  Crashes.class);

Ao habilitar o módulo Falhas, o SDK começará automaticamente a capturar exceções sem tratamento em iOS e Android, assim como falhas de baixo nível no iOS. Para gerar uma falha de teste, adicione a linha a seguir a um manipulador de botão no iOS:

MSCrashes.generateTestCrash()

A mesma chamada está disponível para Android:

Crashes.generateTestCrash();

Após uma falha, o SDK armazena o arquivo de log no armazenamento local do dispositivo. Quando o usuário abre o aplicativo novamente, todos os logs de falha pendente serão postados e processados no back-end do Mobile Center. Se você criar seu aplicativo iOS com o recurso de Compilação do Mobile Center, o rastreamento de pilha no log de falha será automaticamente manipulado, o que significa que todos os endereços de memória são convertidos em nomes de classe e método, nomes de arquivos e números de linhas. Se você utilizou um servidor de compilação diferente ou criou seu aplicativo iOS em seu Mac local, verá primeiro os novos logs de falha no menu Entrada. Carregue os arquivos dSYM correspondentes para começar o processo de manipulação.

Ao habilitar o módulo de Análise, o SDK irá automaticamente rastrear as sessões, as propriedades do dispositivo como a versão do SO, modelo ou fabricante, e as propriedades do usuário como idioma ou região, e o Mobile Center irá mostrar a página Audiência (confira a Figura 5).

Análise Móvel na Página Audiência
Figura 5 - Análise Móvel na Página Audiência

Rastreie seus eventos e propriedades personalizados com a linha a seguir no iOS:

MSAnalytics.trackEvent("Video clicked",
  withProperties: ["FileName" : "RickRoll.mp4"])

No Android, as propriedades são especificadas em um HashMap:

Map<String,String>properties=new HashMap<String,String>();
properties.put("FileName", "RickRoll.mp4");
Analytics.trackEvent("Video clicked", properties);

Toda a telemetria, falhas, eventos e propriedades são coletados de forma anônima e armazenados de forma segura na Nuvem do Azure, oferecendo-lhe controle completo sobre os dados que seu aplicativo coleta. Para habilitar um nível de confiança ainda maior, o SDK do Mobile Center é totalmente de software livre e está disponível em github.com/Microsoft para iOS (/MobileCenter-SDK-iOS), Android (/MobileCenter-SDK-Android) e Xamarin (/MobileCenter-SDK-Xamarin). Recomendo que você analise seu código-fonte e bugs de arquivos e contribua com as solicitações pull.

Back-End incluído

A maioria dos aplicativos móveis modernos utiliza um ou mais serviços online para habilitar o controle total, por exemplo para sincronizar uma lista de tarefas entre vários dispositivos, para compartilhar dados entre vários aplicativos de linha de negócios ou para restringir recursos a usuários autenticados que possuem uma assinatura premium. O Mobile Center oferece suporte a esses cenários integrando diretamente com o Serviço de Aplicativo do Azure através de recursos de Tabelas e Identidade.

A primeira vez que você clicar no item de menu, é necessário conectar sua assinatura do Azure. Se você ainda não tiver uma, inscreva-se no Azure gratuitamente em bit.ly/1MoL3Rb. Após vincular sua conta do Azure ao Mobile Center, crie tabelas de dados diretamente na página de visão geral Tabelas.

Como exemplo, eu criei uma tabela com o nome “TodoItem” para um aplicativo de tarefa pendente. Para acessar os dados na tabela a partir de um aplicativo iOS, é necessário inicializar o SDK da seguinte maneira:

let client = MSClient(applicationURLString: "{Your App URL}")
let table = client.tableWithName("TodoItem")

Assim como acontece com o Segredo do Aplicativo, a URL do Aplicativo deve ser substituída pela URL de seu aplicativo na página de configuração no Mobile Center. Em seguida posso consultar o objeto MSTable para todos os itens disponíveis:

table.readWithCompletion { (result, error) in
  if let err = error {
    print("ERROR ", err)
  } else if let items = result?.items {
    for item in items {
      print("Todo Item: ", item["text"])
    }
  }
}

Para filtrar o resultado, posso usar um objeto NSPredicate e o método readWithPredicate, por exemplo, para obter somente itens de tarefas pendentes incompletos:

let predicate = NSPredicate(format: "complete == NO")
table.readWithPredicate(predicate) { (result, error) in
  // Handle item
}

Um novo item é inserido através de um objeto NSDictionary e do método de inserção:

let newItem = ["text": "Write MSDN article", "complete": false]
table.insert(newItem) { (result, error) in
  if let err = error {
    print("ERROR ", err)
  } else if let item = result {
    print("New item ID: ", item["id"])
  }
}

O back-end móvel do Serviço de Aplicativo do Azure gera automaticamente novas colunas com base no dicionário, incluindo uma ID exclusiva. Também posso fornecer minha própria ID como um par chave-valor no dicionário. Semelhante à inserção, o método atualizar e excluir permite-me modificar dados, por exemplo, quando um item de tarefa pendente é concluído, e excluí-los. E, claro, tudo isso funciona não só para aplicativos iOS, mas para todas as plataformas com suporte no Mobile Center.

Com o código exibido até agora, todos os usuários do aplicativo acessariam a mesma lista de itens de tarefa pendente ou, de forma mais geral, os mesmos dados em todos os dispositivos. Isso não é o ideal; geralmente, cada usuário quer gerenciar sua própria lista de tarefas pendentes. Posso fazer isso adicionando o recurso Identidade ao meu aplicativo. O Mobile Center oferece suporte a cinco provedores de identidade prontos para uso: Azure Active Directory, Facebook, Google, Conta da Microsoft e Twitter. Um aplicativo pode usar qualquer quantidade desses provedores de identidade para permitir que os usuários entrem com sua conta preferida. Há duas opções para integrar o recurso:

Com um SDK do provedor (o SDK do Facebook, por exemplo), os usuários podem entrar em uma experiência que se integra fortemente com o SO onde o aplicativo está sendo executado. Como parte do processo de entrada, o aplicativo obtém um token de provedor que precisa ser enviado de volta para o Serviço de Aplicativo do Azure, que depois valida o token e o substitui por um novo token do Serviço de Aplicativo. O aplicativo também pode armazenar o token do provedor para seu próprio uso; para acessar a API do Graph do Facebook, por exemplo.

Sem um SDK do provedor, use o método a seguir no SDK do Mobile Center:

client.loginWithProvider("google", controller: self, animated: true) { (user, error) in
  // Load data
}

Isso abrirá uma visualização na Web para o provedor e, assim, o usuário pode entrar. O token do provedor é processado diretamente do lado do servidor e o aplicativo nunca o recebe. No final do fluxo, o SDK do Mobile Center possui um token do Serviço de Aplicativo, que é anexado automaticamente em todas as solicitações de back-end e garante que os dados do aplicativo só são acessíveis pelo usuário autenticado.

Olhando para o futuro

Todos os recursos descritos neste artigo estão disponíveis agora como visualização pública para desenvolvedores de iOS e Android. Inscreva-se gratuitamente em aka.ms/mobilecenter. Nos próximos meses, a Microsoft irá fornecer continuamente mais recursos e valor, incluindo suporte para desenvolvedores Windows, integração com VSTS e mais serviços de back-end, como sincronização de dados offline. Nosso objetivo é que o Mobile Center e torne sua loja única para o ciclo de vida de seus aplicativos móveis e de área de trabalho: compilação, teste, distribuição, monitoramento e conexão à nuvem. Minha equipe e eu estamos muito entusiasmados com a próxima geração de DevOps móveis da Microsoft e esperamos que você se junte a nós nesse percurso.


Thomas Dohmke é um co-fundador do HockeyApp, que foi adquirido pela Microsoft no final de 2014. Dohmke é o gerente do programa do grupo do Visual Studio Mobile Center e é o responsável por controlar a visão do produto e gerenciar a equipe dos gerentes de programa para cada recurso. Fale com ele via email em thdohmke@microsoft.com ou no Twittter: @ashtom.