Integración continua de aplicaciones Xamarin con Bitrise

XamarinIntroducción

La calidad en el software es algo innegociable. Un buen proceso en el desarrollo y gestión del proceso es fundamental para conseguir ese objetivo. Debemos entregar Apps móviles perfectamente adaptadas a cada plataforma, ofreciendo la mejor experiencia de usuario posible pero sobretodo, funcional. Una App funcional debe cubrir y cumplir unos mínimos exigentes de calidad.

Como desarrolladores, somo humanos y el código no estara libre de errores. Sin embargo, el proceso que apliquemos para la detección y corrección a los mismos, es vital.

Realizar un proceso automático en cada nuevo checkin o de manera programada donde:

  • Compilar proyectos.
  • Pasar pruebas unitarias.
  • Pasar pruebas de interfaz de usuario.
  • Incluso publicar automáticamente paquetes y resultados.

Nos permitirá detectar problemas en el código de la forma más prematura posible, pudiendo ofrecer mayor calidad. Hablamos de procesos de integración continua y de entrega continua.

Integracion continua
Integracion continua

En artículos anteriores ya vimos como utilizar Team City o Visual Studio Team Services para realizar integración continua. En esta ocasión vamos a centrarnos en el uso de Bitrise.

Bitrise

Desde sus inicios (centrados en iOS), Bitrise se ha enfocado como una herramienta destinada a realizar integración y entrega continua de aplicaciones móviles teniendo en cuenta una enorme cantidad de integraciones con otras herramientas y servicios de terceros. Todo ello, con la sencillez y simpleza en mente.

Bitrise y aplicaciones Xamarin
Bitrise y aplicaciones Xamarin

Tras añadir soporte a aplicaciones Xamarin, se puede realizar la compilación, testing y distribución de aplicaciones Xamarin.iOS y Xamarin.Android con Bitrise.

NOTA: Como muchos otros servicios, Bitrise se basa en un modelo de suscripción mensual o anual con diferentes opciones y precios. Cuenta con una opción gratuita. La versión gratuita permite hasta 200 builds mensuales con soporte a Xamarin y más de 100 integraciones con servicios de terceros. La mayor limitación es que sólo permite la compilación de una única aplicación (concurrencia) de manera simultánea.

Integración Continua

La integración continua consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así detector fallos cuantos antes.

Entendemos por integración la compilación y ejecución de pruebas.

WorkFlow

El flujo del proceso sería:

  1. El desarrollador trabaja en su equipo de desarrollo subiendo cambios al repositorio de código donde estaría el código además de las pruebas unitarias.
  2. De una forma automática, el repositorio de código envia el mismo al servidor de BUILD.
  3. El servidor de BUILD realizará la compilación de la solución o proyectos, ejecutará pruebas y recopilará la información de los resultados.
  4. Los resultados los obtiene el desarrollador para poder analizarlos y actuar en consecuencia.

“La integración continua no evitará que se produzcan bugs, pero si nos permite encontrarlos y solucionarlos de una forma dramáticamente más fácil”

Martin Flowler

Los beneficios de utilizar integración continua son:

  • Detectar errores con mayor rapidez y antelación. Esto provocará que sea más sencillo de corregir y por lo tanto más barato.
  • Consistencia. O lo que es lo mismo, tener Builds reproducibles. La App funcionará en cualquier entorno con las mismas condiciones. Evitamos la “contaminación de la Build” o lo que es lo mismo, tener la Build con parámetros “a fuego” y condiciones específicas de la máquina de Build.
  • Poder automatizar también la entrega consiguiendo una entrega continua.

Comenzamos añadiendo una nueva aplicación

Tras realizar el registro de forma gratuita y hacer Login:

Login
Login

Accedemos al Dashboard principal. Desde este apartado tendremos un vistazo rápido a todas las aplicaciones creadas y su estado, últimas noticias o acceder a la configuración.

Para añadir una nueva aplicación bastará con pulsar el botón Add:

Nueva aplicación
Nueva aplicación

Comenzamos con el proceso de creación de la aplicación. El primer paso consiste en indicar la dónde se encuentra el código fuente, es decir, el repositorio de la aplicación. Es posible configurar:

  • GitHub
  • Bitbucket
  • Gitlab
  • Cualquier otra opción con configuración manual estableciendo la URL de acceso y credenciales.

NOTA: Si la autenticación se realiza utilizando un proveedor de identificación de terceros como por ejemplo GitHub, el repositorio aparecerá configurado y listo para utilizar.

