[Xamarin.Forms] Aplicaciones Tizen

tizen_logoAplicaciones nativas multiplataforma

Xamarin.Forms es un framework que añade una capa de abstracción en la interfaz de usuario permitiendo crear aplicaciones multiplataforma nativas compartiendo el código de la UI escrito en XAML o C#.

Crear aplicaciones nativas, compartiendo grandes cantidades de código y llegar a varias plataformas son las claves del éxito Xamarin.Forms. Las plataformas soportadas actualmente son:

  • Android
  • iOS
  • Windows Phone
  • UWP

Entre la lista de peticiones y deseos relacionados con Xamarin.Forms, el acceder a más plataformas es una de las más destacadas.

Tizen aparece en escena

Tizen es un Sistema operative móviol basado en Linux, patrocinado por la Linux Foundation con el objetivo de sustentar una gran variedad de dispositivos, tabletas, móviles, wearables, dispositivos IoT, SmartTVs, etc.

Tizen en TVs
Tizen en TVs

Apoyado y utilizado por Samsung en gran variedad de dispositivos brilla por su ligereza (requiere hardware menos potente) ayudando al equilibro y consumo.

Actualmente disponible en más de 50 millones de dispositivos Samsung incluidas SmartTVs, wearables, dispositivos IoT y teléfonos.

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.

Tizen.NET
Tizen.NET

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, características y componentes

Tizen.NET se basa en un conjunto de componentes:

  1. .NET Core
  2. Forms como framework de UI
  3. APIs específicas de Tizen

.NET Core

.NET Core es la plataforma de desarrollo llevada a cabo por Microsoft y la comunidad .NET disponible en GitHub. Con la multiplataforma como clave destacada, soporta Windows. MacOS y Linux, además se puede utilizar en dispositivos, la nube o en escenarios emebebidos o IoT.

.NET Core contiene las siguientes partes:

  • El .NET runtime, otorga la carga de ensamblados, el garbage collector, interoperabilidad nativa, y otros servicios básicos.
  • Un conjunto de librerías que facilitan utilidades fundamentales, tipos de datos primitivos, etc.
  • Un conjunto de herramientas de SDK y de compiladores del lenguaje que permiten completar todas las necesidades en el desarrollo. Disponibles en el .NET Core SDK.

El uso de .NET native ofrece grandes ventajas:

  • Tiempos de ejecución más rápidos
  • Tiempos de arranque más rápidos
  • Coste bajo en despliegues
  • Optimización en el uso de memoria

Xamarin.Forms como framework de UI

Xamarin.Forms es un toolkit multiplataforma pata crear interfaces de usuario de forma eficiente y compartida entre iOS, Android y Windows. Tizen.NET soporta el 99% de características de Xamarin.Forms. Las limitaciones son:

  • AppLinkEntry
  • PinchGestureRecognizer
  • PanGestureRecognizer
  • OpenGLView
  • WebView
  • OnPlatform<T>
  • PlatformEffect<TContainer, TControl>

APIs específicas de Tizen

Tizen.NET nos permite trabajar con la plataforma utilizando C#, es decir, expone las APIs nativas de Tizen como las de localización o conectividad. Actualmente, utilizando C# tenemos soporte para el 60% de las APIs de Tizen.

tizen-architecture

Las APIs soportadas de Tizen son:

  • Applications: Aporta el conjunto de APIs relacionado con la aplicación tales como la gestión de eventos relacionados con el estado de la aplicación.
  • Content: Descarga de contenido, almacenamiento, asociaciones de tipos.
  • Location: Localización geográfica y geofencing.
  • Multimedia: Servicios multimedia incluido audio o grabación.
  • Network: Control del estado de la conectividad o accede a información de la red.
  • Security: Almacenamiento seguro para almacenar contraseñas o claves.
  • System: Servicios específicos del Sistema, obtener información del estado, información del sistema, etc.

La instalación

Comenzamos accediendo a la documentación oficial de Tizen.NET donde tenemos acceso al instalador.

Descarga
Descarga
Descargar Tizen.NET
Descargar Tizen.NET

Tras la descarga del archivo, debemos realizar la instalación de las herramientas Tizen.NET.

Setup
Setup

Al completar la instalación debemos tener todo lo necesario.

A tener en cuenta:

  • Se requiere una maquina con un procesador de 64 bits.
  • Para lanzar el emulador se requiere Intel HAXM. Hyper-V debe estar deshabilitado.

Creando una aplicación para Tizen desde Visual Studio

Las herramientas de Tizen para Visual Studio incluyen:

  • Emulador: Utiliza una imagen de Tizen 3.0 (beta) con soporte a aplicaciones .NET. Versiones anteriores del emulador a pesar de poder utilizarlos desde Visual Studio, no tienen soporte a .NET.
  • APIs: Sólo se añaden en la primera Preview APIs móviles.
  • Extensiones: Mediante dos extensiones se añade soporte a la edición, depuración o compilación del proyecto.
