Seguridad

Cómo crear tu propio pass del wallet de iOS (Parte 1 de 2)

Los pass de la Wallet de iOS son una representación digital de información referente a tickets o entradas de un evento determinado. Estos passes incorporan ciertos mecanismos que permiten al usuario realizar acciones en el mundo físico, como por ejemplo notificar de una reserva en un hotel, escanear una entrada en un cine o un billete de avión en un aeropuerto. Para permitir realizar estas acciones, los pass pueden estar compuestos por imágenes, códigos de barras o información que puede ser actualizada a través de notificaciones push.

El usuario puede gestionar todos sus pass a través de la aplicación Wallet donde podrá visualizarlos, organizarlos o eliminarlos a voluntad. La tecnología inherente a estos passes se divide en los siguientes componentes:

  • Un formato particular para crear pass
  • Una API Web Service para poder actualizar los pass, implementado en los servidores del desarrollador.
  • Una API para que las apps puedan interactuar con la Wallet.

    PassKit es el framework que recoge estas APIs y permite implementar todo lo necesario para desarrollar los pases. Con este framework y junto a un kit de desarrollo que proporciona Apple podemos generar nuestros propios tickets para almacenar en el Wallet de iOS. Para ello solo es necesario tener una cuenta de desarrollador de Apple y XCode.

    Figura 1: Esquema de funcionamiento
    Introducción al caso
    Hace unos meses, al comprar unas entradas por internet me mandaron adjunto un ticket con extensión .pkpass. Al intentar abrirlo, el fichero no respondía como otros passes que había descargado anteriormente. Normalmente al abrir uno de estos archivos adjunto a un correo, el sistema presenta una ventana modal que permite visualizar el contenido con varias opciones, como la posibilidad de añadirlo al Wallet.  

    Figura 2: Ejemplo de Pass
    Al no responder de esa manera, me hizo sospechar que el pass podría tener un problema, así que decidí destripar el archivo en busca de posibles fallos. Al descomprimir y comprobar en la página de desarrolladores de Apple el formato esperado, no había nada que difiriese a lo indicado en la documentación.

    Composición de un pass
     

    Los pass son creados como paquetes comprimidos con la extensión .pkpass. Todos los recursos utilizados son cargados en el sistema usando las técnicas estándar de localización en paquetes, implementadas en la clase NSBundle. Los elementos principales de un pass contienen los siguientes archivos:
    • background.png -> La imagen que se mostrará como el fondo del pass.
    • footer.png -> La imagen mostrada en la parte frontal del pass, cercano a el código de barras. 
    • icon.png -> El icono del pass. Este icono se mostrará en notificaciones y emails que tienen el pass adjunto o en la pantalla de bloqueo cuando sea necesario mostrarlo.
    • logo.png -> La imagen que aparece en la esquina superior izquierda.
    • manifest.json -> Diccionario JSON en formato clave/valor donde cada clave es la ruta correspondiente al archivo y el valor es un hash en SHA1 de la clave para el archivo. Todos los elementos que aparezcan en el paquete deben estar contenidos en el manifest, a excepción del manifest y la firma.
    • pass.json -> Diccionario JSON que define el pass con un formato que explicaremos posteriormente.
    • signature -> Firma en PKCS #7 del manifest.json.
    • strip.png -> La imagen que se muestra debajo de los campos principales. thumbnail.png -> Una imagen adicional que se muestra en el frontal del pass, puede servir para mostrar un logo de la marca o información adicional.
    Todas las imágenes son cargadas en el sistema siguiendo el estándar de UIImage, por lo que para poder visualizarlas correctamente en todos los dispositivos será necesario crear una versión en alta resolución con el doble de puntos que termine con el nombre @2x.png. En el próximo artículo se verá los ficheros, la modificación y el resultado final.

    Powered by WPeMatico

    Gustavo Genez

    Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.