Repositorio
Repositorio

Para este artículo vamos a utilizar un repositorio correspondiente a una aplicación Xamarin.Forms meteorológica clonada de un repositorio original de James Montemagno.

Tras seleccionar el proyecto a utilizar se pide como paso el añadir una clave SSH al repositorio para facilitar la validación y acceso con los privileegios necesarios para completar todo el proceso de compilación.

Clave SSH
Clave SSH

Tras añadir la clave y completar el proceso de validación, podemos elegir la rama a utilizar la realizar la compilación.

Elegir rama
Elegir rama

Tras un pequeño proceso de validación (acceso al repo, clonado, elección de tipo de proyecto, etc.):

Proceso de validación
Proceso de validación

Automáticamente se detecta el tipo de proyecto aplicando la configuración idónea en cada caso, la elección de herramientas, tipo de compilación y plataforma:

Configuración del proyecto
Configuración del proyecto

NOTA: Es posible realizar una configuración detallada a mano de cada uno de los parámetros necesarios.

El siguiente paso que requiere configuración consiste en la creación de un webhook. El concepto es sencillo, se configuran una serie de triggers (disparadores) que desencaden una acción, generalmente compilar en base a unas condiciones. Las condiciones establecidas suelen ser:

  • Una fecha y hora establecida (Build programada).
  • Un commit.
  • Una Pull Request.
  • Etc.
Crear Webhook
Crear Webhook

Tras crear un Webhook (por defecto creado para lanzar la Build cada vez que se crea un nuevo commit a la rama), podemos lanzar nuestra primera Build. Bastará con pulsar el botón:

Build
Build

Comienza el proceso de integración continua configurado. En todo momento accedemos a feedback inmediato de cada acción realizada, logs, estados e incluso ver el flujo de acciones a ejecutar.

Compilando!
Compilando!

Al completar el proceso, por defecto, seremos notificados del resultado y la información relacionada con los paquetes vía correo. Además de poder descargar el paquete generado, podemos distribuirlo de forma sencilla enviando notificaciones a otros miembros pudiendo crear grupos, etc.

Paquete
Paquete

Llegados a este punto podemos comprobar como la sencillez buscada por la herramienta se traduce en conseguir de forma bastante rápida y “a tiro” de pocos clics un proceso de integración continua.

El editor de flujos de trabajos

Workflow
Workflow

El editor del flujo de trabajo (Workflow) permite mediante el uso de casillas, seleccionar diferentes procesos a realizar y ordenarnos secuancialmente en base al orden de ejecución deseado. Con todo el proceso anterior, conseguimos:

  1. Acceder al repositorio
  2. Descargar el código fuente
  3. Restaurar paquetes NuGets
  4. Compilar
  5. Crear los paquetes
  6. Desplegar los paquetes a Bitrise

Sin embargo, en ocasiones necesitaremos realizar más procesos de validación, testing o despliegue.

Nuevos pasos, integración con servicios

Al añadir un nuevo paso, tendremos acceso al listado de integraciones con herramientas y servicios de terceros disponibles.

Nuevo paso
Nuevo paso

De esta forma podemos añadir nuevos pasos, subir el paquete a HockeyApp y publicar un mensaje en Slack al terminar. Se puede ver un listado de todas las integraciones disponibles en este enlace.

Hasta aquí esta pequeña introducción a Bitrise. Suficiente para conocer sus posibilidades aunque nos faltan por ver la posibilidad de lanzar pruebas unitarias o Xamarin.UITest además de las opciones de distribución o publicación. Algo que veremos en próximos artículos. La herramienta se muestra como una opción sólida, integrada con las necesidades de Xamarin así como los servicios y herramientass habitualmente necesarios. Sin duda, me ha gustado bastante todo lo que he probado. Y a ti, ¿qué te parece?.

Más información

Xamarin MVP!

xamarinmvpXamarin MVP

Xamarin, al igual que Microsoft cuenta con su propio programa MVP (Most Valuable Professional) que premia a miembros de la comunidad “who have demonstrated an exemplary commitment to helping others get the most out of their experience with Xamarin by sharing their passion, real-world knowledge, and technical expertise with developers all over the world.”

Estoy realmente contento de poder compartir con todos que he sido nominado como Xamarin MVP. Para mi es un gran honor entrar en este grupo donde tengo a tantos amigos y compañeros que son auténticos referentes en comunidades y proyectos Open Source.

