Connect(); 2016

Volumen 31, número 12

Connect(); - Mobile DevOps: exploración de Visual Studio Mobile Center

Por Thomas Dohmke; 2016

Actualmente, los dispositivos móviles se encuentran en el centro del ecosistema tecnológico. Muchas personas consideran que no pueden vivir sin sus teléfonos, tabletas y portátiles, y los usan para organizar la información de su vida personal y profesional. El mundo empresarial está reaccionando a este hecho y, actualmente, todas las empresas están decididas a transformarse en empresas móviles. Para tener éxito y prosperar, las empresas no solo deben admitir una aplicación móvil, sino también una estrategia móvil que abarque varias aplicaciones. Esto se conoce como aplificación de la empresa moderna: la proliferación de aplicaciones orientadas y altamente optimizadas diseñadas para un grupo concreto de usuarios o para tareas específicas. En un mundo aplificado, los equipos de desarrollo deben ofrecer más aplicaciones con más valor para los clientes, mientras que las plataformas móviles que ejecutan estas aplicaciones evolucionan continuamente y la cantidad de dispositivos no para de crecer. Las principales aplicaciones están instaladas en más de 1.000 millones de dispositivos, con miles de configuraciones de dispositivo basadas en criterios como el tamaño de pantalla, el idioma, la configuración regional o el proveedor de red.

Para hacer frente a estos retos, Microsoft ofrece una solución integral basada en tres pilares: Visual Studio y Xamarin permiten crear aplicaciones móviles y de escritorio para las principales plataformas. Microsoft Azure proporciona servicios en la nube eficaces y flexibles que facilitan la creación o ampliación de los activos de infraestructura existentes, así como la administración de datos entre el servidor y las experiencias de cliente. Finalmente, el proceso de Mobile DevOps le ayuda a administrar el ciclo de vida de la aplicación y le permite automatizar la integración, las pruebas, la entrega y la supervisión de la aplicación. La versión actual de esta pila de Mobile DevOps está formada por varias herramientas integradas, pero diversas a la vez, como Visual Studio Team Services (VSTS), Xamarin Test Cloud y Hockey­App. Microsoft ha aprendido mucho de la oferta de estos productos durante los últimos años; por ejemplo, cómo pueden los desarrolladores adoptar prácticas de Mobile DevOps más rápidamente y con menos desacuerdos.

En este artículo, me complace anunciar la versión preliminar pública de nuestro producto, que combina todas las características en una única plataforma: Visual Studio Mobile Center.

Ciclo de vida de las aplicaciones móviles

Las prácticas de DevOps pueden abarcar todo el proceso de desarrollo, pero no son una confirmación de todo o nada. De forma parecida a lo que sucede con un conjunto de herramientas de línea de comandos, cada práctica se puede usar independientemente, pero, al combinar varias prácticas, se obtiene un valor añadido. Así es, exactamente, como se diseñó Mobile Center. Todo empieza con una fantástica experiencia de integración para desarrolladores, incluido el diseño centrado en la API, que le permite usar Mobile Center completamente a través de su API de REST o interfaz de línea de comandos (CLI). Cada característica soluciona un problema específico y se puede usar de forma independiente.

Con Build, puede insertar su código fuente en cualquier repositorio Git y crear un paquete de aplicación instalable automáticamente con cada confirmación o inserción. Lo mejor de todo es que no es necesario aprovisionar agentes ni máquinas externas que ejecuten MacOS para compilar sus aplicaciones para iOS. Mobile Center se ocupa de esto y compila la aplicación para iOS y Android directamente desde el código fuente, sin configuración manual por su parte.

Una vez finalizado el proceso de compilación, puede ejecutar sus pruebas en dispositivos reales. Test Cloud ofrece más de 400 configuraciones de dispositivo únicas para validar el comportamiento de la aplicación. Las pruebas se pueden escribir en C# (UITest), Ruby (Calabash) o Java (Appium), y se ejecutan automáticamente después de una compilación correcta.

