Oct. 7, 2019

Compatibilidad con Multiventana en la app para iPad

Desarrollo nativo para iPadOS

El mes pasado Apple lanzó iPadOS, el primer sistema operativo dedicado para iPad. Se diferencia de iOS con su compatibilidad con la pantalla más grande del iPad, incluyendo ventanas multi/pantalla dividida. Desarrollo apps y era hora de aprovechar estas nuevas posibilidades que ofrece iPadOS.

Desde 2016 he estado usando iPad como mi computadora principal, es una gran computadora móvil. Sin embargo, el sistema operativo es diferente al de la mayoría de las computadoras. iPadOS está basado en iOS, que se ejecuta en el popular teléfono móvil de Apple, el iPhone. Esto hace que el iPad sea un poco diferente en el uso diario debido a la forma en que ejecuta las aplicaciones.

iPad Pro como mi computadora principal conectada a una terminal usando Blink
iPad Pro como mi computadora principal conectada a una terminal usando Blink

Debido a las raíces de teléfono inteligente de iPadOS, el sistema operativo maneja las aplicaciones como lo hace un iPhone: las aplicaciones se ejecutan en pantalla completa enfocadas en una sola tarea. A la gente le encanta el iPad por esto, ya que es una excelente manera de mantener la mente concentrada en una sola cosa.

Soporte para múltiples ventanas en iPad

Hay situaciones en las que ejecutar múltiples ventanas simultáneamente puede ser muy útil, y aquí es donde Apple mejoró iPadOS cuando introdujo la compatibilidad para ejecutar aplicaciones en paralelo.

Soporte para múltiples ventanas en iPad, ejecutando dos instancias de la misma aplicación a la vez
Soporte para múltiples ventanas en iPad, ejecutando dos instancias de la misma aplicación a la vez

Incluso si está trabajando en una sola tarea, tener soporte para múltiples ventanas es muy útil, ya que le permite ejecutar múltiples instancias de la misma aplicación a la vez. Esto permite diferentes casos de uso en los que puede ver y editar contenido desde diferentes ángulos. Como comparar dos meses diferentes en su agenda, editar un documento largo o mirar el mapa a diferentes escalas simultáneamente.

Comparando diferentes meses en la aplicación de calendario
Comparando diferentes meses en la aplicación de calendario
Mirando el mapa a diferentes escalas simultáneamente
Mirando el mapa a diferentes escalas simultáneamente

Intención de diseño

Cuando Apple introdujo el soporte para múltiples ventanas en iPad lo diseñaron respetando las raíces móviles de iPadOS. A diferencia de las aplicaciones tradicionales de PC, donde el software complejo puede ejecutarse a través de múltiples ventanas (y paneles) diferentes de forma predeterminada, iPadOS mantiene el requisito de que una aplicación debe poder hacer todo desde una sola ventana.

Es un requisito de diseño en iPad que todas las ventanas de la aplicación sean del mismo tipo, y cada una pueda hacer todo en la aplicación. El usuario podría hacer cualquier cosa desde una ventana si lo desea. Deberían poder crear múltiples ventanas solo si lo consideran útil, pero la aplicación nunca debería requerirlo. Esto facilita la forma simple en que las aplicaciones se ejecutan en iPadOS, puede continuar usando aplicaciones en pantalla completa como en un teléfono inteligente.

Ken Ferry explicando el diseño del soporte para múltiples ventanas para iOS durante la WWDC 2019
Ken Ferry explicando el diseño del soporte para múltiples ventanas para iOS durante la WWDC 2019

Ciclo de vida de la aplicación (y cambios de código)

Desde una perspectiva técnica Apple introdujo UIWindowScene con una abstracción UISceneSession correspondiente en la estructura de la interfaz de usuario. Se encuentra entre UIScreen y UIWindow.

Descripción general conceptual de la estructura de la interfaz de usuario de iPadOS según lo explicado por Steve Holt durante la WWDC 2019
Descripción general conceptual de la estructura de la interfaz de usuario de iPadOS según lo explicado por Steve Holt durante la WWDC 2019
Descripción general conceptual de UISceneSession, que proporciona el estado de la interfaz persistente entre las representaciones de la aplicación (WWDC 2019, Steve Holt, Apple)
Descripción general conceptual de UISceneSession, que proporciona el estado de la interfaz persistente entre las representaciones de la aplicación (WWDC 2019, Steve Holt, Apple)

Cuando iPadOS (e iOS) ejecutan múltiples aplicaciones, es posible que los sistemas operativos cierren una aplicación desde segundo plano para ahorrar memoria y energía. Esto es por diseño: mantiene el sistema operativo rápido y amigable con la batería.

Desde la perspectiva del ciclo de vida de una aplicación, esto significa que debe verificar si su aplicación se estaba ejecutando antes cuando se inicia. Cuando hay una UISceneSession existente, la aplicación debe volver a conectarse a ella para proporcionar un estado de interfaz persistente al usuario. Cuando se hace correctamente, el usuario no notará que la aplicación se interrumpió mientras estaba en segundo plano.

Roles funcionales en el ciclo de vida de una aplicación de iPadOS (WWDC 2019, Steve Holt, Apple)
Roles funcionales en el ciclo de vida de una aplicación de iPadOS (WWDC 2019, Steve Holt, Apple)

Si adopta los nuevos conceptos de UIWindowScene (y UISceneSession) en su aplicación, podrá aprovechar las nuevas capacidades de ventanas múltiples del iPad. Pero hay una cosa más: Apple planea llevar las aplicaciones de iOS y iPadOS a la Mac. ¡Con los nuevos conceptos de interfaz de usuario, su aplicación también se ejecutará a la perfección en macOS!

La misma aplicación en iOS/iPadOS y macOS
La misma aplicación en iOS/iPadOS y macOS

En la práctica

Como desarrollador, tuve pocos problemas para implementar los nuevos conceptos de interfaz de usuario en mis aplicaciones. Con relativamente poco esfuerzo, puede habilitar muchos casos de uso diferentes en los que la misma aplicación proporciona más poder al usuario.

Usando mi aplicación
Usando mi aplicación "Lemmid (content) Manager" para editar una entrada de blog mientras veo los resultados en paralelo
Editando un registro DNS usando mi aplicación
Editando un registro DNS usando mi aplicación "Lemmid Domain" mientras preservo el contexto de toda la zona DNS
Usando mi aplicación
Usando mi aplicación "Lemmid Count" para analizar las visitas y el tráfico de un artículo en willem.com
Desarrollo web en iPad usando Inspect y Blink en paralelo
Desarrollo web en iPad usando Inspect y Blink en paralelo

Conclusión

Apple no se apresuró con el soporte para múltiples ventanas en iPad, sino que se tomó su tiempo para diseñarlo bien. Si adopta los nuevos conceptos, su aplicación será más poderosa para los usuarios.

Siempre es una buena idea tomarse su tiempo para comprender los conceptos de interfaz subyacentes antes de comenzar a desarrollar. ¡Hágalo bien (y bien) en lugar de rápido (y estúpido)!