Ahora, a continuar aprendiendo, compartiendo y ayudando todo lo posible en blogs, comunidades técnicas y otras vías con más ganas y más ilusión.

¿Me acompañas?

Felicidades a otros miembros de la comunidad

También me gustaría felicitar al resto de compañeros de comunidad que también han sido nominados como Xamarin MVPs. Enhorabuena!

Material ReConnect(); 2016 Valencia y Sevilla

re-connectLos eventos

Tras un exitoso Microsoft Connect(); 2016, en New York, donde se presentaron importantes novedades relacionadas con la plataforma Cloud, novedades en .NET, Visual Studio para MacOS o novedades en Xamarin, ¿algo mejor que recopilar todas las novedades y montar un Tour por varias ciudades?.

Los pasados 18 y 19 de Enero pude estar en Valencia y Sevilla respectivamente junto a mi compañero Eduard Tomás para hacer un repaso completo a todas las novedades principales presentadas.

El material

Desde que Microsoft hizo pública la compra de Xamarin el pasado febrero, todos estábamos esperando ansiosamente el gran evento de Microsoft, para saber cual va a ser la dirección del desarrollo multiplataforma liderado por Miguel de Icaza. La verdad que en Connect(); 2016 no nos ha dejado indiferentes y se han anunciado muchas novedades que nos afectaran directa o indirectamente en nuestros día a día. Pude participar en el ReConnect(); con una charla en la que hicimos un pequeño resumen de las noticias más destacadas enfocadas al mundo .NET y Xamarin y hablamos de las novedades en IDEs (Visual Studio para MacOS), las nuevas herramientas, DevOps con Visual Studio Mobile Center o la llegada de Tizen.NET.

En cuanto a las demos técnicas realizadas, las tenéis disponible en GitHub:

Ver GitHub

Más información

[Tips and Tricks] Error “class file has wrong version 52.0, should be 50.0” en Visual Studio Team Services

androidEl problema

Lleno de ilusión, descargas e instalas Xamarin y te dispones a crear tu primera aplicación móvil multiplataforma nativa con C#. Seleccionas el proyecto Android como proyecto de arranque, un simulador y compilas.

Unsupported major.minor version 52.0
Unsupported major.minor version 52.0

¿Qué ocurre?

Probablemente has instalado múltiples SDKs de Android utilizando Android SDK Manager. Xamarin Android intenta utilizar las últimas “Android Build-Tools” aún no compatibles.

Para solucionar el problema tenemos dos caminos posibles.

El primero de ellos se basa en actualizar Java JDK y asegurar su uso. La versión 52.0 referenciada en el error se refiere al JDK, en concreto a la versión 8. Xamarin Android 7.0 requiere el JDK 1.8 para usar las APIs de Android Nougat (API Level 24). Es necesaria además una versión de 64 bits para poder usar controles personales en el editor Android entre otras acciones.

El segundo camino se basa en utilizar Android 6.0 o lo que es lo mismo el API Level 23.

Puedes encontrar más información en este artículo anterior.

El mismo problema en Visual Studio Team Services

Utilizando Visual Studio Team Services para realizar la compilación de un proyecto Xamarin.Android utilizando un servidor Hosted y en el log del proceso de compilación:

C:\Program Files (x86)\Java\jdk1.6.0_45\\bin\javac.exe -J-Dfile.encoding=UTF8 -d obj\Release\android\bin\classes -classpath .... obj\Release\android\src\android\support\design\R.java:10: cannot access java.lang.Object bad class file: java\lang\Object.class(java\lang:Object.class) class file has wrong version 52.0, should be 50.0 Please remove or make sure it appears in the correct subdirectory of the classpath.

Conociendo el problema tenemos dos opciones. Modificar el proyecto para utilizar Android 6.0 o actualizar Java JDK. Al ser un servidor de tipo Hosted no podemos acceder al servidor remotamente y actualizar.

¿Qué podemos hacer?

En las opciones relacionados con el JDK del proceso de Build en VSTS podemos elegir la versión JDK a utilizar.

JDK 8
JDK 8

Tras lanzar de nuevo una build, el problema queda resuelto!

Más información

[Quedada Informal] CartujaDotNet & SVQXDG

Map-LocationQuedada múltiple

