Suporte de várias janelas na tua app para iPad

Escrita · 7 out 2019

Suporte de várias janelas na tua app para iPad

Desenvolvimento nativo para iPadOS

No mês passado, a Apple lançou o iPadOS, o primeiro sistema operativo dedicado ao iPad. Distingue-se do iOS por suportar o ecrã maior do iPad, incluindo janelas múltiplas / em ecrã dividido. Eu desenvolvo apps e chegou a altura de aproveitar estas novas possibilidades que o iPadOS oferece.

Desde 2016 que uso o iPad como computador principal, é um ótimo computador móvel. Mas o sistema operativo é diferente do da maioria dos computadores. O iPadOS baseia-se no iOS, que corre no popular telemóvel da Apple, o iPhone. Isto torna o iPad um pouco diferente no dia a dia, por causa da forma como corre as apps.

iPad Pro como computador principal, ligado a um terminal com o Blink
iPad Pro como computador principal, ligado a um terminal com o Blink

Por ter raízes no smartphone, o iPadOS trata as apps como um iPhone: as apps correm em ecrã inteiro, focadas numa única tarefa. As pessoas adoram o iPad por isso, porque é uma ótima forma de manter a cabeça concentrada numa só coisa.

Suporte de várias janelas no iPad

Há situações em que correr várias janelas em simultâneo pode ser muito útil, e foi aqui que a Apple melhorou o iPadOS, ao introduzir o suporte para correr apps lado a lado.

Suporte de várias janelas no iPad, com duas instâncias da mesma app a correr ao mesmo tempo
Suporte de várias janelas no iPad, com duas instâncias da mesma app a correr ao mesmo tempo

Mesmo que estejas a trabalhar numa única tarefa, ter suporte para várias janelas é muito útil, porque permite correr várias instâncias da mesma app ao mesmo tempo. Isto abre casos de utilização diferentes, em que podes ver e editar conteúdo de ângulos diferentes. Por exemplo, comparar dois meses diferentes na tua agenda, editar um documento longo ou ver o mapa a escalas diferentes em simultâneo.

Comparar meses diferentes na app do calendário
Comparar meses diferentes na app do calendário
Ver o mapa a escalas diferentes em simultâneo
Ver o mapa a escalas diferentes em simultâneo

Intenção do design

Quando a Apple introduziu o suporte de várias janelas no iPad, desenhou-o a pensar nas raízes móveis do iPadOS. Ao contrário das apps tradicionais de PC, onde o software complexo pode correr por várias janelas (e painéis) diferentes por defeito, o iPadOS mantém a exigência de que uma app tem de conseguir fazer tudo a partir de uma única janela.

É um requisito de design no iPad que todas as janelas da app sejam do mesmo tipo e que cada uma consiga fazer tudo na aplicação. O utilizador deve poder fazer tudo a partir de uma só janela, se quiser. Deve poder criar várias janelas só se achar útil, mas a app nunca o deve exigir. Isto mantém simples a forma como as apps correm no iPadOS: podes continuar a usá-las em ecrã inteiro, como num smartphone.

Ken Ferry a explicar o design do suporte de várias janelas para iOS durante a WWDC 2019
Ken Ferry a explicar o design do suporte de várias janelas para iOS durante a WWDC 2019

Ciclo de vida da app (e alterações ao código)

Do ponto de vista técnico, a Apple introduziu o UIWindowScene, com a abstração UISceneSession correspondente, na estrutura da interface. Fica entre o UIScreen e o UIWindow.

Visão concetual da estrutura da interface do iPadOS, explicada por Steve Holt na WWDC 2019
Visão concetual da estrutura da interface do iPadOS, explicada por Steve Holt na WWDC 2019
Visão concetual da UISceneSession, que dá o estado de interface persistente entre representações da app (WWDC 2019, Steve Holt, Apple)
Visão concetual da UISceneSession, que dá o estado de interface persistente entre representações da app (WWDC 2019, Steve Holt, Apple)

Quando o iPadOS (e o iOS) correm várias apps, é possível que o sistema operativo feche uma app em segundo plano para poupar memória e energia. É assim por design: mantém o sistema operativo rápido e simpático para a bateria.

Do ponto de vista do ciclo de vida da app, isto significa que tens de verificar se a app já estava a correr antes, quando é iniciada. Quando existe uma UISceneSession, a app deve voltar a ligar-se a ela, para dar ao utilizador um estado de interface persistente. Quando é bem feito, o utilizador nem repara que a app foi interrompida enquanto estava em segundo plano.

Papéis funcionais no ciclo de vida de uma app para iPadOS (WWDC 2019, Steve Holt, Apple)
Papéis funcionais no ciclo de vida de uma app para iPadOS (WWDC 2019, Steve Holt, Apple)

Se adotares os novos conceitos UIWindowScene (e UISceneSession) na tua app, vais poder aproveitar as novas capacidades de várias janelas do iPad. Mas há mais uma coisa: a Apple planeia levar as apps de iOS e iPadOS para o Mac. Com os novos conceitos de interface, a tua app também vai funcionar lindamente no macOS!

A mesma app em iOS/iPadOS e em macOS
A mesma app em iOS/iPadOS e em macOS

Na prática

Como programador, tive pouca dificuldade em implementar os novos conceitos de interface nas minhas apps. Com relativamente pouco esforço, consegues ativar muitos casos de utilização diferentes em que a mesma app dá mais poder ao utilizador.

A usar a minha app «Lemmid (content) Manager» para editar um artigo do blogue enquanto vejo o resultado lado a lado
A usar a minha app «Lemmid (content) Manager» para editar um artigo do blogue enquanto vejo o resultado lado a lado
A editar um registo DNS com a minha app «Lemmid Domain», mantendo o contexto de toda a zona DNS
A editar um registo DNS com a minha app «Lemmid Domain», mantendo o contexto de toda a zona DNS
A usar a minha app «Lemmid Count» para analisar visualizações e tráfego de um artigo no willem.com
A usar a minha app «Lemmid Count» para analisar visualizações e tráfego de um artigo no willem.com
Desenvolvimento web no iPad, com Inspect e Blink lado a lado
Desenvolvimento web no iPad, com Inspect e Blink lado a lado

Conclusão

A Apple não se apressou com o suporte de várias janelas no iPad, mas levou o seu tempo a desenhá-lo bem. Se adotares os novos conceitos, a tua app será mais poderosa para os utilizadores.

É sempre boa ideia dar tempo para perceber os conceitos de interface subjacentes antes de começares a programar. Faz as coisas bem (e com qualidade) em vez de depressa (e à toa)!

← Mais textos