WeatherlingSó fico feliz quando chove

Blog · · Atualizado em · Por Matt Senter

Chuva atrás das janelas, sem gravar a tela

O Weatherling não precisa de permissão de Gravação de Tela, nem de qualquer outra, para colocar chuva atrás das janelas. Ele nunca vê o conteúdo da sua tela. Trabalha com o contorno de cada janela, que o macOS compartilha com todos os apps, e roda no App Sandbox da Apple sem acesso à rede.

Pode parecer bom demais para ser verdade. Ao ver uma gota pousar na barra de título, escorrer pela lateral e passar atrás da janela da frente, é natural perguntar como o app sabe o que está na tela. A resposta curta é: ele não sabe. Sabe onde as coisas estão, e isso é tudo de que a chuva precisa.

Geometria das janelas, sem ler seu conteúdo

Todo app para Mac pode pedir ao macOS uma lista das janelas visíveis na tela. O Weatherling faz isso por meio de CGWindowListCopyWindowInfo, a mesma chamada pública usada como ponto de partida por gerenciadores de janelas e ferramentas de captura. Para cada janela, ele lê apenas cinco informações:

  • Limites. Onde a janela está e qual é seu tamanho.
  • Camada. Se é uma janela comum, um menu ou parte da interface do sistema.
  • Opacidade. Se ela está visível ou totalmente transparente.
  • Número da janela. Um ID para acompanhar a janela quando ela se move.
  • ID do processo proprietário. Um número usado apenas para distinguir as janelas do próprio Weatherling das suas.

A lista vem na ordem da frente para trás, a outra metade do truque. Uma gota que passa pela borda de uma janela da frente e pousa em outra mais atrás é apenas uma gota comparada ao próximo contorno da lista. É assim que a chuva pode cair na frente de uma janela e atrás de outra sem que o app veja um único pixel delas.

A mesma lista também oferece o título da janela, o nome do app proprietário e se ela está sendo compartilhada. O Weatherling nunca lê esses campos. A chuva não precisa deles, e deixá-los de lado é parte do motivo de não haver pedido de permissão.

Por que títulos de janelas precisariam de Gravação de Tela

Desde o macOS Catalina, o título da janela de outro app é considerado conteúdo da tela. Um título pode conter o assunto de um e-mail, o nome de um documento ou a página que você está lendo, então o macOS só fornece títulos a apps autorizados em Gravação de Tela. Sem essa permissão, o campo de título simplesmente vem vazio.

Essa divisão orienta todo o projeto. Um app que quisesse agir de forma diferente no seu e-mail e no editor de código precisaria de títulos ou capturas e teria de pedir permissão. O Weatherling só se importa com a posição da janela, não com o que ela é, então não precisa pedir nada. Também não há pedido de Acessibilidade, porque nada é lido dentro de outros apps e nada os controla. Sem monitoramento de teclado, acesso à entrada ou automação.

Em sandbox, sem extras

Os apps da Mac App Store rodam no App Sandbox da Apple e declaram permissões adicionais por meio de entitlements: acesso à rede, câmera, arquivos fora do próprio contêiner e assim por diante. O Weatherling declara com.apple.security.app-sandbox ecom.apple.security.files.user-selected.read-write. A segunda permite salvar um cartão de pontuação no arquivo que você escolher no diálogo Salvar. (A assinatura de código da Apple também inclui os identificadores do app e da equipe em todos os apps da App Store; eles não concedem permissões.)

O que falta importa tanto quanto o que está presente. Um app em sandbox sem a permissão de cliente de rede não pode abrir conexões de saída, então a ausência de requisições de rede no Weatherling é imposta pelo macOS, não apenas prometida aqui. Não há conta, análise de uso ou serviço de relatos de falha. Ajustes como intensidade da chuva e vento ficam no armazenamento do próprio sandbox no seu Mac.

O som da chuva funciona da mesma forma. A gravação vem dentro do app e, quando você está em uma chamada, a chuva silencia gradualmente. O Weatherling percebe a chamada verificando se algum app está usando o microfone, um simples sim ou não informado pelo macOS sobre o dispositivo. Ele nunca abre o microfone, captura áudio ou pede acesso a ele.

Verifique você mesmo

Você não precisa confiar só na minha palavra. Três verificações levam cerca de um minuto:

  1. Abra Ajustes do Sistema, Privacidade e Segurança e depois Gravação de Tela (Gravação de Tela e Áudio do Sistema nas versões mais recentes do macOS). O Weatherling não está na lista, porque nunca pediu acesso.
  2. Confira Acessibilidade e Microfone na mesma seção. Ele não está em nenhuma das duas.
  3. No Terminal, execute codesign -d --entitlements - /Applications/Weatherling.app. Além dos identificadores do app e da equipe que a assinatura da Apple adiciona a todos os apps da App Store, as permissões são App Sandbox e acesso a arquivos escolhidos pelo usuário para salvar cartões de pontuação. Não há permissão de rede.

Se uma versão futura precisar de mais, você verá um pedido antes. O macOS não permite que um app obtenha essas permissões silenciosamente.

O custo de acompanhar as janelas

Ler a lista de janelas é barato. O Weatherling a consulta cerca de dez vezes por segundo quando as janelas estão paradas e um pouco mais rápido durante movimentos, para que a água acompanhe uma janela arrastada sem atrasar. Nada é guardado entre consultas além dos contornos, que desaparecem assim que a janela fecha.

Uma decoração para o desktop não deveria exigir negociar sua privacidade. Ligue a chuva, ajuste ao seu humor e volte ao que estava fazendo. O Weatherling não precisa saber o que é.

Você pode experimentar sem instalar nada na página inicial, onde as janelas arrastáveis são uma versão no navegador da mesma ideia. Os detalhes sobre o que o app armazena ou não estão na política de privacidade, e os motivos para fazer tudo isso estão em Por que a chuva no desktop pode acalmar.