Desde CartujaDotNet, grupo de usuarios .NET de Sevilla y SVQXDG, grupo de desarrolladores Xamarin de Sevilla, vamos a realizar una quedada informal para charlar abiertamente sobre tecnologías Microsoft, Xamarin, herramientas utilizadas, intercambiar impresiones, etc. Además, se analizarán las próximas charlas ya planteadas y los eventos confirmados entre otros temas de interés. Al ser quedada de dos grupos diferentes creemos que es una gran oportunidad para conocer, intercambiar e interactuar entre ambos permitiendo a miembros de cada uno conocer a los del otro y tratar otros aspectos.

No hace falta confirmar asistencia, y por supuesto será gratuito.

¿Te apuntas?

A continuación tienes disponible la fecha, hora y lugar:

  • Día: 01 de Febrero (Miércoles)
  • Horario:  19:00h
  • Lugar: En la Terraza del McDonald’s de Santa Justa

Más información

[Xamarin.Android] Configurar emulador Android x86 con intel HAXM

AndroidIntroducción

A la hora de desarrollar aplicaciones destinadas a aplicaciones móviles, existen múltiples herramientas que ayudan y facilitan el desarrollo. Hablamos de herramientas para analizar la UI, analíticas de rendimiento o crear los iconos en los diferentes tamaños necesarios. Sin embargo, entre todas ellas, brillan con especial importancia los emuladores.

Los emuladores de dispositivos físicos permiten realizar pruebas y simulaciones en la aplicación de forma rápida y sencilla. En el caso de Android, contamos con diferentes opciones. En este artículo vamos a aprender a crear emuladores de alto rendimiento basados en x86 utilizando HAXM.

NOTA: Recuerda, siempre, repetimos, siempre es necesario hacer pruebas de aplicaciones móviles en dispositivos físicos. No se pueden simular todas las condiciones, el rendimiento es diferente, etc.

Intel HAXM

Intel Hardware Accelerated Execution Manager (HAXM) es un motor de virtualización asistido por hardware (utilizando el hipervisor) para acelerar la emulación de aplicaciones para Android.

Requisitos

Hardware:

  • Procesador intel con Intel VT-x, Intel EM64T (Intel 64).
  • Al menos 4GB de RAM, recomendados 8GB RAM.

Software:

  • Microsoft Windows* 10 (32/64-bit).
  • Microsoft Windows* 8 and 8.1 (32/64-bit).
  • Microsoft Windows* 7 (32/64-bit).

Instalar Intel HAXM

Para instalar Intel HAXM tenemos dos vías:

  • Utilizar Android SDK Manager.
  • Instalar de forma independiente.

Accedemos a la página de descarga de Intel HAXM.

Descargar Intel HAXM
Descargar Intel HAXM

Tras descargar el archivo zip necesario, se debe descomprimir.

Instalar HAXM
Instalar HAXM

Antes de realizar la instalación se puede revisar si es posible utilizar HAXM.

¿Qué quiere decir esto?

Intel HAXM es un software de virtualización apoyándose sobre el hipervisor. Se requiere contar con tecnología VT-x. Además, no podemos contar con Hyper-V en ejecución.

Hyper-V Off
Hyper-V Off

La instalación de Intel HAXM se basa en un asistente bastante sencillo.

Instalación
Instalación

Tras completar la instalación es posible validar que todo es correcto ejecutando unas sencillas líneas de comandos.

Validar HAXM
Validar HAXM

Instalar imágenes emuladores x86

Se debe acceder al Android SDK Manager y buscar las imágenes Intel x86 correspondiente a los niveles de API que queremos utilizar.

Descarga de imágenes de emuladores
Descarga de imágenes de emuladores

Crear nuevo emulador x86 HAXM

Accedemos a Android Emulator Manager. Desde Visual Studio se encuentra en Herramientas > Android > Android Emulator Manager.

Android Emulator Manager
Android Emulator Manager

Para crear un nuevo emulador basado en Intel HAXM se dbe pulsar el botón Create.

Nuevo emulador
Nuevo emulador

La clave radica en el uso de una imagen Intel x86 en el campo CPU/ABI. En base a las características de la máquina de desarrollo se pueden realizar ajustes en el uso de memoria y almacenamiento del emulador.

Llegados a este punto, podemos lanzar el emulador y utilizarlo para depurar nuestras aplicaciones Xamarin.

Todo listo!
Todo listo!

Más información

Curso gratuito de desarrollo de aplicaciones nativas multiplataforma con Xamarin

XamarinIntroducción

No hay duda, los smartphones y tabletas han llegado, y ya forman parte de la vida de todos nosotros.

Esto también nos afecta como desarrolladores. El desarrollo móvil se ha convertido en una prioridad en una gran mayoria de ámbitos.

