xDay
Eine Todo-App, die nicht fragt, was zu tun ist, sondern ob es in den Tag hineinpasst.
Warum es die App gibt
Jede Aufgabenliste kann eine Sache nicht: rechnen. Sie nimmt zehn Einträge genauso bereitwillig an wie drei und sagt kein Wort dazu, dass der Tag nur acht Stunden hat — davon fünf mit Terminen belegt. Am Abend ist die Hälfte offen, und weil das jeden Abend so ist, wird aus der Liste ein Vorwurf.
xDay schliesst diese Lücke mit einer einzigen zusätzlichen Angabe: wie lange etwas dauert. Daraus wird eine Zahl, die keine andere Liste nennt — wie viel vom Tag noch übrig ist. Und ein Strich in der Liste, ab dem der Tag nicht mehr aufgeht.
Vorbild — und wo es aufhört
Als Massstab diente Microsoft To Do, ausdrücklich als Haltung und nicht als Vorlage: eine ruhige Oberfläche, eine Handlung pro Bildschirm, die Erfassung immer unten und mit dem Daumen erreichbar.
Zwei Dinge sind bewusst Gegenposition. Den Kontozwang gibt es hier nicht — ohne Microsoft-Konto läuft dort nichts, hier gibt es überhaupt keines. Auch der Abgleich seit Version 2.0 läuft ohne Konto beim Anbieter, über das eigene iCloud. Und den Umgang mit Zeit: Dort gibt es Fälligkeiten, aber keine Dauer und kein Budget. Genau diese Lücke ist der Grund für diese App. Wer sie nachbaut, baut die tausendste Liste.
So sieht sie aus
Fünf Ansichten, so wie sie auch im App Store stehen.





Neu in Version 2.0
Seit dem 6. Oktober 2026 im App Store. Die drei grössten Neuerungen:
Auf allen eigenen iPhones
Die Aufgaben gleichen sich über das eigene iCloud des Nutzers ab — nicht über einen Server von mir. Statt «Abgleich aktiv» zeigt xDay, wann zuletzt nachweislich abgeglichen wurde, und «In iCloud nachsehen» fragt direkt nach. Wer nicht abgleichen will, schaltet es aus.
Anhänge
Rechnungen, Briefe und Formulare direkt an die Aufgabe scannen — der Scanner rückt die Seite gerade und macht ein PDF. Fotos aus Kamera oder Mediathek, jedes Mal als Bild oder als PDF; beim Anhängen werden sie verkleinert, und die Ortsangabe fällt weg. Dazu jede Datei aus der Dateien-App bis 20 MB. Die Büroklammer im Eingabefeld hängt das Dokument gleich an die Aufgabe, die gerade entsteht.
Die Apple Watch
Was heute noch frei ist, abhaken, neue Aufgaben einsprechen. Gerechnet wird auf dem iPhone, damit Uhr und iPhone dieselbe Zahl zeigen — die Uhr braucht dafür weder iCloud noch eine eigene Kalenderfreigabe.


