Portfolio Projekte Road4Trip xDay Kontakt
App-Icon von Road4Trip: eine kurvige Strasse mit Kartennadel vor Abendhimmel
iPhone-App · 2026

Road4Trip

Routen mit mehreren Stopps planen, mit einem Tipp in Apple oder Google Maps abfahren – und festhalten, wo man schon war.

Version 1.3 im App Store 2.0 bei Apple in Prüfung Gratis iOS 17+ 4 Sprachen Ohne Konto
Im App Store laden

Warum es die App gibt

Wer eine Tour über mehrere Pässe fährt, kennt das Problem: Karten-Apps sind fürs Navigieren gemacht, nicht fürs Planen. Man tippt die Ziele einzeln ein, verliert die Übersicht – und am Ende des Jahres weiss man gar nicht mehr, welche Strecken man eigentlich gefahren ist.

Genau diese Lücke füllt Road4Trip. Die App plant die Route, übergibt sie ans Navi und erinnert daran, wo man schon war. Das eigentliche Navigieren überlässt sie Apple und Google Maps – die können das einfach besser.

Vier Sprachen

Road4Trip spricht Deutsch, Englisch, Französisch und Italienisch. Die App folgt der Sprache des iPhones, umstellen lässt sie sich jederzeit in den Einstellungen. Datum, Zeit und Zahlen richten sich mit – Kilometer bleiben Kilometer.

So sieht sie aus

Fünf Ansichten aus der App – Routen, Details, der Jahresrückblick, die Planung und die Einstellungen.

Übersicht mit gespeicherten Routen wie Gotthard nach Tessin und Sustenpass-Runde
RoutenAlle Touren mit Stopps und Kilometern auf einen Blick
Detailansicht einer Route mit Karte und den Stopps Altdorf, Gotthardpass, Bellinzona und Locarno
DetailKarte mit echtem Streckenverlauf und Stopps zum Sortieren
Jahresrückblick mit allen Touren eines Jahres auf einer Karte und der Statistik darunter
JahresrückblickAlle Touren eines Jahres auf einer Karte, mit Kennzahlen
Planungsansicht mit terminierten Fahrten Grimsel und Furka sowie Jura-Schlaufe
PlanungAnstehende Fahrten mit Datum und Uhrzeit
Einstellungen mit Zuhause-Ort, bevorzugter Karten-App und Anzeigeoptionen
EinstellungenZuhause-Ort, bevorzugte Karten-App und Darstellung

Was die App kann

📍

Routen mit mehreren Stopps

Orte über die Suche hinzufügen, die Reihenfolge per Ziehen ändern. Die Route erscheint auf der Karte mit dem echten Streckenverlauf, der tatsächlichen Fahrdistanz und der geschätzten Fahrzeit.

🚩

Start und Ziel im Blick

Der erste Stopp ist der Start, der letzte das Ziel – beide sind in der Liste beschriftet, alles dazwischen sind Zwischenstopps. Wer meistens am selben Ort losfährt, hinterlegt ein Zuhause und setzt es mit einem Tipp als Start ein. Beim Abfahren wird der Start an die Karten-App übergeben, damit die gefahrene Strecke mit den angezeigten Kilometern übereinstimmt. Wer spontan von unterwegs losfahren will, stellt die Route auf «Losfahren ab: Aktuellem Standort».

📱

Widget für den Home-Bildschirm

Die nächste geplante Tour immer im Blick: Name, wie viele Tage es noch sind, Verkehrsmittel und Kilometer. Ein Tipp öffnet die App. Es gibt das Widget in zwei Grössen für den Home-Bildschirm und in zwei Formen für den Sperrbildschirm – so sieht man die nächste Fahrt, ohne das iPhone zu entsperren. Es aktualisiert sich, sobald sich am Plan etwas ändert.

💾

Sicherung

