[Windows10] Novedades para desarrolladores 1 de N

Hola a todos!

El pasado 23 de Marzo, Microsoft liberó una primera versión de sus herramientas para desarrolladores de Windows 10. Nos encontramos ante una versión muy temprana de las mismas, hay muchas cosas que hemos podido ver en vídeo que no están disponibles en la versión pública. Así mismo, tienes que estar preparado para pelear con ellas, desde la instalación hasta en el momento de usarlas. Al ser una versión alpha, existen muchos fallos y esquinas que pulir todavía.

Lista de artículos:

Como conseguir instalar las herramientas

En primer lugar, necesitas estar registrado como Windows Insider para poder acceder a todo el software relacionado con Windows 10.

Para poder instalarlas necesitarás unos requisitos mínimos de software:

  • Windows 10 Build 10041
  • Visual Studio 2015 CTP6

Tras tener todo instalado, puedes descargar un ISO de las herramientas o un instalador web, desde la página de herramientas técnicas.

Dada la naturaleza preview, tanto de Visual Studio 2015, como Windows 10 y las herramientas de desarrollo, lo más sensato es que no lo instales todo en tu PC principal. Puedes crear una máquina virtual con Hyper-V, VMWare o VirtualBox sin problema. Con unos 40Gb de espacio reservado podrás instalar Windows 10, Visual Studio 2015 y las developer tools par trabajar con ellas.

Problemas conocidos

Después de trabajar unos días con las herramientas de desarrollo, ya se conocen algunos problemas y sus posibles “workarounds”, cuando existe alguno:

  • La versión actual de Windows 10 mobile que liberó microsoft en febrero no es compatible con estas herramientas, por lo que es imposible desplegar a un dispositivo que tenga esa build pública.
  • Conflicto con el emulador de Android de Cordova tools: El emulador de Android usa la versión 8.0.12484 de XDE para ejecutarse, mientras que las dev tools de Windows 10 instalan la versión 8.0.12513, que no soporta el plugin de Android. Si tienes instalados ambos emuladores, al arrancar el de Windows obtendrás el error: “Failed to load SKU “WP””. Se soluciona desinstalando el emulador de Android de Visual Studio.
  • Por defecto el emulador de Windows 10 mobile usa 2 procesadores, si estás en una máquina virtual, asegurate de asignarle al menos 4, de lo contrario es posible que el emulador no cargue.

Seguro que mientras vayas avanzando en el uso de las herramientas, encuentras nuevos fallos, normal en una versión tan temprana, no olvides usar la herramienta “Windows Feedback” para informarlos a Microsoft. Tras instalar las nuevas herramientas tendrás una opción llamada “Developer Platform”:

001

Un poco de terminología primero…

Antes de continuar  y empezar a ver que podemos hacer con las nuevas herramientas, es bueno que conozcamos algunos nombres nuevos que se presentan con las herramientas:

  • Windows apps. Microsoft quiere que abandonemos “Windows Phone app” o “Windows Store app” para referirnos a las aplicaciones y las empecemos a llamar simplemente “Windows apps”. Vamos a seguirle el juego por ahora…
  • UAP: Windows universal app platform. La nueva plataforma de apps que viene con Windows 10 y que forma parte de Windows OneCore (El core unificado de Windows presente en todas las ediciones de Windows 10).
    • universal app platform se escribe en minúsculas porque no es una marca, es el nombre de la tecnología.
    • UAP es el acrónimo de la plataforma de aplicaciones. No vas a desarrollar un UAP. Vas a desarrollar una app Windows, que puede ejecutarse sobre el UAP.
  • Familias de dispositivos. Los distintos tipos de dispositivos sobre los que UAP funciona: Smartphones, tablets, desktop, IoT…

Con estos puntos explicados… vamos a jugar con las herramientas!

Nuestra primera Windows app

Ya es hora de empezar a ver un poco de código de verdad. Tras arrancar Visual Studio 2015 con las herramientas instaladas, en la ventana de nuevo proyecto, encontraremos un nodo llamado Windows 10, que contiene los nuevos proyectos:

image

No encontramos muchas sorpresas aquí:

  • Blank application (UAP): Una aplicación vacia que hace uso de la universal app platform.
  • Class library (UAP): Un proyecto de librería de clases.
  • Windows Runtime Component (UAP): un proyecto que nos permite crear un componente WinRT.
  • Unit Test App (UAP): Una aplicación para ejecutar tests sobre nuestra aplicación.

Donde veremos cambios es al crear un nuevo proyecto del tipo Blank application. Una vez creado veremos que ya no tenemos la estructura de proyectos que se creaban en  Windows 8.1, con un proyecto Windows Store y otro Windows Phone, más un proyecto Shared:

image

En Windows 10, tendremos un ejecutable para todos los dispositivos que soportemos, por lo que solo tendremos un proyecto y no necesitaremos usar el proyecto shared al estilo de Windows 8.1.

