El pasado Martes, 07 de Febrero en la E.T.S. Ingeniería Informática tenía lugar un evento de las comunidades, CartujaDotNet, grupo de usuarios .NET de Sevilla y SVQXDG, grupo de desarrolladores Xamarin de Sevilla aprovechando una visita a la Universidad de los chicos de Microsoft DX. El evento que tenía como título «Containers y Xamarin everywhere!» proponía una divertida tarde donde hacer una introducción a Containers y Docker de la mano de Diego Martínez y posteriormente una sesión sobre testing de Apps Xamarin de la mano de un servidor.
El material
He tenido la oportunidad de participar en una de las sesiones tratando la creación y mantenimiento de pruebas automáticas de aplicaciones Xamarin. Concretamente vimos:
Introducción al concepto de pruebas unitarias.
Como crear pruebas unitarias a un proyecto Xamarin.
En cuanto a las demos técnicas realizadas, las tenéis disponible en GitHub:
Quisiera terminar agradeciendo a Diego Martínez por su colaboración y sesión en el evento, a la E.T.S. Ingeniería Informática y al club .NET de la universidad por su ayuda y facilidades a la hora de disponer de sala y por supuesto a todos los asistentes.
El pasado Microsoft Connect 2016, en San Francisco, Samsung en colaboración con Microsoft anunciaba la primera versión en modo Preview de las herramientas Tizen para Visual Studio.
Las herramientas Tizen para Visual Studio facilitan emuladores, extensiones para Visual Studio con la posibilidad de tener IntelliSense y capacidades de depuración, se utiliza Xamarin.Forms para definir la interfaz de usuario, como ya hacíamos con iOS Y Android. De esta forma, Xamarin.Forms añade una nueva plataforma a la que dar soporte ampliando las posibilidades del mercado.
Tizen.NET Preview 2
Recientemente, se ha liberado la Preview 2 de Tizen.NET. Una actualización importante que añade una enorme cantidad de novedades con respecto a la priemera versión lanzado el pasado Noviembre.
Entre el conjunto de novedades más detacadas encontramos:
Soporte a TV: En la primera release se incluía el soporte a .NET Standard, Xamarin.Forms y APIs Tizen de móviles. Ahora se incluyen todo lo necesario para desarrollar aplicaciones para televisores.
Asistente de proyecto: Dado que ahora contamos con diferentes tipos de posibles proyectos (móviles y TV), al crear un nuevo proyecto para Tizen tendremos un sencillo asistente que nos permitirá configurar las opciones básicas.
Nuevas herramientas: Gestión de emuladores, administrador de certificados o editor de manifiesto. Se han añadido varias herramientas nuevas para permitir desarrollar aplicaciones de forma más sencilla.
Nuevas APIs: Incremento alto del conjunto de APIs Tizen soportadas con respecto a la Preview anterior. Entre las novedades encontramos uso de NFC, gestión y administración de multimedia, geofence, etc.
Ante tal conjunto de novedades, ¿algo mejor que verlas todas en video?
Hace poco he tenido la oportunidad de asistir al Xamarin Partner Summit de Londres representando a Plain Concepts.
Xamarin Partner Summit
Estamos ante un evento de un día celebrado en múltiples lugares (Londres, Amsterdam y Silicon Valley) donde se reunen y agrupan los partners de Xamarin con el objetivo de facilitar la comunicación y el networking además de tener algunas sesiones técnicas e información relacionada con el programa.
Keynote
La Keynote del evento con Greg Urquhart se enfocó a analizar el mercado móvil actual. Con una previsión de más de 6 billones (OJO con b) de usuarios con teléfonos inteligentes en el mercado para el año 2020, el equivalente al 70% de la población mundial estamos ante un mercado lleno de posibilidades. Apps have won. Tras un repaso a la estrategia «Mobile first, Cloud first» llevada a cabo por Microsoft en los últimos años, se profundizó en el camino llevado a cabo hasta conseguir ser el mayor contribuidor de código Open Source de GitHub, la adquisión de Xamarin y la expansión de Azure.
Las sesiones técnicas avanzadas
Tras la Keynote podíamos elegir entre diferentes Tracks:
Negocio
Nivel medio técnico
Nivel avanzado técnico
A ser desarrollador y contar con experiencia en el desarrollo me aventuré a lanzarme al track de desarrollo técnico avanzado. Divida en dos partes, la primera parte fue un conjunto bastante interesante y diverso de puntos y consejos donde tuvimos a Colby Williams. Se trataron diversos puntos entre los que destacaría:
Ventajas e incoventienes de PCL vs Shared. Independientemente de favoritos, pros y contras, la clave es su uso en conjugación con buenas prácticas para poder compartir la mayor cantidad de código posible.
Reutilización de código. Uno de los puntos claves que se trataron fue la reutilización de código. Pero no reutilizar código entre diferentes plataformas en una misma aplicación. El factor que se trataba era reutilizar código entre diferentes aplicaciones. El beneficio de crear paquetes NuGet, versionar y reutilizar las versiones adecuadas en diferentes aplicaciones.
Olvidad el porcentaje. Suena extraño cuando durante mucho tiempo se ha utilizado el porcentaje de código compartido como signo de salud, buen hacer y ventajas del proyecto Xamarin. Colby indicó que de nada sirve compartir un poco más de código si esto afecta al rendimiento o complica el mantenimiento de la aplicación. Al final, el usuario final utiliza una aplicación este realizada como este realizada, la clave es poner el enfoque en la reutilización, rendimiento y mantenimiento. El porcentaje es una consecuencia, no el factor principal.
No reinventar la rueda. En muchas ocasiones se ven implementaciones similares o dudas sobre aspectos que se encuentran muy bien cubiertos. Conocer los plugins que aporta la propia Xamarin y la comunidad.
Es un pequeño extracto de una sesión donde también tuvimos tiempo para hablar de otros aspectos como la distribución y reutilización de librerías o Visual Studio Mobile Center.
La segunda parte de esta sesión se basó en una mesa redonda. Fue una «lluvia» brutalmente interesante de puntos como, aspectos que necesita integrar Visual Studio Mobile Center para poder cubrir las posibilidades de VSTS Build + Xamarin Test Cloud + HockeyApp, rendimiento en aplicaciones con diferentes consejos y prácticas (Ojo a la suscripción a eventos sin posteriormente eliminar el event handler delegate), patrón MVVM y frameworks en combinación con aspectos relacionados con el rendimiento (bindings principalmente), etc.
En otras sesiones correspondiente a otros Tracks se vieron otros puntos o algunos similares desde otro punto de vista (no pude asistir, lo capté hablando con otros compañeros). Cabe destacar la mención especial a lo que se considera como otra gran oportunidad que llegará proximamente, la realidad aumentada / realidad virtual y realidad mixta.
Cierre y networking
Llegábamos a la parte final del evento con una Keynote de cierre. En este punto vimos los próximos pasos del programa de partners de Xamarin que pasará a ser MPN (Microsoft Partner Network) desde el próximo año fiscal (Julio). Repasamos ideas claves, próximos eventos y fin. Fin de las sesiones y llegada de un momento divertido de networking. Pude conocer a otros compañeros Microsoft y Xamarin MVP de otros países, otros desarrolladores Xamarin y las conversaciones fueron muy variadas y nutritivas. Vi alguna aplicación interesante, igualmente mostré algunas de las desarrolladas, etc.
Las plantillas de proyectos así como de diferentes tipos de archivos son una necesidad básica y muy requeridos a la hora de arrancar un proyecto. En la última actualización de Xamarin, la versión RC del Cycle 9, nos encontramos con novedades en las plantillas de proyectos Xamarin.Forms:
Ahora al seleccionar la plantilla Cross Platform App disponible en la categoría Cross Platform, tenemos disponible un asistente que nos permite configurar el proyecto:
Entre utilizar Xamarin.Forms o Xamarin.Classic.
PCL o Shared.
Plantilla vacía o maestro detalle.
Añadir proyecto Azure Mobile App directamente.
Tras crear un proyecto Xamarin.Forms, podemos añadir nuevas páginas y tenemos novedades:
Ahora contamos con plantillas para crear nuevas páginas utilizando:
Mapas
Pestañas
Listado
Si añadimos una página de tipo listado:
No solo añade la vista, también una ViewModel asociada con datos FAKE.
Un vistazo en video
Suena interesante, ¿cierto?. Si te lo parece, no te pierdas el siguiente recorrido por las novedades en video.
Aprovechando una visita a la Universidad de los chicos de Microsoft DX, ¿algo mejor que montar un evento de comunidad?. De esta forma tan sencilla nace Containers y Xamarin everywhere!.
Tendremos la siguiente agenda:
• 19:00h – 19:45h: Containers Everywhere. La evolución en el mundo de IT es constante, y si hace unos años comenzamos a utilizar las máquinas virtuales, estos ya se estas ya se están comenzando a quedar obsoletas para algunas tareas siendo remplazadas por los contenedores: entornos más ligeros y multiplataforma. En esta sesión veremos una introducción a estos y cómo usarlos en Windows y Microsoft Azure. Por Diego Martinez.
• 19:45h – 19:50h: Descanso.
• 19:50h – 20:35h: Testing de Apps Xamarin. La calidad en el desarrollo de aplicaciones móviles es innegociable. Ante un mercado que se mueve con suma rápidez contando con una enorme diversidad de dispositivos con factores de forma, resolución, tamaño de pantalla y caracterítiscas diferentes debemos de conocer como asegurar un buen comportamiento de la aplicación ante diferentes condiciones. En esta sesión vamos a ver como realizar pruebas unitarias y de UI de nuestras aplicaciones Xamarin. Además, conoceremos Xamarin Test Cloud y sus posibilidades. ¿Te apuntas?. Por Javier Suárez.
El lugar
El evento se celebrará en la ETS de Ingeniería Informática. Dirección detallada:
E.T.S. Ingeniería Informática – Universidad de Sevilla, Aula B1.32 Av. Reina Mercedes s/n Sevilla Se 41012
La fecha
El evento tendrá lugar el próximo Martes, 07 de Febrero de 18:30h a 20:00h. Tendremos dos sesiones técnicas de 45 minutos de duración cada. Además contaremos con algún detalle entre los asistentes.
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.
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.
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.
El flujo del proceso sería:
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.
De una forma automática, el repositorio de código envia el mismo al servidor de BUILD.
El servidor de BUILD realizará la compilación de la solución o proyectos, ejecutará pruebas y recopilará la información de los resultados.
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:
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:
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.
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.
Tras añadir la clave y completar el proceso de validación, podemos elegir la rama a utilizar la realizar la compilación.
Tras un pequeño proceso de validación (acceso al repo, clonado, elección de tipo de proyecto, etc.):
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:
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.
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:
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.
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.
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
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:
Acceder al repositorio
Descargar el código fuente
Restaurar paquetes NuGets
Compilar
Crear los paquetes
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.
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?.
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!
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.
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.
¿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.
Tras lanzar de nuevo una build, el problema queda resuelto!
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).
Tras descargar el archivo zip necesario, se debe descomprimir.
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.
La instalación de Intel HAXM se basa en un asistente bastante sencillo.
Tras completar la instalación es posible validar que todo es correcto ejecutando unas sencillas líneas de comandos.
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.
Crear nuevo emulador x86 HAXM
Accedemos a Android Emulator Manager. Desde Visual Studio se encuentra en Herramientas > Android > Android Emulator Manager.
Para crear un nuevo emulador basado en Intel HAXM se dbe pulsar el botón Create.
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.