Road4Trip sichert Routen, Stopps, Notizen, Bewertungen und die History – automatisch täglich, wöchentlich oder monatlich, oder jederzeit von Hand. Ob die Fotos mitgehen, entscheidet ein Schalter. Die letzten fünf Stände bleiben erhalten und lassen sich einzeln wiederherstellen. Seit Version 1.3 landen sie automatisch im Ordner «Road4Trip» im iCloud Drive – damit überstehen sie auch ein verlorenes oder kaputtes iPhone.

🏍️

Passend zum Fahrzeug

Auto, Motorrad, Roller, Velo oder zu Fuss – die Wahl bestimmt, wie gerechnet und übergeben wird. Velo und zu Fuss führen über andere Wege und ergeben andere Kilometer und Zeiten.

🧭

Direkt losfahren

Ein Tipp übergibt die komplette Route samt Start und Zwischenzielen an Apple Maps oder Google Maps. Welche App zuoberst steht, legt man selbst fest. Per Kurzbefehl geht es auch über die Sprachassistenz.

Vorschläge entlang der Route

Tankstellen, Restaurants, Cafés und Parks in der Nähe der geplanten Strecke – mit einem Tipp als Zwischenstopp an der passenden Stelle eingefügt.

📅

Fahrten planen

Datum und Uhrzeit setzen und alle anstehenden Touren mit «in X Tagen» und Kilometern im Blick behalten.

📔

Reisetagebuch statt Liste

Gefahrene Touren abhaken, mit Fotos versehen, bewerten und kommentieren. Dazu Gesamtkilometer und -fahrzeit, Schnitt pro Tour, längste Tour und die Aufteilung nach Verkehrsmittel.

🗓️

Jahresrückblick

Alle Touren eines Jahres auf einer Karte, dazu die Kennzahlen der Saison – gefahrene Kilometer, Zeit unterwegs, Anzahl Touren und die längste Fahrt.

🔁

GPX-Import und -Export

Austausch mit Komoot, Calimoto, Kurviger und allem anderen, was GPX versteht – Routen kommen rein und gehen wieder raus.

Komfort im Detail

Route duplizieren oder als Rückweg umkehren, Liste durchsuchen und sortieren, heller und dunkler Modus, ein Standard-Verkehrsmittel für neue Routen. Hilfe und Datenschutzerklärung stehen in der App und zusätzlich öffentlich im Netz – in allen vier Sprachen.

🔒

Alles bleibt auf dem Gerät

Kein Benutzerkonto, keine Anmeldung, keine Übertragung an einen Server. Keine Werbung, keine Tracker.

🗺️

Echte Fahrdistanz

Die Kilometer kommen von Apples Routendienst, nicht aus der Luftlinie. Ohne Netz wird geschätzt – dann sichtbar mit «ca.» gekennzeichnet.

Was dabei interessant war

Ein paar Sachen, die ich beim Bauen gelernt habe.

Luftlinie ist keine Distanz

Die erste Fassung rechnete den Abstand zwischen den Stopps einfach geometrisch – naheliegend und falsch. Bei der Sustenpass-Runde zeigte sie 55 Kilometer, tatsächlich sind es 113. Über alle Testrouten hinweg lag die Schätzung fast 60 Prozent zu tief, weil sich Bergstrassen nun einmal in Kurven den Hang hochziehen. Jetzt rechnet die App über Apples Routendienst die echte Fahrstrecke.

55 kmgeschätzt (Luftlinie)
113 kmtatsächlich gefahren
~60 %zu tief über alle Testrouten

Zwei Bauteile, zwei Meinungen

Ein Fehler, der lange unbemerkt blieb, weil beide Seiten für sich genommen richtig aussahen: Die Streckenberechnung ging vom ersten Stopp aus, die Übergabe an die Karten-App liess die Startadresse jedoch weg – wodurch diese am aktuellen Standort begann. Wer nicht zufällig beim ersten Stopp stand, fuhr eine andere Strecke, als die App auswies. Sichtbar wurde es erst, als jemand fragte, wo man denn den Startort eingebe. Die Lehre: Eine Annahme, die zwei Komponenten unabhängig voneinander treffen, gehört ausgeschrieben – heute steht in der Liste ausdrücklich «Start» und «Ziel».

