R Roam Roam laden

GPS im Hintergrund unter iOS aufzeichnen, ohne die Tour zu verlieren

iOS kann deine Aufzeichnungs-App jederzeit anhalten oder beenden und schuldet dir keine Vorwarnung. Was das für eine App bedeutet, die aufschreiben soll, wo du warst — und was eine Tour wirklich schützt.

Du startest eine Aufzeichnung, steckst das Telefon in die Tasche, fährst drei Stunden, holst es wieder heraus — und die App zeigt zwanzig Minuten. Das ist die mit Abstand häufigste ernste Beschwerde über Tracker auf dem Telefon, und die Ursache ist fast nie das GPS.

Was iOS mit deiner App tatsächlich macht

Eine iOS-App im Hintergrund läuft nicht einfach langsamer. Sie durchläuft Zustände: weiterhin laufend, angehalten (im Speicher eingefroren, führt nichts aus) und beendet (weg). Das System schiebt dich zwischen diesen Zuständen hin und her, abhängig von Speicherdruck, Temperatur, Akku und seinem eigenen Ermessen, und es ist nicht verpflichtet, dir das vorher zu sagen.

Eine App mit dem Hintergrundmodus für Standort darf weiterlaufen, solange Standortaktualisierungen eintreffen, und nur deshalb funktioniert das Ganze überhaupt. Verglichen mit einer gewöhnlichen App ist das eine starke Zusage. Eine absolute ist es nicht: Unter echtem Speicherdruck — ein großes Spiel, eine Kamera-App, ein Telefon mit wenig RAM — kann deine Aufzeichnung mitten in der Tour trotzdem abgeschossen werden.

Daraus entsteht der Fehler, auf den es ankommt. Hat die App die Tour im Arbeitsspeicher gehalten und darauf gewartet, dass du auf Stopp drückst, bevor sie irgendetwas aufschreibt, dann ist alles seit dem letzten Speichern weg. Nicht beschädigt. Weg, ohne Fehlermeldung, weil der Prozess, der davon wusste, nicht mehr existiert.

Der einzige echte Schutz: sofort aufschreiben

Es gibt keinen cleveren Weg darum herum. Der Schutz besteht darin, gar nicht erst ungespeicherte Daten zu haben.

In Roam ist ein Standort-Callback ein Batch ist eine Datenbanktransaktion, und die Punkte und die laufenden Summen der Tour werden gemeinsam festgeschrieben. Es gibt keinen Puffer, der auf das Ende der Tour wartet, und im Schreibpfad keine Stelle, an der ein Punkt still verschwindet — ein Batch, der sich nicht festschreiben lässt, löst einen Fehler aus und landet in einem Alarm, statt geschluckt zu werden. Wird die App bei Kilometer vierzig beendet, dann steht Kilometer vierzig längst auf dem Telefon.

Dass die Summen in derselben Transaktion wie die Punkte festgeschrieben werden, wiegt schwerer, als es aussieht. Die Summenzeile kann damit nie eine Menge von Punkten beschreiben, die nicht auf der Platte liegt, es gibt nach einem Abschuss also kein Zeitfenster, in dem sich beide widersprechen — und die Wiederherstellung muss nicht achtundzwanzigtausend Punkte durchgehen, um zu rekonstruieren, wo du warst. Sie liest die Zeile.

Die andere Hälfte desselben Gedankens: Es wird nie etwas gelöscht. Filterung, Glättung und automatische Pause entfernen niemals einen Datensatz aus der Datenbank. Sie werden als Merkmale am Punkt vermerkt, und der Rohstrom bleibt genau so erhalten, wie er eingetroffen ist — damit die ursprünglichen Messwerte noch da sind, wenn eine Heuristik bei einer echten Tour danebenliegt, und man aus ihnen neu ableiten kann. Eine App, die klammheimlich die Messwerte wegwirft, mit denen sie nicht einverstanden war, hat den Beleg dafür vernichtet, dass sie sich geirrt hat.

Nach einer Beendigung wieder hochkommen

Hast du den Standortzugriff auf „Immer“ gestellt, kann iOS eine beendete App im Hintergrund neu starten, wenn eine nennenswerte Ortsänderung eintritt. Das ist ein echter Rettungsanker, und er bringt eine Falle mit, in die schon sehr viele Aufzeichnungs-Apps getappt sind.

Bei diesem Neustart hat die App ein sehr kurzes, unvorhersehbares Zeitfenster, bevor das System sie erneut anhalten darf — und zwar an jedem Unterbrechungspunkt, was in modernem Swift jedes `await` heißt. Eine App, die nach dem Neustart erst asynchron irgendeinen Zustand lädt, bevor sie ihren Standortmanager wieder aufbaut, kann mittendrin eingefroren werden, und ein Prozess, der angehalten wurde, bevor er das GPS wieder scharf geschaltet hat, wird nie wieder etwas davon hören. Er sieht aus, als liefe er. Er empfängt nichts.

Das Scharfschalten in Roam ist genau aus diesem Grund bewusst synchron: Der Standortmanager wird neu aufgebaut und die Aktualisierungen werden neu gestartet, bevor das erste await kommt. Damit ist der Fehler nicht bloß unerwünscht, sondern gar nicht erst einbaubar. Es ist außerdem so geschrieben, dass ein zweiter Aufruf unschädlich ist, denn ein Neustart im Hintergrund, der mit einem Start im Vordergrund um die Wette läuft, tut genau das.