Cuando todas las pruebas se muestran en verde, la aplicación debe pasar a manos de evaluadores y esto es exactamente lo que ofrece la característica Distribuir. Especifique un conjunto de mensajes de correo electrónico (denominados grupos de distribución) y los usuarios podrán instalar la aplicación directamente en sus teléfonos, del mismo modo que descargarían una aplicación de la Tienda de aplicaciones. Las características Compilar, Probar y Distribuir de Mobile Center funcionan juntas a la perfección para que todas las confirmaciones de código reciban el máximo nivel de validación. Además, ninguna de estas características requiere la modificación del código.

El siguiente paso consiste en agregar la supervisión a la aplicación. Tanto si se trata de pruebas automatizadas, pruebas manuales, una demostración para un cliente o el lanzamiento de una versión nueva en la Tienda de aplicaciones, la recopilación de datos de uso y diagnóstico es fundamental para el éxito de la aplicación. Al agregar el SDK de Mobile Center, puede recopilar bloqueos y aprovechar los análisis para evaluar los problemas de calidad, obtener información sobre cómo y dónde usan los usuarios la aplicación y, finalmente, mejorar la calificación y las opiniones al responder a sus solicitudes.

El SDK también permite otras dos características: Identidad y Tablas. Identidad es la forma más rápida de autenticar a los usuarios de la aplicación con su cuenta de Google, Facebook, Twitter o Microsoft. Tablas permite compilar una tienda en la nube para ver, agregar o modificar datos de aplicaciones, incluso sin conexión a la red.

En la Figura 1 se muestra cómo permiten estas características del ciclo de vida de la aplicación móvil.

Ciclo de vida de aplicación móvil con Visual Studio Mobile Center
Figura 1 Ciclo de vida de aplicación móvil con Visual Studio Mobile Center

Introducción

Suscribirse a Mobile Center es muy fácil. Si ya tiene una cuenta de HockeyApp, el correo electrónico y la contraseña existentes seguirán funcionando y se seguirán sincronizando entre ambos sistemas. De lo contrario, puede crear una cuenta nueva a través del formulario de registro, pero en lugar de eso, para empezar, me gustaría enseñarle el flujo más rápido: la conexión con GitHub. Si usa GitHub tanto como yo, no tendrá que especificar la contraseña: verá inmediatamente la página de autenticación que se muestra en la Figura 2. Solo tiene que aprobar el acceso y accederá al panel de Mobile Center con una cuenta totalmente habilitada. No se necesita confirmación por correo electrónico, tarjeta de crédito ni ningún otro paso de configuración.

Suscribirse a Mobile Center con GitHub
Figura 2 Suscribirse a Mobile Center con GitHub

Una vez conectada la cuenta a GitHub, está a tan solo unos pasos de la primera compilación. Para crear la aplicación, escriba el nombre y, a continuación, elija el repositorio de Git y la rama en el menú Compilar como se muestra en la Figura 3. Mobile Center detectará automáticamente el tipo de proyecto para que no tenga que agregar o configurar pasos de compilación manualmente. En segundo plano, la canalización de compilación aprovisiona una máquina virtual para compilar la aplicación, ejecuta todas las pruebas unitarias y firma el paquete de la aplicación para su distribución.

Seleccionar un repositorio de GitHub para Compilar
Figura 3 Seleccionar un repositorio de GitHub para Compilar

Cuando el proceso de compilación finaliza, puede descargar el archivo del paquete de la aplicación para instalarlo en un entorno local, ejecutar pruebas automatizadas en dispositivos reales con la característica Probar de Mobile Center o seguir con la característica Distribuir para enviar la aplicación a los evaluadores. Cada miembro del grupo de distribución recibirá una notificación por correo electrónico para instalar la aplicación. Solo tiene que abrir el correo electrónico en el teléfono e instalar la aplicación desde el explorador.

Agregar el SDK

Para las características Bloqueos y Análisis, debe agregar el SDK de Mobile Center al proyecto. El SDK se diseña con una arquitectura modular que le permite integrar solo las características que quiere en la aplicación. Empecemos con un ejemplo para una aplicación de iOS. En primer lugar, agregue las siguientes instrucciones de importación al principio del archivo AppDelegate.swift:

