Experiencia · Aplicaciones móviles
Aplicaciones para teléfono, construidas de modo que la lógica pueda verificarse sin teléfono.
Construimos aplicaciones nativas iOS en Swift, con sensores y HealthKit, y aplicaciones con un solo código para iOS, Android y web cuando el proyecto no requiere sensores. El núcleo de lógica se prueba aparte de la pantalla.
Ya construidoSunt 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.
Una aplicación móvil tiene dos partes que se rompen de forma diferente. La parte que lee los sensores y calcula algo — un ángulo, una puntuación, un estado — y la parte que dibuja pantallas. Las mantenemos separadas, y no por motivos estéticos: en nuestro repositorio principal de iOS, los archivos del núcleo no importan la interfaz, así que pueden compilarse directamente con `swiftc` en Mac y ejecutarse como un programa normal, sin simulador y sin teléfono. La suite tiene 160 comprobaciones agrupadas en 16 etapas; la ejecutamos hoy y pasa íntegramente. Esa es la razón por la que podemos decir qué hace exactamente un algoritmo, en lugar de decir que "funciona bien".
En iOS trabajamos en Swift 6, con objetivo mínimo iOS 17. Ese mismo repositorio define cinco aplicaciones como objetivos separados: cuatro para iPhone y una para macOS, y la de macOS reutiliza quince archivos del núcleo de iOS, sin copiar. Los sensores se leen en la fuente: la interfaz de Apple para los sensores de los auriculares expone la orientación de la cabeza, y la aplicación compara el ángulo actual con una posición que el usuario calibra al inicio de la sesión. Los umbrales no son «ajustes internos»: por debajo de 7° está recto, entre 7° y 13° está deslizándose, por encima de 13° sostenido durante tres segundos activa la alerta, y el suavizado usa una media exponencial con el coeficiente 0,15. Los cuatro valores están en cuatro líneas consecutivas de código y pueden mostrarse.
Cuando el proyecto no necesita sensores, no recomendamos nativo. La tercera dirección del portafolio es un solo código que se compila para iPhone, Android y navegador — React Native con Expo — y la versión web está publicada y responde hoy. La diferencia práctica para el cliente: un cuestionario, una calculadora o un panel de control no justifican dos equipos y dos repositorios; una aplicación que escucha un sensor a veinte muestras por segundo, sí.
Lo que aún no podemos. Ninguna de nuestras aplicaciones está en App Store ni en Google Play. No porque no compile — compila, se instala en el simulador y pasa las pruebas — sino porque en la configuración del proyecto el identificador de equipo de Apple está vacío, es decir, no existe una inscripción en el Apple Developer Program vinculada a estos builds. En Mac existe una identidad de firma válida, de tipo desarrollo, que basta para la instalación en el propio dispositivo y no basta para la tienda. Para un proyecto de cliente, la cuenta de desarrollador se abre a nombre de la empresa del cliente y queda suya — esa es la conversación que hay que tener al inicio, no al final.