Skip to content

Fix blank recording Live Activities on the lock screen - #150

Merged
tiensonqin merged 1 commit into
mainfrom
codex/recording-lockscreen-render
Nov 4, 2026
Merged

tiensonqin merged 1 commit into
mainfrom
codex/recording-lockscreen-render

Conversation

@tiensonqin

@tiensonqin tiensonqin commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Recording could leave an empty black Live Activity on the lock screen. The timer's fixedSize() layout produces NaN root widths in WidgetKit's archived renderer, even though an in-process SwiftUI preview renders successfully.

Size the running timer with hidden monospaced placeholder text and overlay the live timer. Add a simulator regression check that backgrounds the harness and inspects actual WidgetKit archived frames for the lock-screen card and compact Dynamic Island timer.

Validation:

  • The regression check rejects the original recording activity's NaN frames.
  • The fixed activity passes all 25 system-rendered layouts, including the lock screen and compact timer; lifecycle, transcription coalescing, payload limits, and return-to-recording checks pass.
  • Simulator and signed device builds pass. Complete bundle verification confirms the app, Live Activity, two widgets, two controls, four App Shortcuts, share extension, and native core.

Devin Review

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 1 potential issue.

Devin Review

Comment on lines +23 to +28
frame = re.search(r"\(frame \(([^)]+)\)\)", entry)
if frame is None:
raise AssertionError("The system-rendered activity has no layout frame")
values = frame[1].replace(";", " ").split()
if not all(math.isfinite(float(value)) for value in values):
raise AssertionError(f"Invalid system activity layout: {frame[0]}")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔍 Timer visibility remains untested

validate_render rejects nonfinite frames but accepts zero-sized ones. The check can pass even when the timer occupies no visible space.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

@tiensonqin
tiensonqin merged commit 3b6c99b into main Nov 4, 2026
3 of 4 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.

1 participant