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 builtThere are three in-house implementations, not one. One repository with five application targets (four iOS and one macOS) defined in `project.yml`, whose logic tests I ran today: 160 out of 160 pass. A second iOS app, in another project, with 40 Swift files and HealthKit. And a third direction, with a single codebase for iOS, Android and web, whose web version responds today. The reserve that changes the answer to the question every buyer asks first: none of our apps is published in the App Store or Google Play. There is only one reason, and it has a name — `DEVELOPMENT_TEAM` is empty in the project configuration, meaning the team identifier from the Apple Developer Program is missing. The machine has a valid signing identity, sufficient for installation on our own device, insufficient for distribution in the store. It is an account problem, not a code problem, but it remains a problem and we write it here, not in the footnote.
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.