Linus Fritz
Projekt · 2026

Grit

Gym-Tracker für iPhone

Die App schreibt Krafttraining mit und rechnet daraus die nächsten Schritte. Kein Konto, kein Server, keine Anmeldung. Alles liegt auf dem Gerät.

01 Version 1.1 im App Store

Was die App macht

Sie kennt 90 Geräte. Für jedes schreibt sie Satz für Satz mit: Gewicht, Wiederholungen und wie schwer der Satz war. Daraus schlägt sie das nächste Gewicht vor, setzt die Pausenlänge, baut Aufwärmsätze und rechnet die Statistik.

Fünf Bereiche: Heute, Geräte, Statistik, Cardio, Profil. Der Heute-Tab beantwortet eine Frage, nämlich was heute dran ist. Trainings- und Körpergewicht gehen an Apple Health.

Version
1.1, live seit 13.08.2026
Erste Fassung
15.07.2026
Mindestsystem
iOS 17
Größe im Store
4,7 MB
Code
85 Swift-Dateien, davon 42 Services und 31 Views
Tests
426 grün, in 41 Testdateien
Sprachen
Deutsch und Englisch, 801 Schlüssel
Bundle-ID
de.linusfritz.grit
Heute-Tab mit Tagesvorschlag, Wochenziel und Streak
Heute-Tab mit Tagesvorschlag
Geräteliste nach Muskelgruppen
Geräteliste, 90 Einträge
Statistik mit Bestwerten und Volumen
Statistik und Bestwerte
SwiftSwiftUISwiftDataHealthKitWidgetKitActivityKitSwift Testing
02

Der Aufbau

Die App hat drei Schichten. Views zeigen an. Models halten die Daten in SwiftData. Services rechnen.

Die Regel dahinter trägt das ganze Projekt: ein Service rechnet und kennt das System nicht. Uhr, Ton, Haptik und HealthKit werden als Protokoll hineingegeben. Im Test steht dort ein Ersatz. Deshalb braucht kein Test ein Gerät, eine Uhrzeit oder eine echte Gesundheitsdatenbank.

Das ist der Grund für die 426 Tests. Sie prüfen keine Oberfläche, sondern Rechnungen mit festen Eingaben. Ein Fehler im Gewichtsvorschlag ist damit in Sekunden reproduzierbar statt erst im Gym.

Was gerechnet wird

Das ist die eigentliche Substanz der App. Jede Zeile ist ein eigener Service mit eigenen Tests.

RechnungWas sie macht
ProgressiveOverloadGewichtsvorschlag. Plus 2,5 kg, wenn alle Sätze gehalten wurden. Ein Deload-Schalter erzwingt leichtere Vorschläge.
OneRepMaxGeschätztes Ein-Wiederholungs-Maximum nach Epley, je Satz und über den Verlauf.
RestByRPEPausenlänge. Basis plus Zuschlag nach empfundener Anstrengung: fordernd 30 s, am Limit 60 s. Liefert auch die Erklärzeile unter dem Timer.
WarmupSuggestionZwei Aufwärmsätze als Rampe aus dem Arbeitsgewicht.
MuscleReadinessErholung je Muskelgruppe aus dem eigenen Verlauf. Basis der Gruppe mal Satzzahl mal Anstrengung.
WeeklySetTargetArbeitssätze je Muskelgruppe diese Woche gegen den Richtwert.
FatigueTrendErkennt steigende Anstrengung über die letzten Trainingstage.
WeightTrendKilo pro Woche als Regressionssteigung aus dem Health-Gewichtsverlauf.
DailySuggestionDer Tagesvorschlag. Fasst Erholung, Anstrengungstrend, offene Wochensätze und Planhistorie zu einem Satz zusammen.
Entscheidung: local-first und kein Backend

Ein Backend hätte Synchronisation über mehrere Geräte gebracht. Es hätte auch Konto, Passwort, Server, laufende Kosten und eine Datenschutzerklärung für Trainingsdaten bedeutet. Die App braucht nichts davon, um ihre Aufgabe zu erfüllen. SwiftData auf dem Gerät reicht. Der Server-Pfad liegt im Code und ist in Version 1 abgeschaltet.

Entscheidung: Erholung ohne Apple Watch

Ausgangsfrage war, ob der Hinweis „deine Muskeln brauchen noch Zeit" eine Apple Watch braucht. Für den Körper-Score schon, der lebt von Schlaf, Ruhepuls und Herzratenvariabilität. Für die Muskeln nicht. Wann eine Gruppe zuletzt wie hart dran war, steht längst im eigenen Trainingsverlauf. Es fehlte nur die Rechnung. Beide Werte bleiben getrennt, weil sie Verschiedenes messen.

Entscheidung: Geräte ausblenden statt löschen

Wer ein Gerät aus seiner Liste nimmt, blendet es aus. Gelöscht wird nichts. Löschen würde den Namen aus allen alten Einträgen nehmen, und damit wäre der Verlauf kaputt. Die Auswahl-Listen zeigen deshalb nur die behaltenen Geräte, die Nachschlage-Stellen den vollständigen Katalog.

Offen

Version 1.2 ist gebaut und noch nicht eingereicht. Sie bringt die Muskel-Erholung in den Heute-Tab. Im Store steht bis zur Freigabe weiter 1.1.

Zweite Plattform

Es gibt Grit auch für Android. Die Fassung ist der Vollständigkeit halber gebaut und hinkt hinterher: kein Play-Eintrag, keine Gesundheitsdaten, keine Widgets. Die Rechenregeln teilen sich beide Apps trotzdem.

Zur Android-Fassung