import MobileCenter
import MobileCenterCrashes
import MobileCenterAnalytics

MobileCenterCore se necesita para todas las características, mientras que las otras dos se pueden omitir si no quiere las características Bloqueos o Análisis. A continuación, inicie el SDK en el método didFinishLaunchingWithOptions:

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

El secreto de la aplicación es un GUID que se puede obtener de la página de administración de la aplicación de Mobile Center. En lugar de escribir estas cuatro líneas, puede copiarlas directamente de la página de información general de la aplicación, como se muestra en la Figura 4.

Introducción al SDK de Mobile Center
Figura 4 Introducción al SDK de Mobile Center

La configuración es muy similar en 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);

Al habilitar el módulo Bloqueos, el SDK empezará a capturar automáticamente las excepciones no controladas en iOS y Android, así como los bloqueos de bajo nivel de iOS. Para generar un bloqueo de prueba, puede agregar la línea siguiente a un controlador de botón en iOS:

MSCrashes.generateTestCrash()

La misma llamada está también disponible para Android:

Crashes.generateTestCrash();

Después de un bloqueo, el SDK almacena el archivo de registro en el almacenamiento local del dispositivo. Cuando el usuario vuelve a abrir la aplicación, todos los registros de bloqueo pendientes se publican en el back-end de Mobile Center y se procesan allí. Si compila su aplicación para iOS con la característica Compilar de Mobile Center, el seguimiento de la pila del registro de bloqueo se simbolizará automáticamente, lo que significa que todas las direcciones de memoria se convierten en nombres de clase y método, nombres de archivo y números de línea. Si ha usado un servidor de compilación distinto o compila la aplicación para iOS en un Mac local, verá los nuevos registros de bloqueo en el menú Entrantes en primer lugar. A continuación, puede cargar los archivos dSYM correspondientes para iniciar el proceso de simbolización.

Al habilitar el módulo Análisis, el SDK hará un seguimiento automático de las sesiones, las propiedades de dispositivo como la versión del SO, el modelo o el fabricante, y propiedades del usuario como idioma o religión. Mobile Center mostrará todo esto en la página Audiencia (consulte la Figura 5).

Análisis móvil en la página Audiencia
Figura 5 Análisis móvil en la página Audiencia

Puede hacer un seguimiento de sus propios eventos y propiedades personalizados con la línea siguiente en iOS:

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

En Android, las propiedades se explican en HashMap:

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

Toda la telemetría, bloqueos, eventos y propiedades se recopilan de forma anónima y se almacenan con seguridad en Azure Cloud, lo que le proporciona un control total sobre los datos que recopila la aplicación. Para habilitar un nivel de confianza aún mayor, el SDK de Mobile Center es de código abierto y está disponible en github.com/Microsoft para iOS (/MobileCenter-SDK-iOS), Android (/MobileCenter-SDK-Android) y Xamarin (/MobileCenter-SDK-Xamarin). Le animo a revisar su código fuente y corregir errores, así como a colaborar con solicitudes de incorporación de cambios.

Back-end incluido

Las aplicaciones móviles más modernas usan uno o más servicios en línea para habilitar todo su potencial; por ejemplo, para sincronizar una lista de tareas pendientes en varios dispositivos, para compartir datos en varias aplicaciones de línea de negocio o para restringir características a los usuarios autenticados que adquirieron una suscripción premium. Mobile Center admite estos escenarios. Para ello, se integra directamente con Azure App Service a través de las características Tablas e Identidad.

La primera vez que hace clic en un elemento de menú, debe conectarse a la suscripción a Azure. Si aún no tiene ninguna, puede registrarse en Azure gratuitamente desde bit.ly/1MoL3Rb. Una vez vinculada la cuenta de Azure a Mobile Center, puede crear tablas de datos directamente desde la página de información general Tablas.