Eine Berechtigung, die mehr einschaltet als gedacht

Für die Sicherung in iCloud Drive braucht die App die iCloud-Berechtigung. Sobald sie im Programm steht, versucht das Datenbank-Framework von sich aus, eine Synchronisierung über CloudKit aufzusetzen – ungefragt. Deren Bedingungen erfüllte das Datenmodell nicht, die Datenbank liess sich nicht mehr öffnen, und die App startete nicht. Der Build war schon bei den Testern, bevor es auffiel.

Die Ursache stand im Klartext in der Konsole des Simulators; gefunden war sie in Minuten, vermutet hatte ich sie an ganz anderer Stelle. Beim Suchen kam ein zweiter Fehler zum Vorschein, der noch nicht zugeschlagen hatte: Die Fotos wären beim Verschieben der Datenbank verloren gegangen, weil sie in einem versteckten Ordner daneben liegen. Zwei Fehler, ein Nachmittag – und seither zwei Absätze mehr in der Projektdokumentation.

Der Prüfbericht kennt kein «Apple»

Ein Build wurde automatisch abgewiesen, weil in der Beschreibung des Sprachbefehls das Wort «Apple» vorkam – in App-Intent-Texten sind Markennamen nicht erlaubt. Eine Zeile Text, ein neuer Build. Solche Regeln stehen selten dort, wo man sie sucht.

Ein undokumentiertes Detail, am Gerät geprüft

Ob Apple Maps beim Übergeben einer Route wirklich alle Zwischenstopps übernimmt, ist von Apple nicht dokumentiert und liess sich im Simulator nicht abschliessend prüfen. Statt es einfach zu behaupten, blieb es ein offener Punkt – bis der Test auf echter Hardware über TestFlight ihn bestätigte: Eine Route über drei Orte kommt vollständig und in der richtigen Reihenfolge in Apple Maps an.

Das Icon ist Code

Statt einer Bilddatei erzeugt ein kleines Swift-Programm mit CoreGraphics die kurvige Strasse vor dem Abendhimmel – die Strassenbreite verjüngt sich perspektivisch entlang einer Bézier-Kurve. Farben und Form ändert man an einer Stelle und rendert neu.

Ausgeliefert ohne angeschlossenes Gerät

Entwickelt und veröffentlicht wurde remote, ohne iPhone am Mac. Weil Apples automatische Signierung ohne registriertes Gerät kein Profil ausstellt, läuft die Auslieferung über manuelle Signierung und die App-Store-Connect-API – vom Zertifikat über den Upload bis zur Freigabe.

Teilen war als Kleinigkeit geplant

Für Version 2.0 sollten sich Touren mit anderen teilen lassen. Apple bringt dafür etwas Fertiges mit, also stand es als kleiner Punkt auf der Liste. Beim Nachlesen kam heraus: Das Datenbank-Framework, auf dem die App aufbaut, spiegelt ausschliesslich den privaten Bereich der iCloud und kennt Freigaben schlicht nicht.

Damit standen zwei Wege offen – die gesamte Speicherung auf ein älteres Framework umbauen, oder eine eigene Schicht fürs Teilen daneben legen. Es wurde die zweite: Die App behält ihre Speicherung, das Teilen bekommt eigene Datensätze in einem eigenen Bereich. Der Aufwand lag um ein Vielfaches über meiner Schätzung. Immerhin ist es vor der ersten Zeile Code aufgefallen und nicht mittendrin.

Ein Framework, das rät statt zuzuordnen

Fotos sollten sich getrennt von den Routen synchronisieren lassen – ein eigener Schalter, weil Bilder gegen den iCloud-Speicher zählen. Das Framework schaltet die Synchronisierung aber pro Speicher, also bekamen die Bilder einen eigenen: zwei Konfigurationen in einem Behälter, eigentlich ein Lehrbuchfall.

