Home » Reseñas » iOS 9, novedades para desarrolladores de apps y juegos
iOS 9

iOS 9, novedades para desarrolladores de apps y juegos

16 de septiembre de 2015, 19:00 horas de España, 10:00 de la mañana hora del pacífico. La hora en que normalmente se inician las keynotes de Apple y hora elegida para el lanzamiento de la versión final para usuarios de iOS 9.0, la última versión del sistema operativo móvil de Apple que marca un punto de inflexión muy necesario en cuanto a estabilidad, funcionamiento, capacidad y rendimiento. La versión que viene a solucionar los problemas que ha supuesto para muchos usuarios sus dispositivos desde el cambio de diseño visual de iOS 7.

Una plataforma de cuatro componentes

iOS 9 es el primer paso de un concepto de plataforma unificada que Apple ha lanzado este año. Estamos hablando de cuatro sistemas operativos que serán una realidad este 2015: iOS 9, OS X 10.11, watchOS 2 y tvOS. Cuatro sistemas que convergen en una única plataforma de librerías y componentes, la mayoría comunes a todos ellos, que permiten compartir código y realizar desarrollos multi-plataforma más eficientes.

Y Xcode 7 es la herramienta para sacar partido a todas ellas, una herramienta que además de ser completamente gratuita a través de la tienda de aplicaciones Mac App Store (disponible el mismo día 16 junto a iOS 9), incluye todas las herramientas necesarias para desarrollar apps y juegos 2D y 3D para todos estos sistemas, simuladores de los mismos para probar los desarrollos y, lo que es más importante, a partir de esta versión la posibilidad que cualquier desarrollador con una cuenta gratuita de developer en Apple pueda probar sus desarrollos directamente en sus dispositivos iOS, sin necesidad de tener una cuenta de pago ni realizar complicadas configuraciones. Bastará que la primera vez que ejecute con su iPad, iPhone o iPod Touch conectado al dispositivo responda a la pregunta de si confía en el contenido del desarrollador X (donde X es nuestro nombre).

Platforms

Este simple hecho, abre las puertas al desarrollo nativo de apps para sistemas Apple, tanto de escritorio, móvil, reloj inteligente o TV, para todos y cada uno de los usuarios del sistema Mac OS X, con tan solo tener un dispositivo y ganas de aprender. Una gran oportunidad, sobre todo para jóvenes estudiantes o gente que empieza en el mundo del desarrollo.

Y no es la única novedad, pues ahora ya existe un único programa de pago para desarrolladores que engloba estas cuatro plataformas, de manera que con una sola cuenta y una sola firma como entidad de desarrollo, se pueden crear y publicar en las correspondientes tiendas de apps, desarrollos para iOS, OS X, watchOS o tvOS.

App Thinning, el cambio de infraestructura más importante

Sin duda, la principal novedad de cara al desarrollo y que afecta directamente a los usuarios (que aun no son conscientes de este gran cambio) es App Thinning de Xcode 7: un sistema de control de recursos y componentes para aplicaciones totalmente revolucionario.

App Thinning

Si hemos creado una app que tiene todos los elementos necesarios para soportar todos los dispositivos iOS, desde el iPhone 4s hasta el iPad de Retina o incluso el futuro iPad Pro, en Xcode hasta ahora creábamos un único fichero iPhone Application (o .ipa) que incluía tanto el binario de 32 como de 64 bits, así como todas las librerías que en el momento de la compilación están disponibles para el sistema en nuestro Xcode y que usemos (entre ellas la propia librería estándar de Swift, si la usamos) y el conjunto de gráficos correspondiente a todos y cada uno de los tipos de dispositivos que soporta nuestra app así como iOS 9.

Esto supone que un usuario con un iPhone 5, por ejemplo, tiene en su aplicación multitud de elementos gráficos, binarios, de librerías y demás que no le sirven absolutamente para nada más que ocupar espacio.

App Thinning cambia este paradigma: ahora podemos clasificar los recursos gráficos de nuestra aplicación por dispositivo y se generará un código intermedio o bitcode que es subido a Apple para su aprobación. Pero no se incluye librería alguna de las que usamos: solo el bitcode y los recursos etiquetados convenientemente para que Apple sepa qué dispositivo usará cada set de los mismos. De esta forma, cuando un usuario se descarga nuestra app, la App Store enviará un binario creado por ella donde incluirá las últimas versiones de todas las librerías que use esa app, optimizadas y creadas para cada dispositivo en función de sus capacidades y componentes, así como solamente los recursos que la app usará, descartando aquellos que no son del dispositivo en que se ha bajado.

