Joseph Humfrey

Joe's blog

Joseph Humfrey is co-founder of inkle & Founder of Selkie Design

Live Activities Are Usually Half Asleep

27th December 2025

Fanta keeps me busy.

Live Activities are a little less alive than I expected.

I went back and forth on whether they were a good fit for my app, Hour by Hour. The feature is powerful, but it has strong opinions and restrictions about how it wants to be used.

Hour by Hour is a day planner that lets you sketch out a plan for your day. It's designed for busy days such as travel where you need to figure out timing, or for tracking a detailed schedule such as at a conference.

Of course, Live Activities are a good fit for this. It just took longer than I expected to get there, mostly because Apple’s APIs are surprisingly limited in a few key ways.

Where things get awkward

Live Activities are clearly designed to be driven by the outside world. Taxis, flight tracking, food delivery. And this means they were designed with push delivery in mind - from a server.

Hour by Hour is not that kind of app. It is almost entirely local and time-based. The schedule usually does not change unless the user edits it. Running a server just to keep a local event “live” would be overkill and silly. (Also I hate server work, and am very bad at it.)

This becomes even more stark when you compare Live Activities to notifications. The notifications API was designed around local scheduling first, before push notifications even existed. Time-based triggers are a core feature. Live Activities were not built that way, and it shows.

Until iOS 26, a Live Activity could only be started now or with a push from a server. No scheduling at all. iOS 26 finally adds the ability to schedule a start:

static func request(
    attributes: Attributes,
    content: ActivityContent<Activity<Attributes>.ContentState>,
    pushType: PushType? = nil,
    style: ActivityStyle,
    alertConfiguration: AlertConfiguration,
    start: Date
) throws -> Activity<Attributes>

That helps. You can now say “start this at 2pm”.

What you still cannot say is “and make this update at 2:30” or “and finish at 3pm”. Live Activities cannot advance based on a timetable. They can only update while the app is open, or when the user triggers an App Intent by interacting with it directly.

You can remove a Live Activity programmatically once you decide it is finished, but only if the app is in the foreground. You just cannot schedule that finishing point in advance.

Interactivity exists via App Intents, but it is slow. Pressing a button takes around two seconds to react, even on an iPhone 17 Pro. There is also no control over animation timing, which makes every interaction feel heavier and even slower than it ought to.

There is a slight philosophical mismatch for my specific app, too. Hour by Hour normally progresses automatically based on time. You do not have to tick things off for the day to move forward. Live Activities want explicit interaction.

The compromise, and why it still works

In the end, I leaned fully into App Intents, and it's basically fine.

In the Live Activity, you tick off events as you go. Once everything is checked off, the activity marks itself as finished and removes itself. It is not quite the model I would choose in a vacuum, but it is predictable, fully offline, and easy to reason about.

It also has an upside. The Live Activity becomes something you actively engage with, rather than a passive progress bar you ignore. Clearing the final item and watching it disappear feels quietly satisfying.

Yes, it is slower than I would like. Yes, I wish it was more responsive. But within Apple’s constraints, it is a compromise I am happy with.

And overall, I think it adds a lot.

Being able to glance at your Lock Screen and see exactly where you are in your day, using a structure you sketched yourself, feels genuinely useful, personal and immediate.

Live Activities might be half asleep, especially when they are running entirely locally. But even half awake, they turn out to be a good companion for a real, messy, human (or cat) day.

More Posts

Godot’s Scene System Is Just Brilliant

28th November 2025

Getting Apple’s tiny on-device Foundational Model to pick SF Symbols in Hour by Hour

14th November 2025

The Selkie Design blog is now Joe's blog

14th October 2025

Substage Predicts...

31st July 2025

Substage ❤️ Setapp

2nd July 2025

The Shortcut to integrating Private Cloud Compute into my app

20th June 2025

Substage update: Bring Your Own AI & One-off purchase out now!

25th March 2025

Introducing Substage: A natural language command bar for Finder

18th March 2025

Hour by Hour has been named!

13th January 2025

Playful visual design for indie apps

3rd December 2024

Exploring CloudKit and CKSyncEngine for my SwiftUI App

16th November 2024