ios-8-tim-cook

Extensiones de aplicaciones en iOS8 y OS X por @jaiversin

En el WWDC de este año, Apple destapó varias cartas con las que le apunta a continuar creciendo y fortaleciendo su ecosistema.

Por un lado está la integración entre dispositivos y/o sistemas operativos (iOS – OSX Yosemite), en la que están poniendo gran empeño. Esto es, la aplicación del término “continuidad” o el poder empezar una tarea en el iPhone y poder continuarla de forma transparente en el iPad o en el Mac (mejor conocido en los bajos mundos como ubicuidad) o simplemente escoger desde qué dispositivo quiero recibir una llamada.

wwdc-apple-ios-8

Por el otro lado, está la integración entre aplicaciones o extensiones, que a través de un API nos permite tener funciones de nuestra aplicación para ser usadas desde otras aplicaciones.

Los tipos de extensiones que Apple pone a nuestra consideracion son:

  • Share (iOS and OS X) – Postear a un sitio web o compartir contenido con otros.
  • Action (iOS and OS X) – Manipular o ver contenido dentro de el contexto de otra aplicación.
  • Photo Editing (iOS) – Editar una foto o video dentro de la aplicación de Fotos
  • Today (iOS and OS X) – Notifications Center Widgets para mostrar actualizaciones o tareas rápidas dentro de la vista de Hoy
  • Storage Providers (iOS) – Selecionar un documento del conjunto de documentos a los cuales se tiene acceso desde la aplicación actual.
  • 3rd Party Keyboards (iOS) – Para reemplazar el teclado del sistema con un teclado personalizado (podemos usarlo en todas las apps!)

Por ejemplo, imaginemos que tenemos una aplicación hipotética para tomar fotos, aplicarle filtros y postearlas (llamémosla postagram 😉 ). Creando una extensión, podríamos exponer una parte de la aplicaicón para aplicar filtros a nuestras fotos directamente desde el carrete de fotos de iOS y postearlas, sin necesidad de abandonar el carrete ni abrir nuestra aplicación.

Otro caso de uso (lo tomé “prestado” del keynote) sería una aplicación en la que escribimos texto y ésta nos da la traducción en Galáctico Básico Estándar. En este caso creamos una extensión para nuestra aplicación de tipo Action que nos permita recibir una porción de texto (selección) de una página presentada dentro de Safari y tener la traducción sin abandonar el navegador (este tipo de extensión nos deja modificar el árbol DOM de la página y presentar el resultado “in-line”).

Si tenemos, por ejemplo, una aplicación que muestra los últimos marcadores de los partidos del mundial, podríamos crear una extensión tipo Notification Center Widget para exponer de forma rápida y simplificada los marcadores que el usuario seleccione dentro de las notificaciones del día de hoy.

Algunos puntos a tener en cuenta cuando desarrollemos nuestras extensiones:

  • Las extensiones son diferentes de la aplicación en sí: Aunque para distribuir una extensión se debe incluir dentro de una app, cada extensión es un binario separado que corre independiente de su app. Por ello, para crear una extensión, hay que agregar un “Target” a la aplicación.
  • El ciclo de vida y el ambiente de las extensiones es diferente al del app: El contexto de la extensión está dado por la aplicación “host” (aplicación que permite que un usuario seleccione una extensión). Ésta misma es la encargada de terminar el ciclo de vida cuando la extensión envía una solicitud en respuesta a la acción del usuario (dando un corto tiempo de terminar tareas en background).
  • Comunicación: Mientras la extensión se está ejecutando, sólo tiene comunicación directa con la app “host”. No hay comunicación entre la extensión y la app que la contiene (normalmente, ni siquiera está corriendo mientras la extensión se ejecuta). Además, la app y la app “host” no se comunican de ninguna manera.
  • Datos: La extensión y la app pueden acceder a datos en contenedores compartidos definidos. (hay que tener cuidado con la sincronización entre los datos presentados/modificados por las extensiones y las app que las contienen).
  • Memoria: Los límites para ejecutar extensiones son significativamente menores a los limites impuestos para una app en ejecución. Algunas extensiones pueden tener límites inferiores de memoria que otras, por ejemplo los widgets, debido a que los usuarios pueden tener múltiples en ejecución al mismo tiempo.

Las posibilidades que nos abre Apple por medio de las extensiones son infinitas y sólo limitadas por nuestra capacidad de imaginar (so, sky is the limit).

Para más información, aquí podemos ver la guía de programación de extensiones.

Acerca de Jhon Jaiver López

Desarrollador iOS, graduado de la Universidad del Quindío con experiencia en arquitectura de software y desarrollo en distintos lenguajes de programación.

Share this:

Leave a comment