[Windows 10] Extensions SDK

Circle Add -04Introducción

Desde la llegada de las Apps Universales ya con el SDK de Windows Phone 8.1 se denotaba el esfuerzo por facilitar a los desarrolladores la posibilidad de crear Apps para varias plataformas compartiendo la mayor cantidad de código posible. Sin embargo, no debemos olvidar que la App tiene como destino múltiples plataformas con características muy diferentes.

¿Cómo se gestionan las características específicas de cada plataforma?

Antes de Windows 10

Con la llegada de las Apps Universales tuvimos una solución con tres proyectos, uno específico para Windows, otro para Windows Phone y un tercer proyecto llamado Shared donde añadir la mayor cantidad de código compartido posible. El resultado de la compilación eran dos binarios, uno por plataforma.

Estado APIs WinRT

Estado APIs WinRT

A nivel de desarrollo, a pesar del esfuerzo visible en la congergencia entre plataformas, no todas las APIs estaban 100% compartidas.

APIs específicas de Windows Phone

APIs específicas de Windows Phone

Ante casos de APIs no compartidas o específicas de una plataforma teníamos múltiples opciones:

  • Colocar el código específico en cada proyecto de cada plataforma.
  • Utilizar directivas de compilación en clases compartidas.

Mediante directivas de compilación podemos elegir que parte del código ejecutar dependiendo de la plataforma donde se ejecute. Se debe utilizar sólo para pequeños trozos de código. Hay que tener en cuenta que aunque logramos nuestro objetivo, en algunos casos estamos duplicando código.

Directiva de compilación

Directiva de compilación

Con la llegada de Windows 10

Con la llegada del SDK de Windows 10 Preview tenemos la posibilidad de crear Apps Universales con un único binario que funcione en múltiples plataformas. Tenemos acceso a una gran cantidad de APIs totalmente compartidas pero… ¿que ocurre cuando necesitamos acceder a APIs específicas de una plataforma?

La respuesta a la pregunta son los Extensions SDK. Por cada familia de dispositivo contamos con una serie de extensiones que nos permiten acceder a APIs específicas.

Extensions SDK

Extensions SDK

NOTA: Por ahora, en la versión disponible de las herramientas de desarrollo para Windows 10 Technical Preview contamos con extensiones para Desktop y Mobile.

Añadiendo extensiones

Para añadir una extensión correspondiente a una familia de dispositivo hacemos clic derecho sobre las referencias del proyecto y seleccionamos la opción Add Reference…

Accediendo al apartado Extensions dentro de Universal App Platform:

Añadir SDK de extensión

Añadir SDK de extensión

Tenemos disponible la extensión para Desktop y Mobile.

Trabajando con extensiones

Al trabajar con extensiones siempre debemos realizar verificaciones de si la API específica de una familia de dispositivos con la que deseamos trabajar esta disponible o no. Si no realizamos verificaciones y la llamada a la API de una extensión se ejecuta en un dispositivo que no soporta dicha extensión, obtendremos una excepción.

Vimos previamente como se gestionaba en Windows Phone 8.1 mediante directivas de compilación la pulsación de la tecla volver. A continuación, vamos a ver exactamente lo mismo utilizando Extensions SDK en Windows 10.

Tras añadir la extensión Mobile:

Windows Mobile Extension SDK

Windows Mobile Extension SDK

En el constructor de la App en el archivo App.xaml.cs añadimos:

 HardwareButtons.BackPressed += HardwareButtons_BackPressed;

Con el evento asociado:

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    //TODO:
}

Tan sencillo como esto pero si ejecutamos en Windows la App…

Extensions SDK 06

TypeLoadException

Como comentamos previamente debemos añadir verificaciones para asegurar que el dispositivo soporta la extensión o no:

if (ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
     HardwareButtons.BackPressed += HardwareButtons_BackPressed;

Utilizamos el método IsTypePresent de la clase estática ApiInformation incluida dentro del namespace Windows.Foundation.Metadata.

NOTA: En la clase estática ApiInformation tenemos métodos para verificar no solo tipos, sino métodos, propiedades, contratos, etc.

ApiInformation

ApiInformation

La verificación se realiza con el nombre completo del tipo en una cadena.

NOTA: Sin duda no es quizás la manera más óptima para realizar la comprobación. Recordad que estamos ante una versión Preview de las herramientas.

Podéis descargar el  pequeño ejemplo realizado a continuación:

También podéis acceder al código fuente directamente en GitHub:

Ver GitHub

Recordar que cualquier tipo de duda o sugerencia la podéis dejar en los comentarios de la entrada.

Más información

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s