Expertise · Mobile Apps
Telefon-Apps, so gebaut, dass die Logik ohne Telefon überprüft werden kann.
Wir bauen native iOS-Apps in Swift, mit Sensoren und HealthKit, sowie Single-Code-Apps für iOS, Android und Web, wenn das Projekt keine Sensoren erfordert. Der Kern der Logik wird getrennt vom Bildschirm getestet.
Bereits gebautEs sind drei eigene Implementierungen, nicht eine. Ein Repository mit fünf App-Zielen (vier iOS und ein macOS), definiert in `project.yml`, dessen Logiktests wir heute ausgeführt haben: 160 von 160 bestehen. Eine zweite iOS-App, in einem anderen Projekt, mit 40 Swift-Dateien und HealthKit. Und eine dritte Richtung, mit einem einzigen Code für iOS, Android und Web, deren Web-Variante heute antwortet. Der Vorbehalt, der die Antwort auf die Frage verändert, die jeder Käufer vor allem anderen stellt: Keine unserer Apps ist im App Store oder bei Google Play veröffentlicht. Der Grund ist nur einer und hat einen Namen — `DEVELOPMENT_TEAM` ist in der Projektkonfiguration leer, das heißt, die Team-ID aus dem Apple Developer Program fehlt. Die Maschine hat eine gültige Signaturidentität, ausreichend für die Installation auf dem eigenen Gerät, unzureichend für die Verteilung im Store. Es ist ein Kontoproblem, kein Codeproblem, aber es bleibt ein Problem, und wir schreiben es hier hin, nicht in die Fußnote.
Eine Mobile App hat zwei Teile, die sich unterschiedlich kaputtgehen. Der Teil, der Sensoren liest und etwas berechnet — einen Winkel, einen Score, einen Zustand — und der Teil, der Bildschirme zeichnet. Wir halten sie getrennt, und das nicht aus ästhetischen Gründen: In unserem Haupt-iOS-Repository importieren die Kerndateien die Oberfläche nicht, sodass sie direkt mit `swiftc` auf dem Mac kompiliert und wie ein gewöhnliches Programm ausgeführt werden können, ohne Simulator und ohne Telefon. Die Suite hat 160 Prüfungen, gruppiert in 16 Stufen; wir haben sie heute ausgeführt und sie besteht vollständig. Deshalb können wir sagen, was ein Algorithmus genau macht, statt zu sagen, dass er „gut funktioniert“.
Auf iOS arbeiten wir mit Swift 6, mit minimalem Ziel iOS 17. Dasselbe Repository definiert fünf Apps als separate Ziele: vier für iPhone und eine für macOS, und die macOS-Version verwendet fünfzehn Dateien aus dem Kern der iOS-Version wieder, ohne Kopieren. Die Sensoren werden an der Quelle gelesen: Die Apple-Schnittstelle für Sensoren in Kopfhörern gibt die Kopforientierung aus, und die App vergleicht den aktuellen Winkel mit einer Position, die der Nutzer zu Beginn der Sitzung kalibriert. Die Schwellenwerte sind keine „internen Einstellungen“: unter 7° ist gerade, zwischen 7° und 13° ist Schieflage, über 13°, drei Sekunden gehalten, löst den Alarm aus, und die Glättung verwendet einen exponentiellen Mittelwert mit dem Koeffizienten 0,15. Alle vier Werte stehen in vier aufeinanderfolgenden Codezeilen und können gezeigt werden.
Wenn das Projekt keine Sensoren braucht, empfehlen wir nicht nativ. Die dritte Richtung im Portfolio ist ein einziger Code, der für iPhone, Android und Browser kompiliert wird — React Native mit Expo — und die Web-Version ist veröffentlicht und antwortet heute. Der praktische Unterschied für den Kunden: Ein Fragebogen, ein Rechner oder ein Dashboard rechtfertigen keine zwei Teams und zwei Repositories; eine App, die einen Sensor zwanzigmal pro Sekunde abfragt, schon.
Was wir noch nicht können. Keine unserer Apps ist im App Store oder bei Google Play. Nicht, weil sie nicht kompiliert — sie kompiliert, lässt sich im Simulator installieren und besteht die Tests — sondern weil in der Projektkonfiguration die Apple-Team-ID leer ist, das heißt, es gibt keine Registrierung im Apple Developer Program, die mit diesen Builds verknüpft ist. Auf dem Mac gibt es eine gültige Signieridentität vom Typ Development, die für die Installation auf dem eigenen Gerät reicht und für den Store nicht ausreicht. Bei einem Kundenprojekt wird das Entwicklerkonto auf der Firma des Kunden eröffnet und bleibt sein Eigentum — das ist das Gespräch, das am Anfang geführt werden muss, nicht am Ende.