What changed

Every DopaLoop release, what it changed, and why. No marketing vocabulary, no roadmap promises, just what actually shipped.

Releases and what they actually do

This page is my changelog with every version, what it changed, and why. I am not trying to sell you anything here. I describe what actually shipped, including the bugs I fixed and the things I removed from older versions because they technically did not deliver what I had promised. If something here looks off, write me.

  1. v1.1.14

    In TestFlight

    Real Alarm is finally selectable. Tapping the card now triggers the iOS authorization dialog instead of just sitting there.

    The dead-end bug from v1.1.13

    On a fresh iOS 26 device, the first tap on "Real Alarm" did nothing. The card was dimmed because AlarmKit authorization was still pending — but the tap that should have asked for that authorization never went through. SwiftUI swallowed the tap before the auth flow could run. Dead end. Now: a tap surfaces the iOS dialog, a yes activates the tier immediately, a no leaves your previous choice in place.

    On iOS below 26 the card stays hard-disabled

    AlarmKit simply does not exist there. The card is visible so you know it will be available on iOS 26, but it does not respond to taps.

  2. v1.1.13

    In TestFlight

    Reminder tier configurable per habit — even when the habit is attached to a Morning or Evening Routine.

    Pick the tier where you need it

    Before, you could only pick the tier (Gentle, Time Sensitive, Real Alarm) for habits with a custom reminder time. If your habit was attached only to a routine, the choice was hidden in global Settings — with no hint from the habit screen. Now you see a dedicated tier picker for each active source inside the habit (Morning Routine, Evening Routine, custom time). That way you can escalate one important habit to Real Alarm without making the whole routine louder for every other habit in it.

    Global default still applies

    The setting in Notifications is still the default for every participating habit. Picking a tier on a habit only overrides that one habit — everything else keeps following the global default. A "Reset to global default" button keeps the choice reversible.

    Anchor concept removed

    The old description "Real Alarm — for anchor routines only" hinted at a feature that never existed in the code. There was no "anchor habit" flag, no toggle, no gate. The new text says what it means: "Breaks through Silent Mode too. Reserve this tier for a few important routines."

  3. v1.1.12

    In TestFlight

    The tier names collided between "how loud" and "how persistent" — the persistence tiers now have distinct names.

    Duplicate names fixed

    With the two axes from v1.1.8, the picker suddenly showed "Gentle" twice and "Time Sensitive" twice — once for the loudness of the first reminder, once for the persistence of the repeats. Confusing. The axes are now clearly separated: loudness = Gentle / Time Sensitive / Real Alarm. Persistence = Just once / Repeats / Frequent / Relentless.

    More honest descriptions

    In v1.1.8 the tiers "Frequent" and "Relentless" had the same 15-minute cadence as "Repeats". The descriptions now say so plainly, instead of promising a tighter cadence the code does not actually deliver. If you had picked a tier before, the behavior is unchanged — only the name is clearer.

  4. v1.1.11

    In TestFlight

    Two correctness fixes: the authorization dialog was popping up at launch, and stale AlarmKit alarms were lingering after a tier change.

    No more authorization dialog at launch

    In v1.1.10 the AlarmKit authorization dialog appeared right at the first app launch. The cause was an observer subscribed to AlarmKit status changes during app init — and iOS interpreted that subscription itself as an authorization request. The observer is gone. Instead: a synchronous read at startup (which does not trigger the dialog) plus a manual refresh when you bring the app back to the foreground. The dialog now only appears when you actually tap "Real Alarm".

    Stale alarms cleaned up when you switch tiers

    If you downgraded a habit from "Real Alarm" to "Time Sensitive", the old AlarmKit alarm stayed armed — alongside the new notification. You could have been reminded twice. Now switching tiers cleans up the other backend before scheduling the new one.

  5. v1.1.10

    In TestFlight

    Lock Screen buttons on AlarmKit alarms: Done and Skip today work right from the lock screen.

    Action buttons on the alarm alert

    When a "Real Alarm" (iOS 26+) goes off, you can now tap Done right on the Lock Screen — the habit is checked off with default intensity — or Skip today, which stops the alarm without breaking your streak. Both actions run via App Intents, so you do not need to open the app.

  6. v1.1.9

    In TestFlight

    AlarmKit is in. On iOS 26+ you can now actually pick "Real Alarm" — and the alarm then breaks through Silent Mode too.

    What AlarmKit is

    AlarmKit is Apple's new framework for interruption-capable alarms — the same category as the system Clock app. Unlike regular notifications, they ring through Silent Mode and Focus too. iOS requires its own authorization for them, granted per app.

    Where it lands in DopaLoop

    The "Real Alarm" tier no longer falls back to "Time Sensitive" — it uses AlarmKit directly. On first tap, iOS asks for authorization. If you decline, the habit falls back to "Time Sensitive" and the tier shows as dimmed.

    What changes on iOS below 26

    Nothing. The "Real Alarm" card stays with the "iOS 26+" hint and is not selectable. Existing habits behave exactly as before.

  7. v1.1.8

    In TestFlight

    Two separate tiers per habit: how loud the first reminder should be, and how persistent the repeats become.

    Two axes instead of one

    Before this release the tier of a habit was a single dial. You picked between Gentle, Time Sensitive, Persistent, and Live Activity. The problem: the loudness of the first reminder and the frequency of the repeats are two separate things that were trapped inside one selection. Now there are two pickers: one for "how loud should the first reminder be" (Gentle, Time Sensitive, or on iOS 26 a real alarm) and one for "how persistent should it get if I do not check in". Both work independently. Existing habits keep their behavior exactly. If you had picked Persistent before, you will see no difference.

    Routine reminders can be time-sensitive now too

    In Settings you can set morning and evening routines to Gentle or Time Sensitive separately. Previously only habit-specific reminders could use the time-sensitive channel. If you want your morning routine to break through Focus modes because it matters that much, you can now set it.

    Preparing for real alarms (iOS 26+)

    You will see a third option "Real Alarm" with an "iOS 26+" badge in the tier picker. It is visible but not yet selectable. The next update enables this option and it will then break through Silent Mode too, for anchor routines like medication or wake-up only. Apple does not require a separate application for this capability (despite rumors to the contrary), only an honest usage description in the app configuration.

    Under the hood

    The reminder system got a new routing layer (ReminderScheduler) that decides between standard notifications, time-sensitive notifications, and alarm mechanisms. None of that is visible to you directly, apart from the new pickers. But future versions can build on this without sprinkling AlarmKit branches across the rest of the code.

  8. v1.1.7

    Live on the App Store

    Three fixes from the Issue #126 audit: Live Activity no longer triggers on save, permission prompt for routines, App Store copy aligned again.

    Live Activity no longer appears too early

    The Lock Screen Live Activity used to appear when you saved a habit, not when the reminder was due. Same shape as the watch haptic fix from v1.1.6: a side effect firing at the wrong time. Full Lock Screen support is coming with AlarmKit (iOS 26+).

    Permission prompt for routine reminders too

    If you enabled only the morning or evening routine for a habit, DopaLoop previously did not ask for the notification permission. Your routine reminders could silently never fire. The app scheduled them, iOS quietly dropped them because the permission was missing. The soft prompt now appears in this case too.

    App Store description aligned again

    The tier names in the App Store description no longer matched the ones in the app after I had renamed them in v1.1.6. The store now reads what you actually see in Settings.

  9. v1.1.6

    Live on the App Store

    Honest reminders. Watch haptic bug fixed, misleading tier names corrected, RSD-friendly hint when too many sources are active.

    Watch haptic no longer fires on save

    The Apple Watch used to vibrate when you saved or edited a habit, not when the reminder was actually due. That haptic was firing at the wrong place and should never have been there. A local notification cannot run code in the background, so it cannot trigger a watch haptic at fire time. I described this more honestly: watch alerts come through the system mirror, not through a DopaLoop-specific haptic channel.

    Tier names now say what they are

    The four reminder tiers are now Gentle, Time Sensitive, Persistent, and Live Activity. Previously they were Standard, Time Sensitive, "Time Sensitive + Watch Vibration", and Cheerleader Mode. The old names promised behavior the system did not deliver. I removed watch crescendos and sound chords from the descriptions because I could not guarantee them.

    Hint when too many reminder sources are active

    When you enable morning routine, evening routine, and a custom time for the same habit at once, the app now shows a gentle hint: more reminders does not mean more success. For most habits, one source is enough — usually the morning or evening routine. This is not a block, just a note. If you really need three reminders, you can keep them.

Older versions before v1.1.6 are not listed here. This changelog starts with the reminder refactor, the point where I began checking every UI claim against what the app actually does. Before that point, some descriptions were less honest than they should have been.

What changed — DopaLoop