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 gebautSunt 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.
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.