App Slicing

Unido a esto, se suman los recursos bajo demanda, una forma de crear paquetes de recursos para las apps que estarán disponibles online para ser descargados en el momento que la app los necesite, que no tiene por qué ser tras su primera instalación. Como, por ejemplo, un paquete de niveles de un juego una vez hemos pasado los primeros del mismo o paquetes de guías de una aplicación de turismo (por poner dos ejemplos concretos).

Aquellos paquetes de datos que ya no sirvan a la aplicación (como por ejemplo, los que puedan pertenecer a un tutorial de nuestra app o juego, que solo se ve una vez al comienzo) podrán quedar marcados como descartables y cuando el dispositivo requiera más espacio, se borrarán. Incluso, habrá paquetes que se podrán marcar para caducar pasado un tiempo en que no se acceda a los mismos (como la guía de una ciudad que solo usamos una vez cuando vamos y luego no volvemos a utilizar).

La combinación de todos estos elementos, denominados App Slicing, On Demand Resources y Bitcode, reducirán drásticamente el espacio ocupado por las apps y permitirán una mejora a este respecto muy importante, así como en el propio rendimiento de las mismas al tener aquellos elementos optimizados para el sistema que ejecuta la app. Y mejora el tiempo de carga y el ancho de banda consumido, usando solo aquello realmente necesario.

Cambios en el desarrollo

iOS 9 no solo incorpora estos cambios importantes: Apple ha incluido un nuevo módulo de compresión de datos, dentro del propio código, basado en algoritmos lzfse, mucho más eficientes que los actuales zlib, y que suponen una mejora de hasta 3 veces en velocidad y con mayor ratio de compresión de contenidos.

En la forma de controlar la forma en que el dispositivo consume energía, también hay cambios importantes que afectan al rendimiento y funcionamiento de las apps y que hemos de tener en cuenta: el modo de baja energía que se activa cuando queda un 20% de carga, reduce el brillo de la pantalla, reduce la velocidad de la CPU y hace que el sistema vaya más lento, parando además cualquier tipo de proceso en segundo plano que pueda consumir más energía, como el refresco en background de datos de apps. Y también, por la noche, si ponemos el dispositivo con la pantalla hacia abajo, las notificaciones tanto sonoras como visuales no se mostrarán al usuario, como una especie de modo “No molestar”.

Pero sin duda, uno de los cambios más importantes son los que se refieren al transporte de datos por red: iOS 9 no aceptará ninguna aplicación que se comunique a través de HTTP sin encriptación. A partir de ahora será obligatorio realizar una conexión que cumpla con un certificado válido TLS 1.2 y se prohibe el uso de ningún tipo de API de conexión de red de terceros que no use la librería por defecto de iOS NSURLSession. De esta forma, se obliga a unas buenas prácticas de seguridad a cualquier app que use la red como forma de funcionar, tanto esporádica como continua.

Transport

Igualmente iOS 9 y el resto de sistema darán prioridad al uso de IPv6 dejando atrás el uso de la versión 4. De esta forma, no solo se obliga al uso de los frameworks propios de Apple para red, si no que se prohibe el uso de APIs especificas que usen IPv4 o incluir direcciones en dicho protocolo directamente en la app.

iOS 9 da un paso importante en la integración de localizaciones extranjeras, e incorpora métodos para crear apps e interfaces para dispositivos que tenga una forma de navegación inversa, es decir, de derecha a izquierda a la hora de navegar y leer. Tenemos un nuevo método UIView.userInterfaceLayoutDirectionForSemanticContentAtribute() que nos permitirá saber y configurar la dirección en que navegará o funcionará nuestra app para contextos internacionales diferentes al estándar de izquierda a derecha.

Otra gran novedad es como se asocian aplicaciones a través de enlaces universales: tanto el correo, la web o programas de mensajería, son capaces de enviar contenido que representa un enlace a una app que tengamos en el sistema. En este caso, podemos registrar tipos de enlaces universales unidos a nuestra app para que cuando el usuario pulse, se nos envíe directamente a nuestra app en un contenido concreto. Solo tenemos que registrar el enlace dentro de NSUserActivity a través del método application:continueUserActivity:restorationHandler: para que el sistema genere una llamada a nuestra app a través de un enlace y, a su vez, un enlace de retorno que el sistema sitúa en la parte superior izquierda y que permite ejecutar el restorationHandler: cuando el foco vuelve a nuestra app.

Búsquedas y multi-tarea

Otra de las importantes novedades es la búsqueda en aplicaciones. Ahora iOS puede contextualizar el contenido de nuestra app y buscar en dicho contexto directamente. A través de la API CoreSpotlight, podemos registrar nuestro contenido y los índices del mismo para decir al sistema cómo tiene que buscar los contenidos. También podemos registrar a través de NSUserActivity los contextos y contenidos de nuestra app para enseñar al sistema cómo buscar y que luego será usado por Siri en sus sugerencias.

De esta forma, una app de mensajería dejará buscar al sistema entre los mensajes que tiene o una app de correo diferente a Mail permitirá buscar correos directamente desde la búsqueda de iOS y cuando se pulse en el resultado, se permitirá abrir directamente el dato buscado en la app correspondiente o ejecutar acciones concretas como una canción encontrada en Spotify que permita iniciar su reproducción sin necesidad de entrar en la app a través de un botón de Play embebido en el resultado.

Multitasking

En el caso que tengamos un iPad Air 2 o iPad Mini 4 con 2GB de RAM o un iPad Pro, podemos usar la multitarea y eso influye en nuestras apps. En el caso de los iPad Air o Mini, la aplicación puede verse al 25% como app invitada (al 75% la app maestra) o al 50%/50%. En ambos casos, la forma de cumplir a nivel de diseño con esta nueva forma de mostrar apps se basa en usar una interfaz adaptativa. De esta manera, mezclamos el concepto del auto-layout que coloca nuestros elementos de interfaz de manera automática, respetando las reglas y restricciones que hayamos definido, con las clases de tamaño que permiten cambiar el tamaño de elementos en función de lo que ocupan los contenidos.

Para esto debemos usar un storyboard como elemento de arranque de nuestra app y soportar todas las orientaciones con la misma. Cumpliendo estos modelos de diseño y sin que necesitemos hacer mucho más, nuestra app funcionará sin problema en el modo multitarea.

Un iPad Pro, en modo 75% muestra la app tal cual es y en modo 50% estrecha menos la app. Por otro lado, si tenemos registrados los enlaces universales tal como hemos explicado y los contenidos de nuestra app, podremos unir las funciones de una de las apps abiertas con la otra y conseguir una implementación de ambas fluida y transparente al usuario.

Picture in Picture

De igual forma, si nuestra app reproduce vídeo de algún tipo, podemos usar el nuevo AVPictureinPictureController que permite tener una ventana de vídeo suspendida sobre la interfaz, que pertenezca a nuestra app y que podremos seguir controlando como si la misma no estuviera compartiendo el funcionamiento con el propio sistema. O podemos usar un WKWebView para crear una ventana interactiva de contenido web que afecte a aplicaciones fuera de la misma cuando se pulsa o navega en ella.

El rendimiento es el foco

Como hemos visto está todo muy enfocado en la optimización, la mejora de recursos, de consumo de los mismos y en dar herramientas que mejoren aun más el sistema. Herramientas que podemos usar desde ya en nuestras apps para adaptarnos a esta nueva versión.

Y por supuesto, no podemos olvidarnos que si desarrollamos en Swift, Xcode 7 usa solo Swift 2, para lo que tendremos que adaptar nuestras aplicaciones a esta nueva versión del lenguaje, en parte usando el conversor de Swift 1.2 a 2.0 y en otra parte, manualmente. Pronto haremos un tutorial sobre ello. Aunque mientras podemos repasar sus novedades y los cambios que ha ido teniendo en el transcurso del lanzamiento de las versiones de prueba.

Así que si no tienen ya Xcode 7 bájenlo, prueben con él, hagan apps y juegos de la mejor manera que sepan (porque además ahora ya se puede probar en los dispositivos en todos los casos) y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

SwifterSwift, la colección de extensiones definitiva para Swift 3

SwifterSwift es la colección de extensiones número 1 de GitHub que ha convertido a su creador en una estrella del desarrollo. Conoce sus funciones y la historia de su creador quien se re-inventó huyendo de la guerra en menos de 2 años convirtiéndose en un experto en Swift y otros muchos lenguajes y sistemas. Un ejemplo de superación personal y una librería (resultado de su excelente trabajo) de gran calidad para nuestro trabajo del día a día.