Beim Nachmessen zeigte sich, dass ein solcher Behälter neue Objekte gar nicht nach ihrem Typ zuordnet, sondern einfach in der zuletzt genannten Konfiguration ablegt. Weil der Bilder-Speicher hinten stand, landete dort jede neue Route – und das Programm brach ab. Die App wäre beim Anlegen der allerersten Route abgestürzt, und dieser Build lag zu dem Zeitpunkt bereits bei Apple.

Zwei Dinge daran fand ich lehrreicher als den Fehler selbst. Erstens war er in meinen Tests unsichtbar: Die legten alle Typen in eine Konfiguration im Arbeitsspeicher, und dort kann die Zuordnung gar nicht danebengehen – geprüft wurde also die bequeme Fassung, nicht die echte. Zweitens liess sich die Ursache erst in einem kleinen Beispielprojekt ausserhalb der App festnageln; darin kam auch heraus, dass Umsortieren nichts bringt, sondern den Absturz bloss auf die Fotos verschiebt. Der Ausweg sind zwei getrennte Behälter. Die Einreichung habe ich zurückgezogen, bevor die Prüfung anlief – der neue Build ging am selben Tag hinaus.

Ein Netz, das man nicht misst, ist keines

Bevor 2.0 die Daten auf die neue Struktur umzieht, legt die App ungefragt eine vollständige Sicherung an – das Netz für den Fall, dass beim Umzug etwas schiefgeht. Beim Nachmessen war diese Sicherung 1,5 Kilobyte gross statt der erwarteten 6 Megabyte: Sie las bereits den neuen Ablageort, an dem noch gar nichts lag. Ausgerechnet die Fotos, für die es das Netz gibt, wären nicht drin gewesen. Seither wird die Grösse bei jeder Sicherung mitgeprüft.

1,5 KBtatsächlich gesichert
6 MBhätten es sein müssen

Technisch

Bewusst ohne Server gebaut. Für die ersten Versionen gibt es keinen Grund, die Daten das Gerät verlassen zu lassen – das hält die App schnell, macht die Datenschutzerklärung ehrlich kurz und verursacht keine laufenden Kosten.

Oberfläche
SwiftUI, durchgehend deklarativ
Speicherung
SwiftData, rein lokal; Fotos als externe Anhänge, nicht in der Datenbank
Karten und Suche
MapKit (MKLocalSearch, MKDirections)
Navigation
Übergabe per URL-Schema an Apple Maps und Google Maps
Sprachassistenz
App Intents mit AppShortcutsProvider
Widget
WidgetKit, Datenaustausch über eine App-Group
Sprachen
String-Katalog für Deutsch, Englisch, Französisch und Italienisch
Sicherung
iCloud Drive über den Dateien-Container der App
Datenaustausch
GPX über XMLParser, Teilen per ShareLink und fileImporter
Projektdatei
aus YAML erzeugt (XcodeGen), damit sie versionierbar bleibt
Auslieferung
App Store Connect API, Signierung und Upload skriptgesteuert
Plattform
iOS 17 und neuer

Wie es weitergeht

Version 1.0 ging im Juli 2026 live und wurde von Apple im ersten Anlauf ohne Beanstandung freigegeben. Seither ist die App in kleinen Schritten gewachsen – sechs Einreichungen, alle ohne eine einzige Beanstandung. Erhältlich ist sie in 148 Ländern, in vier Sprachen, gratis und ohne Werbung.

1.0 · 21.07.2026
Planen, abfahren, festhalten
1.1 · 24.07.2026
Verkehrsmittel, Fahrzeit, Statistik, Einstellungen
1.2 · 30.07.2026
Fotos, Jahresrückblick, GPX, Sprachbefehl, Vorschläge
1.2.1 · 31.07.2026
Start und Ziel, «Losfahren ab», Zuhause
1.2.3 · 09.08.2026
Vier Sprachen, Sicherung
1.3 · 12.08.2026
Widget für Home- und Sperrbildschirm, Sicherung in iCloud Drive