Como ejemplo, creo una tabla con el nombre "TodoItem" para una aplicación de tareas pendientes. Para acceder a los datos de la tabla desde una aplicación para iOS, necesito inicializar el SDK como se indica a continuación:

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

Del mismo modo que con el secreto de la aplicación, la URL de la aplicación se debe reemplazar con la URL de la aplicación de la página de configuración de Mobile Center. A continuación, puedo consultar todos los elementos disponibles en el objeto MSTable:

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 el resultado, puedo usar el objeto NSPredicate y el método readWithPredicate, por ejemplo, para obtener solo las tareas pendientes incompletas:

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

Para insertar un elemento nuevo, se usa un objeto NSDictionary y el método insert:

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"])
  }
}

El back-end móvil de Azure App Service genera automáticamente columnas nuevas basadas en el diccionario, incluido un id. único. También puedo proporcionar mi propio id. como par clave-valor en el diccionario. Del mismo modo que con insert, los métodos update y delete me permiten modificar datos (por ejemplo, al completar una tarea pendiente) y eliminarlos. Además, por supuesto, no solo funciona en aplicaciones para iOS, sino para todas las plataformas admitidas en Mobile Center.

Con el código mostrado hasta ahora, todos los usuarios de la aplicación accederían a la misma lista de tareas pendientes o, más generalmente, a los mismos datos desde todos los dispositivos. A menudo, esto no es deseable, ya que los usuarios suelen querer poder administrar su propia lista de tareas pendientes. Para conseguirlo, puedo agregar la característica Identidad a mi aplicación. Mobile Center admite cinco proveedores de identidades habilitados de manera predeterminada: Azure Active Directory, Facebook, Google, cuenta de Microsoft y Twitter. Una aplicación puede usar cualquier número de estos proveedores de identidades para que los usuarios inicien sesión con su cuenta preferida. Hay dos opciones para integrar esta característica:

Con un SDK de proveedor (el SDK de Facebook, por ejemplo), los usuarios pueden iniciar la sesión en una experiencia que se integra estrechamente con el SO en que se ejecuta la aplicación. Como parte del proceso de inicio de sesión, la aplicación obtiene un token de proveedor que se debe devolver a Azure App Service, que lo valida y lo reemplaza por un nuevo token de App Service. Esta aplicación también puede almacenar el token de proveedor para su propio uso; para acceder a la API Graph de Facebook, por ejemplo.

Sin SDK de proveedor, puede usar el método siguiente en el SDK de Mobile Center:

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

Se abrirá una vista web para el proveedor y el usuario podrá iniciar sesión. El token de proveedor se procesa directamente en el lado del servidor y la aplicación nunca lo recibe. Al final del flujo, el SDK de Mobile Center tiene un token de App Service, que se adjunta automáticamente a todas las solicitudes de back-end y garantiza que solo el usuario autenticado pueda acceder a los datos de la aplicación.

Mirando hacia el futuro

Todas las características que se describen en este artículo están disponibles como versión preliminar pública para desarrolladores de iOS y Android. Regístrese para obtenerla gratuitamente en aka.ms/mobilecenter. A lo largo de los próximos meses, Microsoft seguirá ofreciendo más características y valor, incluido el soporte para desarrolladores de Windows, la integración con VSTS y otros servicios de back-end, como la sincronización de datos sin conexión. Nuestro objetivo es que Mobile Center se convierta en su tienda integral para todas las fases del ciclo de vida de sus aplicaciones móviles y de escritorio: compilación, pruebas, distribución, supervisión y conexión a la nube. Mi equipo y yo estamos muy entusiasmados con la última generación de Mobile DevOps de Microsoft y esperamos que nos acompañe a lo largo de este viaje.


Thomas Dohmke es cofundador de HockeyApp, que Microsoft adquirió a finales de 2014. Dohmke es administrador de programas de grupo de Visual Studio Mobile Center y es responsable de orientar la visión del producto y de dirigir el equipo de administradores de programas de cada característica. Puede ponerse en contacto con él por correo electrónico (thdohmke@microsoft.com) o en Twittter: @ashtom.