Actualmente contamos con varias plataformas dominantes:

  • iOS
  • Android
  • Windows

El mercado móvil actual

En lo que respecta a nivel de desarrollo nos supone barreras. Contamos con múltiples plataformas de desarrollo diferentes, lenguajes diferentes, etc. suponiendo un nivel de aprendizaje y esfuerzo cada vez mayor de cara a desarrolladores. Además, la experiencia nos ha demostrado que los usuarios no aceptan aplicaciones no nativas. Buscan aplicaciones rápidas, fluidas y con consumos moderados perfectamente adaptadas a la plataforma, ofreciendo una experiencia completa.

¿Qué podemos hacer para mejorar este panorama?

Xamarin

Aquí es donde entran en juego las tecnologías de desarrollo multiplataforma. En estos últimos años han aparecido diversas tecnologías que permiten aprovechar una base de código en multiples plataformas. Entre diversas opciones brilla con especial fuerza, por diferentes motivos (evolución, comunidad, apoyo de Microsoft) Xamarin.

Xamarin es una plataforma de desarrollo gratuita de Microsoft que permite crear nuestras aplicaciones móviles una sola vez y que funcionen en Android, iOS y Windows entre otros sistemas (Windows 10, Mac, wearables…). Todo ello sin tener que duplicar código o aprender nuevas herramientas. Las apps que creamos con Xamarin son aplicaciones nativas, es decir, no tienen diferencias con las que podríamos crear usando las herramientas propias de cada plataforma.

xamarinmonkeysCurso gratuito Xamarin en CampusMVP

Tras realizar un completo curso de Xamarin en CampusMVP donde se aborda tanto Xamarin Classic como Xamarin.Forms, desde conceptos básicos a la publicación pasando por buenas prácticas, MVVM o testing y haber recibido feeback positivo, ¿algo mejor que realizar un gran curso gratuito con la ayuda de Microsoft?. Así nace el curso gratuito  de desarrollo de aplicaciones  Xamarin en CampusMVP.

El curso se compone de cinco módulos diferentes:

  1. Introducción a Xamarin y Azure: en este primer módulo se conocen los conceptos básicos relacionados con Xamarin, se realiza la instalación, se revisa la integración de Xamarin con Visual Studio, un repaso a emuladores y se realiza la primera aplicación Xamarin.Forms.
  2. Interfaz de usuario: se conocen las páginas, layouts y controles de Xamarin.Forms. Tras realizar aplicación básica se introduce la necesidad de buenas prácticas. Conocemos y aplicamos el patrón MVVM para terminar con otros conceptos necesarios como la navegación o el sistema de mensajería.
  3. Creando el backend de la aplicación en Azure: se crea un backend en Azure. Todos los conceptos necesarios para crear el backend se repasan. Conceptos como la creación de una Azure Mobile App, Azure SQL, Easy Tables, etc. Se completa el módulo integrando el backend en una aplicación Xamarin.
  4. Autenticación de usuarios: continuamos progresando en nuevos conceptos, en esta ocasión centrados en añadir autenticación en aplicación Xamarin aprovechando las posibilidades de Azure y utilizando proveedores de autenticación sociales. También hay nuevos conceptos relacionados con Xamarin como el acceso a características específicas de una plataforma con el uso de la cámara y se completa la gestión con el backend previamente creado.
  5. Notificaciones Push: se concluye el curso personalizando la aplicación utilizando estilos e integrando notificaciones Push en una aplicación Xamarin.

El curso comienza en Enero y dura hasta finales de Junio de este mismo año. Durante estos 6 meses se aprenden todos los conceptos creando una aplicación paso a paso desde cero. Al final se consigue tener una aplicación con:

  • Autenticación
  • Listado de elementos obtenidos desde un backend
  • Vista de detalles
  • Posibilidad de añadir nuevos registros incluyendo el uso de la cámara del dispositivo
  • Notificaciones Push

Al final de cada módulo se tiene un divertido reto donde en algunas ocasiones consiste en crear una pequeña aplicación aplicando los conceptos aprendidos y en otras se continuará el desarrollo de una aplicación planteada a lo largo del curso. Además, todos los módulos se componen de un conjunto de documentación, videos y ejemplos prácticos.

¿Te animas?

Muchas gracias a Microsoft y a CampusMVP por hacer posible crear un curso gratuito que ayuda al crecimiento de la comunidad Xamarin.

Más información