Version 2.0 liegt bei Apple in der Prüfung

Sie ist eingereicht, aber noch nicht im App Store – wer die App heute lädt, bekommt Version 1.3. Die Freigabe habe ich bewusst auf «manuell» gestellt: Live geht 2.0 erst, wenn die iCloud-Struktur auf der produktiven Seite wirklich steht. Das ist der grösste Schritt seit dem Start, entsprechend soll da nichts überhastet rausgehen.

🔄

Synchronisierung zwischen Geräten

Bisher ist die Sicherung eine Momentaufnahme zum Zurückholen, kein Abgleich. Mit 2.0 kommt echte Synchronisierung über die iCloud – Routen auf dem iPhone geplant, auf dem iPad weiterbearbeitet.

👥

Touren teilen und gemeinsam planen

Eine Tour mit Freunden teilen, zusammen daran arbeiten und über Zwischenstopps abstimmen. Damit die Frage «wo halten wir an?» nicht mehr im Gruppenchat untergeht.

App für die Apple Watch

Die nächste Tour am Handgelenk, mitsamt Komplikation aufs Zifferblatt – ohne das iPhone hervorzuholen.

📅

Kalender und Treffpunkt

Eine geplante Fahrt landet auf Wunsch im Kalender. Bei gemeinsamen Touren schlägt die App zusätzlich einen Treffpunkt vor, der für alle Beteiligten passt.

Häufige Fragen

Wo kann ich die App herunterladen?
Im App Store, gratis und ohne Werbung: Road4Trip laden → Vorausgesetzt ist ein iPhone mit iOS 17 oder neuer.
Navigiert die App selbst?
Nein, bewusst nicht. Sie plant die Route und übergibt sie an Apple Maps oder Google Maps. Die machen das Navigieren seit Jahren gut – da muss ich nichts nachbauen.
Was passiert mit meinen Daten?
Sie bleiben auf dem iPhone. Es gibt kein Benutzerkonto und keinen Server dahinter, entsprechend wird auch nichts übertragen. Keine Werbung, keine Tracker. Nachzulesen in der Datenschutzerklärung.
In welchen Sprachen gibt es die App?
Deutsch, Englisch, Französisch und Italienisch. Die App folgt der Sprache des iPhones und lässt sich jederzeit in den Einstellungen umstellen.
Kann ich meine Touren sichern?
Ja. Routen, Stopps, Notizen, Bewertungen und die History werden automatisch täglich, wöchentlich oder monatlich gesichert – oder jederzeit von Hand. Ob die Fotos mitgehen, entscheidet ein Schalter. Seit Version 1.3 landen die letzten fünf Stände im Ordner «Road4Trip» im iCloud Drive und überstehen damit auch ein verlorenes oder kaputtes iPhone; wiederherstellen lässt sich jeder Stand einzeln. Das ist eine Sicherung zum Zurückholen, kein Abgleich zwischen mehreren Geräten – echte Synchronisierung kommt mit Version 2.0.
Wann kommt Version 2.0?
Sie ist bei Apple eingereicht und in der Prüfung. Ein Datum nenne ich bewusst keines: Die Freigabe steht auf «manuell», damit 2.0 erst live geht, wenn die iCloud-Struktur auf der produktiven Seite steht. Bis dahin ist Version 1.3 die aktuelle App im Store.
Wo finde ich Hilfe?
Direkt in der App unter «Hilfe und Kontakt» oder öffentlich auf der Support-Seite – ebenfalls in allen vier Sprachen.
Gibt es das auch für Android?
Aktuell nicht. Die App ist für iOS 17 und neuer gebaut.
Wer steckt dahinter?
Ich, Ueli Bernhard aus dem Emmental. Road4Trip ist meine erste eigene iPhone-App – vorher hatte ich mit Swift und iOS nichts zu tun. Gebaut mit viel Try-and-Error und Hilfe von KI-Tools; die Entscheidungen und das Testen bleiben bei mir.