Eines sollte klar gesagt sein: „Immer“ ist eine Versicherung und keine Voraussetzung. Mit „Beim Verwenden“ wird ganz normal aufgezeichnet, und die App sagt das in ihrem Berechtigungsdialog auch, statt so zu tun, als müsstest du die stärkere Berechtigung herausrücken.

Und es ist eine Versicherung und keine Garantie, auf diesem Unterschied lohnt es sich zu bestehen. Roams eigene Konfiguration schreibt die Annahme wörtlich hin: Es kann sein, dass die App nie wieder gestartet wird, und die Haltbarkeit des Geschriebenen ist die einzige Zusage, die sie macht. Nichts in iOS verpflichtet das System, eine beendete App zurückzubringen. Was zwischen dem Abschuss und dem Neustart passiert ist, hat niemand aufgezeichnet, und keine Schnittstelle liefert es nachträglich. Zurück bekommst du also die Tour bis zum Abschuss plus die Tour ab dem Neustart, mit einem ehrlichen Loch dazwischen. Jede App, die das als nahtloses Weiterlaufen beschreibt, beschreibt etwas, das die Plattform nicht hergibt.

Was du selbst tun kannst

  1. Erteile den Standortzugriff „Immer“, wenn du etwas Langes aufzeichnest. Das ist der Unterschied zwischen einer Beendigung, die dich nichts kostet, und einer, die dich den Rest der Tour kostet.
  2. Lass den Stromsparmodus aus, wenn es geht. Er macht es wahrscheinlicher, dass Hintergrundarbeit beschnitten wird.
  3. Wisch die App während der Tour nicht aus dem App-Umschalter. Ein erzwungenes Beenden sagt iOS, dass du es so gemeint hast, und dann gibt es keinen Neustart im Hintergrund.
  4. Lass nicht zwei Aufzeichnungs-Apps gleichzeitig laufen. Zwei Apps, die das GPS wachhalten, verdoppeln den Verbrauch und den Speicherdruck, der eine von beiden abschießt.
  5. Prüf die Berechtigung nach einem iOS-Update. Aktualisierungen stufen „Immer“ gelegentlich ohne viel Aufhebens auf „Beim Verwenden“ zurück.

Woran du erkennst, ob deine App sicher ist

Das kannst du in zehn Minuten ohne Hilfsmittel testen. Starte eine Aufzeichnung, geh fünf Minuten, beende die App dann erzwungen aus dem App-Umschalter und öffne sie wieder. Sind die fünf Minuten da, hat die App laufend geschrieben. Ist die Tour leer oder abgeschnitten, hielt sie deine Daten im Speicher, und du weißt jetzt genau, wie viel du bei einer langen Tour zu verlieren hast.

Eine Aufzeichnungs-App sollte außerdem so wenig wie möglich deklarieren. Jeder zusätzliche Hintergrundmodus ist etwas, wofür die App bei Missbrauch beendet werden kann, und etwas, wonach eine Prüfstelle im App Store fragen wird. Roam deklariert genau einen — Standort — und im Repository sitzt eine Prüfung, die den Build scheitern lässt, sobald diese Liste auch nur um einen einzigen Eintrag wächst.

Häufige Fragen

Warum hat mein iPhone die Aufzeichnung im Hintergrund gestoppt?

Fast immer, weil iOS die App unter Speicherdruck angehalten oder beendet hat, oder weil sie aus dem App-Umschalter erzwungen beendet wurde. Der Hintergrundmodus für Standort hält eine Aufzeichnung sehr viel länger am Leben als eine gewöhnliche App, aber eine absolute Garantie ist er nicht — und deshalb zählt, was die App mit jedem einzelnen Punkt macht, mehr als das Am-Leben-Bleiben.

Braucht eine App „Immer“, um eine Tour aufzuzeichnen?

Nein. „Beim Verwenden“ reicht, um bei ausgeschaltetem Display aufzuzeichnen, denn der Hintergrundmodus für Standort hält die App am Laufen, solange Aktualisierungen eintreffen. „Immer“ gibt iOS zusätzlich die Möglichkeit, die App im Hintergrund neu zu starten, falls sie beendet wurde — eine Versicherung für lange Touren also, keine Voraussetzung.

Verbraucht GPS im Hintergrund viel Akku?

Es kostet echten Strom — der Empfänger läuft durchgehend, und die App wacht für jede Position auf. Ein modernes Telefon steckt eine mehrstündige Tour locker weg; erst bei einer Ganztagesveranstaltung wird es zur Frage, und genau dort ist eine App, die laufend schreibt, der Unterschied zwischen dem Verlust der letzten Minuten und dem Verlust des ganzen Tages.

Wie teste ich, ob meine App Daten verliert?

Starte eine Aufzeichnung, geh fünf Minuten, beende die App erzwungen aus dem App-Umschalter und öffne sie wieder. Haben die fünf Minuten überlebt, schreibt die App laufend mit. Haben sie es nicht, hielt sie deine Tour im Speicher.

Eine Aufzeichnung, die die Tour nicht verliert

Roam schreibt jeden GPS-Punkt in dem Moment aufs Telefon, in dem er eintrifft, markiert Signallücken, statt eine gerade Linie hindurchzuziehen, und liest die Höhenmeter vom Barometer statt aus der GPS-Höhe. Kein Konto, keine Anmeldung, keine Synchronisierung. Eine Tour aufzuzeichnen, sie anzusehen und sie abzuspielen ist kostenlos.

Im App Store laden

Verwandte Artikel

Alle Artikel