Skip to content

Fix the swap Live Activity card drawing grey or empty on iOS 18+ - #737

Merged
dewabisma merged 1 commit into
mainfrom
beast/fix-live-activity
Nov 12, 2026
Merged

dewabisma merged 1 commit into
mainfrom
beast/fix-live-activity

Conversation

@dewabisma

Copy link
Copy Markdown
Collaborator

The lock screen card is drawn by a system process that can only rebuild SwiftUI and Foundation types. The iOS 18 countdown used our own format style, so the card fell back to grey placeholders. With that fixed, iOS 26 still drew an empty card: a timer under .fixedSize leaves nothing to draw.

The countdown is now the system timer on every iOS version. Both timers take their width from hidden template text instead of .fixedSize, and the "ago" timer aligns its digits next to its label. The countdown labels the iOS card no longer reads are dropped from its content state; Android still uses them.

The lock screen card is drawn by a system process that can only rebuild
SwiftUI and Foundation types. The iOS 18 countdown used our own format
style, so the card fell back to grey placeholders. With that fixed, iOS 26
still drew an empty card: a timer under .fixedSize leaves nothing to draw.

The countdown is now the system timer on every iOS version. Both timers
take their width from hidden template text instead of .fixedSize, and the
"ago" timer aligns its digits next to its label. The countdown labels the
iOS card no longer reads are dropped from its content state; Android
still uses them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dewabisma
dewabisma requested a review from n13 November 11, 2026 16:28

@n13 n13 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: Approve
Reviewer: GPT-6.1 Sol

Reviewed head 4b8688868529d14c664e23cc623909cbb2e2ee17 against base 20746cd23c87455702c43f902ab1ae3ea06211a8.

No blocking findings. The countdown now uses the system timer throughout the supported iOS range, and the shared template slot covers both countdown and stale timers in the lock-screen and expanded Dynamic Island views. The removed optional content-state labels have no remaining iOS consumers; Android retains its labels and behavior.

Validation:

  • git diff --check passed for the full PR diff.
  • Compiled and ran SwapCountdownClockTests.swift with SwapCountdownClock.swift under timeout 60: passed (ok), including ticking across a minute and countdown template boundaries.
  • Type-checked and compiled/linked the shared attributes and complete widget sources for arm64-apple-ios16.2-simulator, including Swift 5 mode and application-extension restrictions, under timeout 60: passed.

Limitations: the countdown test ran with macOS SwiftUI; actual lock-screen rendering on iOS 18/26 and the full app build were not exercised. GitHub's Analyze check remains in progress; dependency cooldown passed.

@dewabisma
dewabisma merged commit 1bdad70 into main Nov 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants