Home » Análisis » Novedades en iOS 10 de Cocoa Touch y UIKit (III)
iOS 10 Cover

Novedades en iOS 10 de Cocoa Touch y UIKit (III)

Otra semana más, seguimos el repaso a todas las novedades de UIKit en iOS 10, a las que iremos añadiendo algunas de las novedades que se vayan incluyendo en las subsiguientes betas, como la recién lanzada beta 2 de la que hablamos aquí. Si quieres estar al tanto de todos los cambios os invitamos a leer la primera parte de esta serie de artículos aquí y la segunda pulsando aquí.

UIViewPropertyAnimator

iOS 10 estrena una nueva API de animación para UIKit que permite increíbles nuevas posibilidades. La esencia es que con esta nueva librería, las animaciones en UIKit pasan a tener un timeline (como si fuera una película de iMovie) donde podemos realizar animaciones ininterrumpidas, que podremos poner al revés, donde tendremos nuevas opciones de tratamiento de tiempo y curvas de reproducción, completamente dinámicas. Podremos añadir animaciones en tiempo real y, además, nos permitirá incluso ver previos de depuración de la animación como los cuadros que vemos en un programa de edición.

Es tan simple como crear un objeto UIViewPropertyAnimator donde especifiquemos una duración y un parámetro de curva de reproducción. Una vez definido el objeto, le añadimos las animaciones que queramos y luego invocamos su método .startAnimation(). Nada más simple.

Como vemos en el ejemplo, tenemos un objeto squareView en nuestro proyecto al que cambiamos el centro a una nueva posición dentro del closure de addAnimations. Este dato CGPoint es la posición final que queremos para el objeto, por lo que se aplicará una animación de traslación del mismo en la duración especificada en el valor de duration usando la curva de tipo .easeInOut de tipo cúbico que está indicado en la constante timing.

Otra gran ventaja de este nuevo sistema, es que es plenamente interactivo. El usuario, si así lo escogemos, puede tocar en mitad de la animación, mover el timeline hacía atrás, cambiar la posición, anular la animación o restaurarla hasta que se complete. Una función muy interesante y con grandes posibilidades de interacción para nuestras apps.

Abriendo aplicaciones

El manejo de objetos openURL ha mejorado en este nueva versión de iOS 10. Cuando nosotros estamos en nuestra app y queremos mostrar contenido de otra a través de enlaces universales, en ocasiones puede suceder que el usuario no tenga resueltos estos enlaces o no tenga la app que le corresponde. Por este motivo, la integración se ha convertido en asíncrona con un handler de completado y así nos permite detectar si existe una app en el sistema para resolver la petición que estamos realizando.

En caso que no exista una app para ello, podemos quedarnos en nuestra propia app y no salir a ningún sitio con lo que ahorramos un paso innecesario al usuario.

Como podemos ver, es tan simple como validar el dato que recoge el closure y así no hará que salgamos de nuestra app y podemos intentar mostrar la información por nosotros mismos.

Core Data

La base de datos de persistencia de objetos de Apple también ha mejorado para iOS 10. Una de las mejoras más interesantes es la denominada generación de consultas. Una función que nos permite unir elementos a consultas que a su vez estén asociadas a versiones de la base de datos. De esta forma, si tenemos, por ejemplo un menú en nuestra app cuyas opciones se leen desde Core Data, podemos unir este menú a una consulta generada (como si fuera una vista de base de datos) y elegir en ella incluso qué versión de la base de datos queremos usar para trabajar con ello.

Así, tendremos libertad para cambiar la fuente de datos en cualquier momento, entre diferentes versiones de la base de datos, y pasar a producción un cambio cuando realmente nos interese aunque ya estemos trabajando con una versión más nuevo del modelo de datos.

La otra gran novedad son los pools de conexiones a la base de datos. Se han hecho grandes mejoras permitiendo una concurrencia de datos mucho más amplia, de varios procesos de lectura simultáneos y uno de escritura.

CloudKit

En iOS 10, CloudKit mejora sustancialmente, de forma que ahora tenemos una nueva zona de trabajo aparte de la pública y la privada por usuario. Esta nueva zona es de datos compartidos entre usuarios, que nos permitirá especificar datos privados de un conjunto de usuarios de iCloud que tendrán una misma zona donde guardar sus datos.

CloudKit Share

La primera ventaja de este tipo de funcionalidad es la del trabajo colaborativo. Ahora, de una manera simple con CloudKit, podremos ofrecer en nuestra app trabajo colaborativo para una app de contenido como un editor de notas, de documentos… Al tener un único espacio de trabajo, todos los usuarios invitados a este editarán el contenido y el resto verá reflejado en tiempo real los cambios, exactamente igual que trabajar con Pages en un entorno colaborativo de trabajo en tiempo real.

Para controlar este flujo existe un nuevo objeto llamado UICloudSharingController que permite gestionar fácilmente el flujo de invitaciones a nuestro recurso, como la aceptación, rechazo, etc.

El sistema es el que se encarga de generar las interfaces necesarias y gestionar, como hemos dicho, todo el flujo derivado de las invitaciones a usar un documento compartido.

NSUserActivity

El objeto NSUserActivity, a grandes rasgos, es aquel que captura el estado actual de nuestra app y permite usar opciones como el buscador spotlight o las opciones de handoff que nos permiten continuar nuestras tareas de un dispositivo a otro o incluso al ordenador.

Ahora, se ha añadido una nueva propiedad llamada mapItem al que podemos asignar una localización de MapKit. Si asignamos este valor porque estamos en una app que trabaja con localización, estamos indicando la actividad del usuario y cuando este salga de la app y vaya a otra donde se le pida un dato de texto relacionado con una localización, la nueva app podrá saber este dato y darnos un resultado más acorde (en el texto predictivo) a lo que podemos buscar.

Por ejemplo, imaginen que buscamos dónde está la tienda de pizzas a domicilio más cercana a nuestra casa. La buscamos en mapas y cuando la tenemos localizada, para saber a qué tienda tenemos que encargar el pedido, salimos y nos vamos a la app que nos permite encargar dicha pizza. A la hora de pedirnos el dato de la tienda, la nueva app puede saber que hemos consultado la dirección cercana a su tienda en otra y darnos directamente como opción predictiva la tienda más cercana (que es justo lo que queríamos).

Este objeto NSUserActivity es el que implementa la mayoría de elementos de información sobre la actividad del usuario y su uso de las mismas entre apps. Y es el objeto usado por las nuevas opciones de sugerencias proactivas de iOS 10, de las cuales hablaremos con detenimiento en un futuro artículo.

Conclusiones

Como vemos, quien diga que iOS 10 tiene pocos cambios, es que realmente no conoce el alcance de los mismos. De la misma forma, cuando iOS 10 llegue, pocas o ninguna de las más potenciales funciones serán usadas por nadie hasta pasados meses y las apps se actualicen convenientemente.

Os invitamos a probar todo esto de lo que hablamos y nos vemos la próxima semana. Un saludo 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

Swift 4 Cambios

Los cambios en Swift 4 que harán tu código incompatible: 3 por ahora

El cambio de versión de Swift 3 a 4 es algo que provoca miedos e inseguridades. La memoria del pesado cambio a la versión 3 nos trae malos recuerdos, pero nada más lejos de la realidad en este caso. A fecha 31 de mayo, solo 3 cosas harán nuestro código incompatible. Descúbrelas en este análisis y cuales serán las simples soluciones en caso que esto nos afecte.