En Enero de este año se abría un interesante debate acerca de aquellos puntos que se suelen necesitar crear o extender en Xamarin.Forms. Hablamos de aspectos como Custom Renderers o efectos habituales. No es algo como nuevos controles o cambios drásticos, más bien, cosas como añadir bordes redondeados a ciertos elementos o poder subrayar una parte de texto. Para determinar con exactitud la opinión de la comunidad, y así podemos ayudar al equipo de Xamarin.Forms a afinar las necesidades principales y poder cubrirlas, Adam Pedley creó una encuesta con interesantes resultados.
Xamarin.Forms Community Sprint
Aunque la idea inicial era ayudar al equipo de Xamarin.Forms a conocer pequeñas mejoras deseadas por la comunidad, lo cierto es que diferentes miembros de la comunidad se interesaron por ayudar directamente. Esto ha dado lugar a lo que se conoce como Community Sprint. Con la ayuda y revisión del equipo de Xamarin.Forms hay creadas un listado de Issues que se pueden tomar permitiendo que cualquier desarrollador de la comunidad pueda contribuir en todo momento con gran ayuda. Existe un canal Slack donde tener comunicación con todos los miembros de comunidad participando así como con miembros del equipo de Xamarin.Forms.
NOTA: Puedes ver un listado de las mejoras ya realizadas en este enlace.
Si te apetece contribuir, tan solo debes elegir una de las Issues abiertas etiquetadas como Community Sprint. Estaré encantado de ayudarte junto a otros miembros de la comunidad en tus pasos, anímate!.
Cuando desarrollamos aplicaciones móviles, siempre tenemos en cuenta el dispositivo final donde se va a ejecutar, es decir, las optimizaciones a diferentes niveles se encuentran a la orden del día. Hablamos de opciones como cachear imágenes, reutilizar celdas en listados o compilar el XAML entre una infinidad de opciones.
Por otro lado, la mayoría de aplicaciones necesitan guardar datos como caché para optimizar arranques o bien, para evitar volver a realizar peticiones HTTP innecesarias. En este artículo, vamos a conocer y a utilizar Monkey Cache de James Montemagno.
Cachear datos
Mientras que tenemos diferentes opciones para cachear imágenes, cachear información es algo donde hay diversidad de opciones. A continuación, vamos a conocer Monkey Cache, una forma sencilla y potente de cachear información durante un periodo de duración concreto.
Monkey Cache
Monkey Cache tiene como objetivo permitir cachear información de forma sencilla, sin requerir gran cantidad de dependencias controlando el tiempo de caducidad de los datos. Es importante resaltar que la librería no tiene como objetivo gestionar peticiones HTTP, esstados, etc. tan solo cachear la información.
Estamos ante una librería NET Standard 2.0 con el siguiente soporte a plataformas:
Platforma
Versión
Xamarin.iOS
iOS 7+
Xamarin.Mac
All
Xamarin.Android
API 14+
Windows 10 UWP
10.0.16299+
.NET Core
2.0+
ASP.NET Core
2.0+
.NET
4.6.1+
Utilizando Monkey Cache
Vamos a utilizar la aplicación WeatherApp para controlar las diferentes peticiones a la API de OpenWeatherMap.org.
Comenzamos añadiendo los paquetes NuGet necesarios. Monkey Cache cuenta con diferentes implementaciones como SQLite, LiteDB o FilesStore.
En nuestro ejemplo, vamos a utilizar la opción más sencilla (y con menos dependencias), FileStore.
Tras contar con los paquetes necesarios, continuamos creando un identificador de aplicación utilizando la propiedad ApplicationId, que se encargará de crear una carpeta específica para la aplicación en disco:
La aplicación verificará si los datos han expirado o no. En caso de expirar o no existir, realiza la petición HTTP. Al realizar la petición HTTP, añadimos en cache los datos durante 1 hora (expireIn). Si los datos no han expirado, utilizamos los datos cacheados evitando realizar la petición HTTP.
Sencillo, ¿verdad?.
NOTA: Es posible hacer estas llamadas genéricas para reutilizar en diferentes servicios.
La librería conservará datos a menos que indiquemos que deseamos borrarlos. Podemos borrar todos los datos:
Barrel.Current.EmptyAll();
O podemos eliminar todos los datos expirados:
Barrel.Current.EmptyExpired();
Tienes el código fuente del ejemplo disponible GitHub:
Me he quedado con dudas…
El uso de la librería es sencillo, pero…¿diferencias con Akavache?. Akavache ofrece persistencia en forma de clave-valor con un rendimiento muy alto utilizando SQLite y Reactive Extensions. Monkey Cache busca simplificar uso, gestión de la expiración y dependencias.
El pasado 13 de Febrero desde SVQXDG, grupo de desarrolladores Xamarin de Sevilla, se organizaba un evento donde vimos el conjunto de herramientas imprescindibles para desarrolladores Xamarin.
El material
Pude participar en el evento con una sesión hablando diferentes herramientas destinadas a aumentar la productividad de desarrolladores Xamarin. Hablamos de herramientas como MFractor, LiveXAML, Gorilla Player o Xamarin Live Player.
Tienes la presentaciónutilizada disponible en SlideShare.
La llegada de nuevas plataformas siempre nos abren nuevas posibilidades. Ante la llegada del backend GTK para Xamarin.Forms podemos llegar a Linux (además de macOS y Windows). Sin embargo, también estamos ante nuevos retos y ante nuevas necesidades.
¿Cómo podemos abordar la llegada a una nueva plataforma de forma más cómoda?
Con más opciones como controles o helpers empaquetados en un Toolkit!
FormsGtkToolkit
FormsGtkToolkit una colección de clases auxiliares y controles personalizados para el backend GTK de Xamarin.Forms. Actualmente incluye:
La llegada de nuevas plataformas siempre nos abren nuevas posibilidades. Ante la llegada del backend GTK para Xamarin.Forms podemos llegar a Linux (además de macOS y Windows). Sin embargo, también tenemos nuevas necesidades como desarrolladores. Por ejemplo, el proceso de editar la interfaz de usuario en XAML, compilar el proyecto y ejecutar para ver el resultado en Linux.
Forms Live XAML
Para facilitar esta tarea, tenéis ahora disponible una pequeña (gran) aplicación desarrollada con Xamarin.Forms y el backend GTK que permite ver cualquier cambio de XAML al vuelo.
La herramienta es muy sencilla. Cuenta con un panel lateral izquierdo donde escribir código XAML. Cualquier mínimo cambio se previsualizará en el panel de la derecha.
NOTA: También se puede forzar un refresco con el botón de actualizar situado en la parte superior derecha.
Cualquier error en XAML también será mostrado:
Se soportan desde Layouts simples a aquellos más complejos (estilos, gran cantidad de líneas, etc.) con cambios al vuelo:
El código fuente de la herramienta esta disponible en GitHub:
La herramienta ya compilada también se encuentra disponible.
¿Qué te parece la herramienta?, ¿te resulta interesante?.
Es increíble pensar que ahora puede tener una aplicación Linux nativa ejecutándose con solo algunos ajustes en una solución Xamarin.Forms. El soporte de Linux en Xamarin.Forms ahora está en modo Preview.En este artículo, vamos a ver cómo agregar este nuevo proyecto a una solución existente de Xamarin.Forms, los obstáculos que puedes encontrar así como el estado actual y el futuro de las características de esta nueva plataforma.
Gtk# Backend
El soporte de Linux se logra con un nuevo backend basado en Gtk#. Gtk# es un Toolkit de interfaz gráfica de usuario para mono y .Net. El proyecto enlaza el kit de herramientas gtk + y una variedad de bibliotecas de GNOME, lo que permite el desarrollo de aplicaciones gráficas Gnome completamente nativas utilizando Mono y .Net.
NOTA: Este nuevo backend permite crear aplicaciones Linux, pero también aplicaciones para macOS y Windows.
Puede descargar la última versión de Gtk # desde la página de descargas del proyecto Mono.
Configurando un proyecto Linux
Desarrollar para Linux es posible desde Linux, macOS y Windows utilizando MonoDevelop, Visual Studio para macOS y Visual Studio, respectivamente.
Agregar una librería .NET desde Windows
Hasta que las plantillas de Xamarin.Forms agreguen un proyecto de aplicación Linux, podemos agregarlo fácilmente nosotros mismos.Para hacer eso en Visual Studio, agregamos un nuevo proyecto a la solución y elegimos una Biblioteca de clases.
Agregar una librería .NET desde Linux
MonoDevelopes un entorno de desarrollo de código abierto disponible para Linux.
Para compilar librerías portables (PCL) desde MonoDevelop, es necesario el siguiente comando:
sudo apt-get install referenceassemblies-pcl
Para crear un nuevo proyecto de tipo librería .NET en MonoDevelop, se debe elegir la opción una Biblioteca de clases.
Y desde macOS
Para crear un nuevo proyecto de biblioteca .NET en Visual Studio para macOS, agregamos un nuevo proyecto a la solución y elegimos una Biblioteca de clases.
Configurar el proyecto
Lo primero que tenemos que hacer para trabajar con el backend Gtk es precisamente agregar al proyecto recién creado las referencias a las bibliotecas Gtk#.
También necesitaremos agregar el último paquete Preview de Xamarin.Forms (Nightly). Editamos la clase creada con la librería:
public class Program
{
[STAThread]
static void Main(string[] args)
{
Gtk.Application.Init();
Forms.Init();
var app = new App();
var window = new FormsWindow();
window.LoadApplication(app);
window.SetApplicationTitle("WeatherApp");
window.Show();
Gtk.Application.Run();
}
}
Inicializa Xamarin.Forms, crea una ventana y carga la aplicación Forms.
NOTA: Si tienes otras dependencias que deben inicializarse, aquí puedes hacerlo.
A probar!
Con el proyecto del backend Gtk como proyecto de inicio, ejecútalo (F5). Voila! ¡Ahora tiene una aplicación Gtk nativa!
¿Algo más?
Ahora que tienes una aplicación, es hora de ponerse la gorra de diseñador de UX y comenzar a explorar los cambios necesarios para adaptar la aplicación a esta nueva plataforma.
Estilos
Échale un vistazo al estilo de la interfaz de usuario para Linux. Es posible que el mismo estilo utilizado en los dispositivos móviles no se vea bien.¡Esto lo cambios fácilmente! Con los cambios recientes realizados en OnPlatform, ahora puede seleccionar cada plataforma.Eso incluye a GTK.
La posibilidad de tomar cualquier ContentPage y usarlo en aplicaciones nativas, ¡también está disponible en el backend de Gtk!
var settingsView = new SettingsView().CreateContainer();
vbox.PackEnd(settingsView, true, true, 0);
Tienes un ejemplo disponible en GitHub:
Recuerda, es una Preview…
Esta Preview tiene un soporte muy alto de las características y opciones de Xamarin.Forms. Sin embargo, hay algunas características aun no disponibles:
Pinch Gesture
RotationX
RotationY
Scale
Swipe Gesture
Ejemplos, ejemplos, ejemplos!
Un nuevo backend ofrece la posibilidad de llegar a nuevas plataformas, es normal querer probar todas las posibilidades. ¡No te preocupes, vamos a ver varios ejemplos!
Movies es una aplicación Xamarin.Forms disponible para Linux que hace uso de The Movie Database (TMDb) API, una popular base de datos de películas y series de TV, para demostrar las posibilidades del nuevo backend haciendo uso de una gran variedad de funcionalidades ( mapas, WebView, temas gtk, etc.).
Disponible en GitHub:
Weather es otro ejemplo de aplicación Xamarin.Forms con soporte a Linux. Es una aplicación para ver la información meteorológica de forma muy visual.
Disponible en GitHub:
Nuevas posibilidades
Linux se ejecuta bajo una gran variedad de dispositivos. Xamarin.IoT permite a los desarrolladores escribir y compartir código C# en dispositivos IoT tales como Raspberry Pi e Intel Edison. Funciona con cualquier dispositivo IoT que ejecute Linux (distribuciones más populares) y se integra sin problemas con Azure IoT Suite para conectar, analizar y asegurar soluciones de IoT.
Podemos combinar Xamarin.Forms con Xamarin.IoT!. Se puede crear la interfaz de usuario de la aplicación con XAML o C# usando Xamarin.Forms y acceder a los sensores usando Xamarin.IoT.
Puedes encontrar un ejemplo de la aplicación WeatherApp que accede a la información de un sensor de humedad en GitHub: