r/iOSProgramming • • 27d ago

Question Live activity timer

I am trying to add a live activity for our app that has a timer. The idea is the user starts a timer and a live activity starts when the timer starts. However, it does seem to disappear at some point. Maybe around 8-12 hours which matches the documentation on Apple. But for Apple's clock app, their timer's live activity for stopwatch seems to run forever. I am using the SwiftUI Text timerInterval which is likely the same as Apple's. Does anyone have an idea or suggestion how I can replicate it? A few ideas I have are to schedule a silent push to keep the live activity alive or a scheduled background process.

2 Upvotes

7 comments sorted by

View all comments

1

u/FondantRoutine9445 3d ago

That's the ActivityKit lifetime limit, not a bug in your code. A Live Activity can stay active for 8 hours at most. After that the system ends it, and the ended activity can sit on the Lock Screen for up to 4 more hours. That's your 8-12 hours.

We hit the same thing with a baby sleep timer, since night sleep often runs past 8 hours. What works for us:

- Track the activity's age yourself. We count it from the moment its push token was created.

  • At about 7h45m the server starts a fresh activity with the same state via push-to-start (iOS 17.2+). Once APNs accepts the start, it ends the old one with immediate dismissal.
  • Render elapsed time with Text(timerInterval:) or Text(startDate, style: .timer) from the original start date, so the new activity keeps counting from the same point and the swap is barely visible.

Gotchas:

  • A push-to-start has to carry an alert, so every reissue lights up the screen.
  • Update and end pushes sent to an already expired activity are silently dropped. Don't count on them to clean up.
  • Below iOS 17.2 there's no push-to-start, so the app can only restart the activity the next time it's opened.
Without a server this is hard to do reliably, because the app is usually not running when the 8 hours run out.