Was die App kann
Wenig Funktionen, aber die eine, die sonst fehlt.
Ein Feld, das mitdenkt
«Zahnarzt morgen 14:00 45min» wird zu einer Aufgabe mit Datum, Uhrzeit und Dauer. Kein Formular, keine Auswahlräder — und alles daran ist freiwillig. Wer nur «Milch kaufen» tippt, bekommt genau das.
Ändern, wann immer
Antippen öffnet die Aufgabe: Titel, Dauer, Tag, dringlich. Wischen nach links löscht oder ändert, nach rechts macht es dringlich oder holt die Aufgabe in den heutigen Tag. Seit Version 1.0.2.
Aufgaben per Siri
«Hey Siri, Aufgabe in xDay» und dann der Satz: «Zahnarzt morgen 14:00 45min» wird verstanden wie im Eingabefeld, samt «dringend». Die App bleibt dabei zu, und Siri sagt zurück, was angekommen ist — nicht bloss «erledigt». Seit Version 1.1.
Das Tagesbudget
Hinterlegte Zeitfenster pro Wochentag, davon abgezogen die Kalendertermine — gerechnet ab jetzt und nicht ab Mitternacht. Übrig bleibt die Zeit, die der Tag noch hergibt.
Der Strich, ab dem es nicht mehr aufgeht
In der Liste läuft eine Linie zwischen der letzten Aufgabe, die noch hineinpasst, und der ersten, die nicht mehr passt. Keine Warnung, keine Farbe — eine Grenze, die man sieht, bevor der Tag sie einem beweist.
Reihenfolge ist Priorität
Kein Prioritätsfeld mit drei Stufen, das ohnehin jeder auf «hoch» stellt. Was oben steht, ist wichtiger. Ziehen genügt.
Zwei Bereiche, eine Regel
«Heute» rechnet, «Liste» rechnet nicht. Wer keine Zeit angeben will, arbeitet dort wie in jeder gewöhnlichen Todo-App; eine Wischgeste holt einen Eintrag ins Heute. Die einzige Regel, die man verstehen muss: Was ohne Tag in der Liste liegt, zählt in keine Rechnung.
Auch ohne Rechnen
Ein Schalter in den Einstellungen nimmt das Tagesbudget heraus — dann ist xDay eine gewöhnliche Aufgabenliste: erfassen, ordnen, abhaken. Angegebene Dauern bleiben erhalten und sind wieder da, sobald man zurückschaltet. Beim ersten Start fragt die App, was einem lieber ist.
Erinnerungen, auch dringliche
Aufgaben mit Uhrzeit melden sich. Auf Wunsch als zeitkritische Mitteilung, die auch durch einen Fokus hindurchkommt — eine Berechtigung, die Apple einzeln freigibt. Seit Version 1.1 gibt es dazu in den Einstellungen den Schalter «Dringliche Erinnerungen»: Aus heisst, keine Erinnerung durchbricht den Fokusmodus. Die Markierung an der Aufgabe bleibt dabei erhalten.
Die Morgenfrage
Was gestern liegengeblieben ist, wird beim ersten Öffnen gefragt: heute einplanen, später, oder streichen. Nichts wandert von selbst weiter.
Kalender nur lesen
Die App liest Termine, um zu rechnen. Sie legt keine an und ändert keine — im Code steht keine einzige schreibende Zeile.
Hochkant und quer
Quer rückt die Ansicht zusammen, damit trotzdem Aufgaben zu sehen sind. Seit Version 1.0.3.
Kein Konto, kein Server
Keine Anmeldung, keine Werbung, keine Tracker. Im App Store steht «Keine Daten erfasst». Export aller Aufgaben samt Anhängen als eine Datei, Zurücksetzen mit doppelter Rückfrage.
Was dabei interessant war
Ein paar Sachen, die ich beim Bauen gelernt habe.
Ein Name ist schwerer zu finden als eine Funktion
Zweimal danebengegriffen: xTask war in App Store Connect reserviert, obwohl keine App dieses Namens existiert. xDo liess sich reservieren — bis auffiel, dass es in derselben Kategorie bereits «Xdo – die Todo App» gibt.
Die Lehre steht seither in der Projektdokumentation: Namen auf enthaltene Treffer prüfen, nicht auf exakte, und in mehreren Ländern. Und: Die öffentliche Suche findet nur veröffentlichte Apps — reservierte Namen sieht man erst beim Anlegen. Sie ist ein Indiz, kein Beweis. Die Kennung der App ist nach der ersten Einreichung für immer festgelegt; diesen Fehler macht man genau einmal.
«Geprüft» und «im Regal» sind zwei verschiedene Zustände
Version 1.0 stand auf «bereit zum Verkauf» und war trotzdem nirgends auffindbar, weil ihr in keinem Land eine Verfügbarkeit zugewiesen war. Seither prüft ein eigener Wachdienst beides und meldet per Telegram.
Ein Ausweichspeicher löscht leiser als jedes rm
Unter iOS 27 liess sich der Speicher bei manchen nicht öffnen, und die App stürzte ab. Schlimmer wäre gewesen, was ein «vorsichtiger» Rückfall auf einen neuen, leeren Speicher getan hätte: Sie hätte gestartet, leer gewirkt und darüber geschrieben. Der Hotfix 1.0.4 lässt einen vorhandenen Bestand nie durch einen leeren ersetzen und sagt stattdessen, was los ist.
Ein Knopf, den das System über den eigenen legte
Seit iOS 26 zeichnet das System Knöpfe über der Tastatur als schwebende Kapsel — genau über den Pfeil zum Anlegen, der damit «fast nicht klickbar» war. Gefunden hat es der erste Test am eigenen iPhone, keiner der Tests im Simulator. Behoben in 2.0.
Gegenlesen findet, was Testen nicht findet
Vor 2.0 wurde jede Änderung von mehreren unabhängigen Prüfern gegengelesen, und jeder Befund musste eine gezielte Widerlegung überstehen. Gefunden wurde unter anderem: «Fertig» in der Bearbeitung setzte seit 1.0.2 jede Uhrzeit still auf Mitternacht — die Erinnerung fiel weg, und weil die Zeile keine Uhrzeit zeigt, merkte es niemand. Behoben in 2.0.
Ein Schema, das nur im Browser in die Produktion geht
Der Abgleich braucht ein CloudKit-Schema, und dessen Weg in die Produktion ist der einzige Schritt bei Apple, der still schiefgeht: Fehlt er, gleicht die App bei niemandem ab, und nichts meldet einen Fehler. Deshalb prüft ein Vorflug vor jedem Upload jedes Feld — und sperrt den Upload, bis es steht.
Eine Textersetzung, die Code getroffen hat
Sichtbare Texte tragen Umlaute und nie ein ss-Zeichen. Beim Nachrüsten per Suchen-und-Ersetzen wurde aus dem Suchmuster uebermorgen ein übermorgen — womit die App «uebermorgen» nicht mehr verstand — und aus einem Startargument --ueberhang ein --überhang. Aufgefallen ist es nur, weil ein Test darauf bestand. Seither gilt: nur innerhalb von Textbausteinen ersetzen, Code ausnehmen.
Die Testzahl des Werkzeugs stimmte nicht
Das Bauwerkzeug meldete 29 bestandene Tests, wo 33 vorhanden waren. Der fehlende war nicht durchgefallen, sondern abgestürzt — und der Absturz versteckte sich hinter der falschen Zahl. Verlässlich ist nur, die bestandenen Fälle aus dem Protokoll auszuzählen.
Eine Prüfung zur falschen Zeit findet nichts
Die Morgenfrage nach dem Liegengebliebenen prüfte beim Erscheinen der Ansicht — da ist die Datenbankabfrage aber oft noch leer. Am Gerät wäre die Frage gelegentlich einfach ausgeblieben, ohne dass irgendetwas nach einem Fehler ausgesehen hätte. Die Prüfung hängt jetzt am Datenbestand statt am Zeitpunkt.
Eine App darf sich nicht selbst beenden
Gewünscht war: zurücksetzen, App schliesst, beim Öffnen ist alles neu. Apple rät ausdrücklich davon ab — für den Nutzer ist ein Programm, das sich schliesst, nicht von einem Absturz zu unterscheiden, und in der Prüfung ist es ein Ablehnungsgrund. Stattdessen steht nach dem Bestätigen wieder die Einführung da: dasselbe Ergebnis, ohne den faulen Trick.
Der Datenschutz-Fragebogen ist die einzige Handarbeit
Beschreibung, Suchbegriffe, Kategorien, Preis, Altersfreigabe, Screenshots, TestFlight — alles läuft über die App-Store-Connect-Schnittstelle. Nur der Fragebogen zur Datenerfassung hat keinen Endpunkt; die zuständigen Adressen antworten mit «nicht gefunden». Ausgefüllt wurde er am Ende über einen ferngesteuerten Browser.
Technisch
Das Rechnen ist von der App getrennt. Der Teil, der das Tagesbudget ausrechnet, kennt weder Datenbank noch Kalender noch Oberfläche — er bekommt Zeitspannen und Dauern und gibt eine Zahl zurück. Deshalb lässt sich der Kern der App beweisen, statt ihn auszuprobieren: Zum Start waren es 33 Tests, der grösste Teil davon auf dieser Rechnung. Mit Version 1.1 waren es 57 Einheits- und 18 Oberflächentests; mit 2.0 sind es 99 Einheitstests und 25 Bedienungstests, die auf iOS 27 und iOS 26 die App tatsächlich bedienen — tippen, drehen, wischen, anhängen.
- Oberfläche
- SwiftUI, durchgehend deklarativ; iPhone und seit 2.0 Apple Watch
- Speicherung
- SwiftData, lokal — seit 2.0 gespiegelt in die private CloudKit-Datenbank des Nutzers; kein Konto
- Uhr
- WatchConnectivity: Das iPhone rechnet, die Uhr zeigt und bittet um Änderungen (seit 2.0)
- Kalender
- EventKit, ausschliesslich lesend
- Anhänge
- VisionKit (Scanner), PhotosUI (Auswahl ohne Mediathek-Freigabe), PDFKit; Dateien ausserhalb der Datenbank (seit 2.0)
- Mitteilungen
- UserNotifications mit
interruptionLevel: .timeSensitive, abschaltbar über «Dringliche Erinnerungen» - Eingabe
- eigener Parser für Datum, Uhrzeit und Dauer im Fliesstext
- Siri
- App Intents; der gesprochene Satz läuft durch denselben Parser wie das Eingabefeld
- Tests
- 99 Einheitstests und 25 Bedienungstests auf iOS 27 und iOS 26 (Stand 2.0)
- Projektdatei
- aus YAML erzeugt (XcodeGen)
- Auslieferung
- App Store Connect API, Signierung, Upload, TestFlight und Store-Texte skriptgesteuert
- Plattform
- iOS 18 und neuer, seit 2.0 auch watchOS 11 und neuer; im Hoch- und Querformat, nur auf Deutsch
Zeitspannen zusammenlegen, bevor man abzieht. Kalendertermine dürfen sich überschneiden. Wer sie einzeln abzieht, zieht eine doppelt belegte Stunde zweimal ab — und der Tag sieht voller aus, als er ist. Überlappende und aneinandergrenzende Spannen werden deshalb erst verschmolzen, dann subtrahiert.
Aufgaben ohne Dauer werden ausgewiesen, nicht verschwiegen. Sie können nicht ins Budget einfliessen; sind es viele, wäre jede Zahl zu optimistisch. Also steht daneben, wie viele es sind: «noch 3 Stunden frei · 4 Aufgaben ohne Dauer». Eine ehrliche Lücke schlägt eine falsche Gewissheit.
Ein Vorflug vor jedem Upload. Ein Skript prüft, ob jedes Feld des Modells im CloudKit-Schema der Produktion steht, ob «Was ist neu» den Build kennt, und ob in irgendeinem Text für Apple eine Umschrift statt eines Umlauts steht.
Ein Testmodus, den niemand versehentlich findet. Hinter einer bewusst unauffälligen Geste und einem Passwort lässt sich mit Beispieldaten arbeiten, ohne den echten Bestand anzufassen.
Die App ist die Quelle der Texte. Hilfe und Datenschutzerklärung stehen einmal im Code; ein Skript erzeugt daraus die öffentlichen Webseiten, die Apple als Support- und Datenschutz-Adresse verlangt. So können App und Webseite nicht auseinanderlaufen.
Stand
xDay ist seit dem 27. August 2026 im App Store — gratis, ohne Werbung, für iPhone ab iOS 18 und seit 2.0 auch für die Apple Watch, nur auf Deutsch. Vorher lag ein Build auf TestFlight. Aktuell ist Version 2.0 vom 6. Oktober 2026: Abgleich über das eigene iCloud, Anhänge und eine App für die Apple Watch. Davor brachte 1.1 Siri und den Schalter «Dringliche Erinnerungen».
Von der ersten Idee bis zur Einreichung vergingen zwei Tage: Konzept, Namenssuche, Symbol, App, Tests, Webseiten, Store-Eintrag, TestFlight. Was zwischen den beiden Tagen lag, war kein Code, sondern die erste Rückmeldung — das Erfassen war zu umständlich, die Auswahlfelder passten nicht in ihre Zeilen, und es fehlte die Möglichkeit, eine Aufgabe ohne Zeitangabe zu notieren. Alle drei Punkte sind in 1.0 behoben.
- 1.0 · 27.08.2026
- Tagesbudget, der Strich, Morgenfrage, Kalender nur lesend
- 1.0.2 · 06.09.2026
- Einfache Liste als zweiter Modus, Aufgaben nachträglich ändern, mehrere Fehler behoben
- 1.0.3 · 14.09.2026
- Querformat: Heute, Liste und Einstellungen drehen mit
- 1.0.4 · 18.09.2026
- Hotfix für iOS 27: kein Absturz mehr, wenn sich der Datenspeicher nicht öffnen lässt
- 1.1 · 22.09.2026
- Aufgaben per Siri, Schalter «Dringliche Erinnerungen»
- 2.0 · 06.10.2026
- iCloud-Abgleich, Anhänge, Apple Watch
Als Nächstes: Auf der Ideenliste stehen ein Widget mit Direkteingabe, Erfassen über das Teilen-Menü, wiederkehrende Aufgaben, Suche und eine Rückschau «geschätzt gegen gebraucht».
Unabhängig von Road4Trip
Kein gemeinsamer Code, keine gemeinsamen Kennungen, keine Abhängigkeit in eine der beiden Richtungen. Übernommen wurde ausschliesslich Erfahrung — die Arbeitsweise mit XcodeGen, die Auslieferung ohne angeschlossenes Gerät, Texte als Quelle im Code. Zur Road4Trip-Seite →