5 puntos a tener en cuenta al migrar apps a Windows Phone 8

El pasado 5 de octubre, en el evento #wpdevweek, en una de las charlas, vimos los cambios a los que nos podemos enfrentar cuando migramos una app de Windows Phone 7 a Windows Phone 8. Este artículo comenta, a modo de resumen, los 5 puntos que más dieron que hablar.

Migrando una app: El proceso corto

Salvo sorpresas, el proceso de migración de una app de WP7 a WP8 es tan sencillo como ir a nuestro proyecto y hacer click en “Upgrade to Windows Phone 8.0” como se muestra en la imagen:

upgradeButton

Tras la actualización, podemos ver los siguientes cambios:

  • Los ensamblados cambian, pasando de media docena a tan solo tres.
  • El WMAppManifest, que contiene la información de nuestra app, cambia para soportar las nuevas característcas, resoluciones, capacidades, y requisitos.

Por lo demás, la aplicación se mantiene exactamente igual, y si la ejecutamos en nuevo emulador veremos que se comporta de igual manera.

1. El emulador

Lo primero que necesitamos saber del emulador de WP8, es que los requisitos mínimos cambian, ya que ahora la emulación se hace por hardware, utilizando Hyper-V, el sistema de virtualización que lleva usando Microsoft en sus servidores la última media década.

La principal novedad del mismo es que ahora cargamos una edición completa del sistema operativo móvil, con todas las aplicaciones disponibles tal cual nos encontramos un Windows Phone de fábrica. Además podremos emular las nuevas resoluciones de WP8 y dos configuraciones de memoria, una con un límite de 512 MB de RAM, y otra sin este límite.

Para poder ejecutar el emulador necesitaremos un procesador que soporte SLAT (Second Level Address Translation), es decir, cualquier ordenador con un núcleo i3, i5 o i7 de Intel nos valdrá. Si nuestro sistema no soporta el emulador, podemos recurrir a http://developer.nokia.com/Devices/Remote_device_access/ que nos permite probar nuestras aplicaciones de manera remota.

2. Resolución

Otra de las novedades que nos afectan es que tenemos 2 resoluciones más de las que preocuparnos, a la WVGA (480 x 800) se suman las siguientes:

  • WXGA (768 x 1280)
  • 720p (720 x 1280)

La primera conserva la relación de aspecto, pero la segunda la cambia, con lo cual tendremos que ser capaces de detectar este cambio de resolución y actuar en consecuencia. Para ello en MSDN nos proporcionan un código de ejemplo, que se resume en el valor de:

App.Current.Host.Content.ScaleFactor
  • Si este valor es 100, estamos ante WVGA
  • Si el valor es 160, estamos ante WXGA
  • Finalmente, si es 150, tenemos un teléfono con resolución 720p

3. Modelo asíncrono

El modelo asíncrono de WP8 es el mismo que en Windows 8, usando los modificadores async y await, evitando el uso de callbacks que puedan complicar la lógica de nuestra aplicación. Comparemos un proceso síncrono (por tanto bloqueante, y que no debemos permitir):

LongTaskHelper helper = new LongTaskHelper();
helper.RunSync();
sync.Content = "Recibido " + DateTime.Now;

Con la manera de hacer procesos asíncronos hasta ahora, usando callbacks:

LongTaskHelper helper = new LongTaskHelper();
helper.TaskFinished += helper_TaskFinished;
helper.StartRun();
...
callbacks.Dispatcher.BeginInvoke(() =>
{
    callbacks.Content = "Recibido " + DateTime.Now;
});

Hasta finalmente, el mismo proceso usando async/await:

LongTaskHelper helper = new LongTaskHelper();
await helper.RunAsync();
async.Content = "Recibido " + DateTime.Now;

Este modelo nos permite aprovechar la sencillez de la programación síncrona, y la versatilidad de la programación asíncrona. Además, lo podemos usar para Windows 8 y en general con .NET Framework 4.5

4. XNA ha muerto, alternativas

Para aplicaciones WP8 no se permite el uso de XNA, aunque se pueden hacer proyectos WP7 que funcionarán bien en WP8, pero no podremos usar las nuevas características, como el acceso a la wallet, la cámara frontal y el sensor NFC, entre otros.

La alternativa que propone Microsoft es usar DirectX / Direct3D para el desarrollo de juegos, y la comunidad propone el uso de MonoGame, la implementación open-source multiplataforma de XNA.

5. Manteniendo compatibilidad

Existen varias maneras de mantener compatibilidad entre varias aplicaciones WP7 y WP8:

  • Usando enlace de archivos (cuando agregas un fichero existente a un proyecto en Visual Studio, lo puedes agregar como copia o como enlace).
  • Usando compilación condicional, podremos saber si estamos en WP8 con la directiva #ifdef NETFX
  • Usando una Portable Portable Class Library, un componente que es compatible con plataformas como Xbox, WP7, WP8, Windows 8 o .NET Framework 4.5. De esta manera, y usando patrones como MVVM, podemos mantener la lógica en un único punto.

Conclusiones

La migración de WP7 a WP8 puede causar algunos problemas, debido a que hay APIs que cambian, y hay más cosas a tener en cuenta. Por otro lado el mercado va creciendo (un 238% el pasado año) y las nuevas características de los terminales nos pueden dar más capacidades a nuestras apps.

2 pensamientos en “5 puntos a tener en cuenta al migrar apps a Windows Phone 8

  1. Pingback: Materiales del evento: Christmas Windows Phone Sessions, de Windows Phone 7 a Windows Phone 8 | rlbisbe @ dev

  2. Pingback: Desarrollando para Windows Phone 8, muchos errores y algún acierto | rlbisbe @ dev

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