Al tener un solo proyecto para las distintas familias de dispositivos, ¿Como podemos usar features de una familia en concreto? Microsoft a resuelto esto mediante la creación de SDKs de extensión por familia de dispositivo. Para ver las extensiones disponibles, haz click derecho sobre el nodo References de tu proyecto y dentro de la pantalla “References Manager” ve al nodo “Universal app platform > Entensions”:

image

Pero, ¿Qué pasa si ejecutamos la app en un dispositivo que no soporta una extensión en concreto? Nuestra aplicación fallaría. Para evitarlo, siempre que usemos una API parte de un SDK de extensión, debemos comprobar primero si dicha API está disponible.

Un ejemplo muy sencillo y que tendrás que usar en tus apps, si o si, si quieres que se ejecuten correctamente en un smartphone: La gestión del botón atrás.

Las APIs necesarias, se encuentran en el SDK de extensión “Windows Mobile Extension SDK” que debemos referenciar en nuestro proyecto. A continuación, en el archivo App.xaml.cs debemos añadir el siguiente código:

using Windows.Phone.UI.Input;

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;
    HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    //TODO: Back button management
}

En el emulador de Windows Phone, funcionará perfectamente. Pero si intentamos ejecutar la app en Windows 10, fallará porque no encontrará el API. Para evitar esto, tenemos que comprobar primero si el API está disponible o no:

using Windows.Phone.UI.Input;
using Windows.Foundation.Metadata;

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;
    if (ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
    {
        HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    }
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    //TODO: Back button management
}

Se que muchos os estaréis llevando las manos a la cabeza, yo incluido, por tener que usar el full qualified name… en un string. No hay nada más proclibe a errores que esto. Esperemos que reciban todo nuestro feedback y lo cambien por algún tipo de enumerado o constante que nos evite plagar nuestro código de “magic strings”.

Fundido a negro…

Y con esto llegamos al final de este primer artículo sobre Windows 10 para desarrolladores. Pronto una nueva entrega. Tenemos mucho de lo que hablar: AdaptativeVisualStates, Device families, cambios en XAML…

Puedes seguir los ejemplos que vaya publicando en este repo de GitHub exclusivo para Windows 10.

Un saludo y Happy Coding!

 

[XAMARIN.FORMS] Preview de Xamarin.Forms para Windows XAML

sticker-with-textPicture1dotnetconf-logo-300x290

El 19 de Marzo pasado, James Montemagno junto con Miguel de Icaza y Scott Hanselman presentaron durante la DotNetConf 2015 la versión preview de Xamarin.Forms para Windows Phone 8.1 y Windows Store. Puedes ver el video de la presentación en Channel9.

Este es un anuncio largamente esperado. Hasta ahora, Xamarin.Forms solo soportaba Windows Phone 8.0, lo que en ciertas ocasiones evitaba poder usarlo.

Aunque todavía está en modo preview, ya nos permite jugar con lo que vendrá en un futuro y empezar a añadir aplicaciones universales windows a nuestros proyectos Xamarin.Forms.

Probando la nueva preview

Para comenzar, necesitaremos crear un nuevo proyecto de Xamarin.Forms desde Visual Studio, en su versión Portable:

image

A continuación, aunque no es totalmente necesario, es recomendable actualizar las librerías de Xamarin.Forms a la última versión disponible. Para ello, solo tendremos que hacer click derecho sobre la solución en el explorador de solución y escoger la opción “Manage NuGet Packages for solution…”. Tenemos que cambiar el canal de “Stable only” a “Include prerelease”. En Updates veremos nuevas versiones de Xamarin.Forms y Xamarin Support Library y un botón “Update All”:

image

Tras tener la última versión de nuestras librerías para Xamarin.Forms, es hora de incluir el soporte a Windows Phone 8.1 y Windows Store.

Para ello, primero necesitamos añadir un nuevo proyecto universal Windows a nuestra solución Xamarin.Forms. Una vez que lo tengamos, podemos eliminar el proyecto de Windows Phone 8 que Xamarin.Forms incluye por defecto, ya no lo vamos a necesitar más.

Tras esto, tenemos que hacer click derecho sobre la solución y de nuevo lanzar el gestor de paquetes de NuGet. Buscaremos un paquete llamado Xamarin.Forms.Windows. Como estamos trabajando con una preview, tendremos que indicarle a NuGet que busque en software prerelease también:

XFW

Una vez seleccionado, NuGet nos preguntará en que proyectos queremos añadirlo. Por defecto nos mostrará los proyectos universales seleccionados:

xfw2

Tras aceptar, ya tendremos las librerías necesarias para que nuestro proyecto universal soporte Xamarin.Forms. Pero todavía nos quedan dos pasos, antes de empezar a escribir código.

