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ídoSunt trei implementări proprii, nu una. Un depozit cu cinci ținte de aplicație (patru iOS și una macOS) definite în `project.yml`, ale cărui teste de logică le-am rulat azi: 160 din 160 trec. O a doua aplicație iOS, în alt proiect, cu 40 de fișiere Swift și HealthKit. Și o a treia direcție, cu un singur cod pentru iOS, Android și web, a cărei variantă web răspunde astăzi. Rezerva care schimbă răspunsul la întrebarea pe care o pune orice cumpărător înainte de toate: niciuna dintre aplicațiile noastre nu este publicată în App Store sau Google Play. Motivul e unul singur și are nume — `DEVELOPMENT_TEAM` este gol în configurația de proiect, adică lipsește identificatorul de echipă din Apple Developer Program. Mașina are o identitate de semnare validă, suficientă pentru instalare pe dispozitiv propriu, insuficientă pentru distribuție în magazin. E o problemă de cont, nu de cod, dar rămâne o problemă și o scriem aici, nu la subsol.
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.