Especialização · Aplicações desktop
Aplicações que se instalam no computador. No macOS, construímos duas; para Windows e Linux, esta página é uma oferta, não um histórico.
Construímos aplicações nativas para macOS, com o núcleo da lógica separado do ecrã, para que a mesma lógica também funcione no telemóvel. Para Windows e Linux/Ubuntu ainda não temos nada entregue e escrevemos isso como tal, com as condições em que aceitaríamos o trabalho. A primeira pergunta continua a ser se você realmente precisa de uma aplicação instalada.
Oferta, com condiçõesA regra é mecânica e eu aplico-a mecanicamente. No macOS temos duas implementações próprias, construídas e executáveis: uma aplicação de barra de menus com 25 ficheiros Swift, que reutiliza 15 ficheiros do núcleo de um projeto de iPhone, e uma segunda aplicação, mais simples, que é um invólucro WebKit sobre uma aplicação web. Ambas têm binário compilado nesta máquina. Mas o serviço, tal como é chamado, cobre três famílias de sistemas, e para duas delas — Windows e Linux/Ubuntu — procurámos seriamente e encontrámos zero: nenhum projeto .NET ou Qt próprio, nenhum `tauri.conf.json`, nenhum Electron escrito por nós, nenhum `.desktop`, nenhum pacote deb, rpm ou AppImage. Além disso, nenhuma das duas aplicações de macOS foi alguma vez empacotada num instalador distribuível. Com apenas uma em cada três plataformas coberta e zero distribuições, a página escreve-se como oferta com condições. Quando entregarmos a primeira aplicação de Windows ou de Linux, muda o valor, não o texto.
A primeira pergunta que lhe fazemos não é para que sistema, mas se precisa mesmo de uma aplicação instalada. Vale a pena instalá-la quando precisa de algo que o navegador não lhe dá: acesso direto a sensores ou periféricos, presença permanente na barra do sistema, trabalho sem internet, acesso aos ficheiros no disco sem que a pessoa os carregue de cada vez, ou execução em segundo plano quando a janela é fechada. Se nada disto for necessário, um site que se abre a partir de uma ligação é mais barato de construir, de atualizar e de manter — e dizemo-lo, mesmo que o trabalho fique mais pequeno.
No macOS, temos duas aplicações construídas. A primeira é uma aplicação de barra de menu: 25 ficheiros Swift próprios, mais 15 ficheiros de núcleo retirados diretamente do projeto de iPhone do mesmo produto — os mesmos ficheiros, não uma cópia. Constrói-se com um script que chama diretamente o compilador Swift, alvo `arm64-apple-macosx14`, ligando onze frameworks de sistema, entre os quais SwiftUI, AppKit, CoreMotion, Vision e UserNotifications. O binário resultante tem 6.516.128 bytes. A segunda é muito mais simples e é honesto dizer quanto: três ficheiros Swift, uma camada WebKit por cima de uma aplicação web, com sandbox e runtime endurecido ativados, compilado universalmente para processadores Intel e Apple. São duas coisas diferentes e chamamo-las de forma diferente.
O que não temos, dito claramente. Windows: zero. Procurámos projetos .NET, WPF, WinForms, WinUI, ficheiros `.xaml`, `.appxmanifest`, `.msi`, `.wxs` — tudo o que encontrámos no disco pertence a uma biblioteca C de terceiros, vendorizada noutro projeto, que não escrevemos nós. Linux desktop: zero — nenhum ficheiro `.desktop`, nenhum pacote deb ou AppImage construído aqui. Electron ou Tauri escritos por nós: zero. E, igualmente importante: nenhuma das duas aplicações de macOS foi alguma vez empacotada num instalador. Existem como pacotes `.app` construídos localmente, assinados ad-hoc, sem identificador de equipa.
O que, ainda assim, transfere a experiência até agora, e é a parte que importa para um projeto novo: a disciplina de manter o núcleo da lógica separado da interface. No projeto de macOS, os ficheiros de cálculo e de políticas não importam a interface, por isso compilam e correm no Mac como programa normal, sem simulador; a sua suíte de lógica corre em poucos segundos. A mesma separação faz com que a portabilidade para outro sistema seja um problema de camada, não de reescrita. É nisso que nos baseamos quando dizemos que poderíamos fazer Windows ou Linux — não numa experiência que não temos.