Especialização · Aplicações móveis
Aplicações para telemóvel, construídas de forma a que a lógica possa ser verificada sem telemóvel.
Construímos aplicações nativas iOS em Swift, com sensores e HealthKit, e aplicações com um único código para iOS, Android e web quando o projeto não requer sensores. O núcleo da lógica é testado separadamente do ecrã.
Já construídoSão três implementações próprias, não uma. Um repositório com cinco alvos de aplicação (quatro iOS e um macOS) definidos em `project.yml`, cujos testes de lógica executámos hoje: 160 em 160 passam. Uma segunda aplicação iOS, noutro projeto, com 40 ficheiros Swift e HealthKit. E uma terceira direção, com um único código para iOS, Android e web, cuja variante web responde hoje. A reserva que muda a resposta à pergunta que qualquer comprador faz antes de tudo: nenhuma das nossas aplicações está publicada na App Store ou no Google Play. O motivo é apenas um e tem nome — `DEVELOPMENT_TEAM` está vazio na configuração do projeto, ou seja, falta o identificador da equipa no Apple Developer Program. A máquina tem uma identidade de assinatura válida, suficiente para instalação no próprio dispositivo, insuficiente para distribuição na loja. É um problema de conta, não de código, mas continua a ser um problema e escrevemo-lo aqui, não no rodapé.
Uma aplicação móvel tem duas partes que avariam de forma diferente. A parte que lê sensores e calcula algo — um ângulo, uma pontuação, um estado — e a parte que desenha ecrãs. Mantemo-las separadas, e não por motivos estéticos: no nosso repositório principal de iOS, os ficheiros do núcleo não importam a interface, pelo que podem ser compilados diretamente com `swiftc` no Mac e executados como um programa normal, sem simulador e sem telemóvel. A suite tem 160 verificações agrupadas em 16 etapas; executámo-la hoje e passa na totalidade. Esse é o motivo pelo qual podemos dizer o que um algoritmo faz exatamente, em vez de dizer que “funciona bem”.
Em iOS trabalhamos em Swift 6, com objetivo mínimo de iOS 17. O mesmo repositório define cinco aplicações como alvos separados: quatro para iPhone e uma para macOS, e a de macOS reutiliza quinze ficheiros do núcleo da de iOS, sem cópia. Os sensores são lidos na origem: a interface da Apple para os sensores nos auscultadores expõe a orientação da cabeça, e a aplicação compara o ângulo atual com uma posição que o utilizador calibra no início da sessão. Os limiares não são “ajustes internos”: abaixo de 7° está direito, entre 7° e 13° está em desvio, acima de 13° mantido durante três segundos dispara o alerta, e o alisamento usa uma média exponencial com o coeficiente 0,15. Os quatro valores estão em quatro linhas consecutivas de código e podem ser mostrados.
Quando o projeto não precisa de sensores, não recomendamos nativo. A terceira direção no portefólio é um único código que se compila para iPhone, Android e browser — React Native com Expo — e a versão web está publicada e responde hoje. A diferença prática para o cliente: um questionário, uma calculadora ou um painel de controlo não justificam duas equipas e dois repositórios; uma aplicação que escuta um sensor a vinte amostras por segundo, sim.
O que ainda não podemos. Nenhuma aplicação nossa está na App Store ou no Google Play. Não porque não compile — compila, instala-se no simulador e passa nos testes — mas porque na configuração do projeto o identificador de equipa Apple está vazio, ou seja, não existe uma inscrição no Apple Developer Program associada a estas builds. No Mac existe uma identidade de assinatura válida, de tipo desenvolvimento, que chega para instalação no próprio dispositivo e não chega para a loja. Para um projeto de cliente, a conta de desenvolvedor é aberta em nome da empresa cliente e fica a ser dela — essa é a conversa que deve ser feita no início, não no fim.