DebugLog.write is called from any thread, but its relay assumed the
main actor. MetricKit delivers payloads on a background queue, so
CrashReports.didReceive trapped in MainActor.assumeIsolated on launch,
and every crash queued another payload for the next launch.
Claude-Session: https://claude.ai/code/session_01KN6Wd5bdgWERis2b4x9Rm3
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
- Drop the private UIApplication suspend selector (guideline 2.5.1); Cmd+H and the home flick remain
- iphoneagent:// debug commands only in Debug builds, so web pages can't start runs
- MetricKit crash/hang reports kept in Documents/diagnostics and included in Export all logs
- About › Report a bug opens a prefilled GitHub issue
- PrivacyInfo.xcprivacy for app and widget; ITSAppUsesNonExemptEncryption = false
- App and widget share MARKETING_VERSION / CURRENT_PROJECT_VERSION
- fastlane beta: Release archive with the LLM preset cleared and checked, then TestFlight upload
- Store listing draft (fastlane/metadata) and docs/privacy.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SwiftUI app: BLE link, VideoToolbox decode, planner/actor loop ported from the server, pointer calibration and
aim, four-step setup, run replay and review, Live Activity / Dynamic Island, widgets, Siri and Shortcuts,
self-healing when the board, hotspot or mirroring drops, redacted run export. Prompts live in prompts/.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>