---
title: "Suporte de várias janelas na tua app para iPad"
date: 2019-10-07
language: pt
topics: ["apple", "design", "iOS", "iPad", "programming", "tablet", "work"]
source_url: https://willem.com/pt/2019-10-07_suporte-de-varias-janelas-na-tua-app-para-ipad/
---
# 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 (https://willem.com/en/inside-and-outside-apple-using-questioning-and-escaping-the-ecosystem/), é 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](https://willem.com/global/images/590ada94c4e1.webp)

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](https://willem.com/global/images/d4097d9a5811.webp)

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](https://willem.com/global/images/b0fd605efa8d.webp)

![Ver o mapa a escalas diferentes em simultâneo](https://willem.com/global/images/62fc3c1ace78.webp)

## Intenção do design

Quando a Apple_introduziu_o_suporte_de_várias_janelas_no_iPad (https://developer.apple.com/videos/play/wwdc2019/212), 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](https://willem.com/global/images/64d2bc5a822d.webp)

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

Do ponto de vista técnico, a_Apple_introduziu (https://developer.apple.com/documentation/uikit/app_and_environment/scenes/supporting_multiple_windows_on_ipad) 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](https://willem.com/global/images/7b7e0e6a8f2a.webp)

![Visão concetual da UISceneSession, que dá o estado de interface persistente entre representações da app (WWDC 2019, Steve Holt, Apple)](https://willem.com/global/images/3d8992b418c8.webp)

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)](https://willem.com/global/images/0cc957f952fe.webp)

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](https://willem.com/global/images/8a48b3cb9b2d.webp)

## 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](https://willem.com/global/images/5d22d4b5df00.webp)

![A editar um registo DNS com a minha app «Lemmid Domain», mantendo o contexto de toda a zona DNS](https://willem.com/global/images/a825ee524dfd.webp)

![A usar a minha app «Lemmid Count» para analisar visualizações e tráfego de um artigo no willem.com](https://willem.com/global/images/7f6a0e735536.webp)

![Desenvolvimento web no iPad, com Inspect e Blink lado a lado](https://willem.com/global/images/be682d70074e.webp)

## 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)!
