Expertise · Mobile applications
Applications for phone, built so that the logic can be verified without the phone.
We build native iOS apps in Swift, with sensors and HealthKit, and single-code applications for iOS, Android and web when the project does not require sensors. The logic core is tested separately from the screen.
Already builtSunt 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.
A mobile application has two parts that break differently. The part that reads sensors and calculates something — an angle, a score, a state — and the part that draws screens. We keep them separate, and not for aesthetic reasons: in our main iOS repository, the core files do not import the interface, so they can be compiled directly with `swiftc` on Mac and run as a regular programme, without a simulator and without a phone. The suite has 160 checks grouped into 16 stages; we ran it today and it passes in full. That is why we can say exactly what an algorithm does, instead of saying that it “works well”.
On iOS we work in Swift 6, with a minimum target of iOS 17. The same repository defines five applications as separate targets: four for iPhone and one for macOS, and the macOS one reuses fifteen files from the iOS core, without copying. Sensors are read at source: Apple’s interface for headphone sensors exposes head orientation, and the app compares the current angle with a position the user calibrates at the start of the session. The thresholds are not “internal adjustments”: below 7° it is straight, between 7° and 13° it is tilt, above 13° held for three seconds it triggers the alert, and smoothing uses an exponential average with coefficient 0.15. All four values are in four consecutive lines of code and can be shown.
When the project does not need sensors, we do not recommend native. The third direction in the portfolio is a single codebase that compiles for iPhone, Android and browser — React Native with Expo — and the web version is published and responds today. The practical difference for the client: a questionnaire, a calculator or a dashboard does not justify two teams and two repositories; an application that listens to a sensor at twenty samples per second does.
What we cannot yet do. None of our applications is in the App Store or Google Play. Not because they do not compile — they do compile, install on the simulator and pass the tests — but because in the project configuration the Apple team identifier is empty, meaning there is no Apple Developer Program enrolment linked to these builds. On Mac there is a valid signing identity, of development type, which is enough for installation on one's own device and not enough for the store. For a client project, the developer account is opened under the client company and remains theirs — that is the discussion that must be had at the beginning, not at the end.