Extensiones Tizen en Visual Studio
Extensiones Tizen en Visual Studio

Vamos a crear un proyecto Xamarin.Forms con soporte a Tizen. A la hora de crear el proyecto, contamos con diferentes plantillas de proyectos.

Plantillas Tizen
Plantillas Tizen

Bajo la pestaña Tizen encontramos:

  • Blank App (Tizen Xamarin.Forms Portable): Crea una solución con una librería portable y un proyecto nativo Tizen.NET.
  • Blank App (Tizen Xamarin.Forms Single): Sólo crea el proyecto Tizen. Idóneo para añadir a una solución Xamarin.Forms ya preparada.
  • Class Library (Tizen): Librería con Soporte a Tizen.

Seleccionamos la primera opción. Tras crear el Proyecto veremos una solución con dos proyectos:

  • Un proyecto nombrado <projectname> de tipo portable que contiene todo el código Xamarin.Forms.
  • Otro proyecto llamado <projectname>.Tizen que contiene todo el código necesario para inicializar la aplicación con el framework Tizen.

Para desplegar la aplicación en el emulador bastara con pulsar F5 o pulsar el botón Play.

Compilar
Compilar

Tras unos segundos el icono de la aplicación debe aparecer en el emulador permitiendo el acceso a la misma.

La App desde la plantilla en ejecución
La App desde la plantilla en ejecución

NOTA: El primer arranque del emulador se encarga de desempaquetar la imagen necesario. El proceso puede tardar unos minutos.

A continuación, vamos a crear una aplicación con algo de entidad utilizando MVVM para mostrar un listado de monos.

Sin embargo, antes de comenzar, vamos a repasar la estructura del proyecto para conocer todo lo necesario relacionado. Vamos a ignorar el contenido de la librería portable al ser exactamente igual a todo lo que ya teníamos en Xamarin.Forms.

En el proyecto Tizen tenemos:

  • Una carpeta llamada shared que contendrá elementos relacionados con la aplicación. El icono de la aplicación se encuentra empaquetado en el directorio shared/res.
  • La carpeta res contendrá recursos para la aplicación. Por ejemplo, si la aplicación necesita un archivo en tiempo de ejecución, este es su lugar.
  • La carpeta lib contiene el código generado de la aplicación.

También tenemos un archivo de vital importancia, tizen-manifiest.xml. Hablamos del archivo de manifiesto, un archivo de configuración donde se especifican datos básicos de la aplicación como nombre, icono, paquete, etc.

Tras analizar la estructura del proyecto, continuamos con nuestra aplicación. Comenzamos creando la estructura base de carpetas:

tizen-project-structure

Continuamos creando el modelo de datos, una clase llamada Monkey que definirá a cada mono del listado:

public class Monkey
{
    public string Name { get; set; }

    public string Location { get; set; }

    public string Details { get; set; }

    public string Image { get; set; }
}

Continuamos definiendo la vista modelo, encargada de preparar toda la colección de monos a mostrar en la UI:

public class MonkeysViewModel
{

   public ObservableCollection<Monkey> Monkeys { get; set; }

    public MonkeysViewModel()
    {
        Monkeys = new ObservableCollection<Monkey>
        {
            new Monkey
            {
                Name = "Baboon",
                Location = "Africa & Asia",
                Details = "Baboons are African and Arabian Old World monkeys belonging to the genus Papio, part of the subfamily Cercopithecinae.",
                Image = "http://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Papio_anubis_%28Serengeti%2C_2009%29.jpg/200px-Papio_anubis_%28Serengeti%2C_2009%29.jpg"
            },
                  ...
            };
      }
}

Por último, llega el momento de definir la UI. Para ello utilizaremos la vista principal en XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="TizenMonkeys.Views.MonkeysView"
             xmlns:templates="clr-namespace:TizenMonkeys.Views.Templates;assembly=TizenMonkeys"
             Title="Monkeys Tizen.NET">
    <ListView
        ItemsSource="{Binding Monkeys}"
        RowHeight="80"
        HasUnevenRows="true">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <templates:MonkeyItemView/>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage>

Si compilamos y ejecutamos el proyecto:

Voila!
Voila!

Impresionante, ¿verdad?

Recuerda, cualquier tipo de duda o sugerencia es bienvenida en los comentario del artículo. Tizen.Net nos abre un mundo de posibilidades de forma sencilla al abrirnos el abanico de dispositivos soportados. ¿Y tú que opinas?.

Tizen.Net, ¿qué es lo próximo?

El objetivo marcado es continuar añadiendo extensiones que faciliten la creación de grandes aplicaciones. Los puntos en el camino próximo son:

  • Mayor soporte a APIs de Tizen.
  • Añadir diferentes perfiles (TV, mobile).
  • Se subirá próximamente el código fuente (como el resto de Xamarin.Forms está disponible en GitHub).
  • Mayor cantidad de ejemplos utilizando Tizen.NET.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *