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çõesRegula e mecanică și o aplic mecanic. Pe macOS avem două implementări proprii, construite și rulabile: o aplicație de bară de meniu cu 25 de fișiere Swift, care refolosește 15 fișiere din nucleul unui proiect de iPhone, și o a doua aplicație, mai simplă, care e un înveliș WebKit peste o aplicație web. Ambele au binar compilat pe această mașină. Dar serviciul, așa cum e numit, acoperă trei familii de sisteme, iar pentru două dintre ele — Windows și Linux/Ubuntu — am căutat serios și am găsit zero: niciun proiect .NET sau Qt propriu, niciun `tauri.conf.json`, niciun Electron scris de noi, niciun `.desktop`, niciun ambalaj deb, rpm sau AppImage. În plus, niciuna dintre cele două aplicații de macOS nu a fost vreodată împachetată într-un instalator distribuibil. Cu doar una din trei platforme acoperită și zero distribuții, pagina se scrie ca ofertă cu condiții. Când vom livra prima aplicație de Windows sau de Linux, se schimbă valoarea, nu textul.
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.