Por defecto, la librería portable que crea Xamarin.Forms, no soporta Windows Phone 8.1 (Windows XAML):

image

Tenemos que añadir el soporte para Windows 8.1 y Windows Phone 8.1 y eliminar el soporte a Windows Phone Silverlight 8:

image

Al hacer esto, nos avisará de que al presionar OK se recargará el proyecto. Tras la recarga, ya podremos añadir una referencia al proyecto Portable en nuestros proyectos Windows y Windows Phone 8.1 (universal). En este punto, si compilamos, todo debería compilar sin problemas.

Para dejar todo funcionando, necesitamos indicarle a nuestra app universal que debe inicializar Xamarin.Forms, al igual que lo hacemos en el resto de proyectos, en la página principal.

Iniciando Xamarin.Forms en un proyecto Windows Universal

En el archivo App.xaml.cs, en el método OnLaunched, vamos a iniciar el sistema de Xamarin.Forms:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame == null)
    {
        rootFrame = new Frame();
        rootFrame.CacheSize = 1;

        //Initialize Xamarin.Forms
        global::Xamarin.Forms.Forms.Init(e);

        Window.Current.Content = rootFrame;
    }

En el archivo MainPage.xaml del proyecto Windows, tenemos que cambiar el tipo de la página, para usar el tipo WindowsBasePage definido en los ensamblados de Xamarin.Forms:

<forms:WindowsPage
    x:Class=“XamarinForWinStore.WinUniversal.MainPage”
    xmlns:forms=“using:Xamarin.Forms.Platform.WinRT”

En el code behind de esta misma página, tenemos que quitar la herencia de la clase Page y añadir una llamada a LoadApplication en el constructor:

public sealed partial class MainPage
{
    public MainPage()
    {
        this.InitializeComponent();

        this.NavigationCacheMode = NavigationCacheMode.Required;

        LoadApplication(new XamarinForWinStore.App());
    }
}

Repetimos el mismo proceso en el proyecto Windows Phone, solo que esta vez usaremos WindowsPhonePage en lugar de WindowsPage.

Y ya estamos listos!

Si marcamos el proyecto Windows Store como proyecto de inicio y ejecutamos, veremos que nos saludan Xamarin.Forms:

image

Todavía falta camino…

Esta preview es un gran avance y nos permite empezar a jugar con Xamarin.Forms en más plataformas, pero está lejos de estar completa. Algunas de las cosas que faltan:

  • Mapas: No están soportados en esta versión.
  • GridView: El control estrella de Windows Store, no está soportado.
  • Controles: No todos los renderizadores de controles están completos en esta versión.
  • Recursos: WinRT no permite cargar recursos desde un ensamblado diferente a no ser que lo marquemos correctamente con ReflectionPermission. Esto no es compatible con PCL.

Como decía, todavía falta camino por recorrer, pero es un gran paso en la dirección correcta. ¿Qué nos deparará el //Build 2015? Estaré allí en persona para contaros todas las novedades!

Como siempre, tenéis disponible el código en GitHub para que podáis empezar a trastear con él.

Un saludo y Happy Coding!

 

[EVENTO] WPSUG: Porqué no has terminado, cuando has terminado tu app

Hola a todos!

Logo-256

WPSUG Vuelve a la carga con un nuevo Hangout en directo. En esta ocasión, además de los sospechosos habituales, Rafa Serna, Javier Suarez, Santiago Porras y un servidor, contaremos con la presencia de Vanessa Estorach de e-growing, experta en ASO y “Mobile Sensei”

Este hangout va a estar centrado en el trabajo que viene cuando hemos terminado de desarrollar nuestra app. Promoción en las store, optimización de los resultados… como hacerla destacar y obtener de ella el mayor beneficio posible.

EL evento tendrá lugar el Jueves 26 de Marzo, a las 19:00 hora peninsular de España (GMT+1):

  • 13:00 en Colombia
  • 12:00 en México Centro
  • 13:30 en Venezuela
  • 15:00 en Chile continental

La url para ver el vídeo es esta:

https://www.youtube.com/watch?v=dspt9kyVLO8

Para los más organizados, os he creado una cita de calendario que podéis descargar aquí para que tengáis el evento bien localizado (y con recordatorio!!)

Un saludo y Happy coding!

[MATERIALES] .NET Spain Conference 2015: Introducción a Xamarin.Forms

Hola a todos!

El pasado 28 de Febrero, junto a Rafa Serna, tuve la suerte de poder dar una charla sobre Xamarin.Forms 1.3 en la .NET Spain Conference 2015.

WP_20150228_11_50_06_Pro

Aquí tenéis los materiales! Las Slides sobre las novedades de Xamarin Forms 1.3:

Y en GitHub tenéis el código de las demos sobre converters, animaciones, behaviors y triggers:

 ver-github1

Un saludo y Happy Coding!