Environment:
- Xcode 26.4 (17E192)
- iOS 26.4.1
- iPhone 15 Pro
- Project uses PBXFileSystemSynchronizedRootGroup (Xcode 26 format)
Setup:
- Widget Extension target named ModusWidgetExtension
- Bundle ID: com.calvin.Modus.ModusWidget
- NSSupportsLiveActivities = YES in both main app and widget extension Info.plist
- Live Activities enabled in Settings → Modus
- Live Activities enabled in Settings → Face ID & Passcode → Allow Access When Locked
- Background App Refresh enabled
- Push Notifications capability on both targets
- ActivityAttributes struct added to both targets via file target membership
Behaviour:
- ActivityAuthorizationInfo().areActivitiesEnabled returns true
- Activity.request() succeeds and returns a valid activity ID
- No error is thrown
- Nothing appears on lock screen or Dynamic Island in foreground or background
- Widget preview in Xcode renders correctly for all presentations (compact, minimal, expanded, lock screen)
Console output from liveactivitiesd filtered logs:
- "Foreground process is permitted to update activity"
- "XPCInputParticipant has no activity for update" (ERROR — repeated)
- "Received state update for [app<com.calvin.Modus>], running-active-NotVisible"
The activity is being created and the system is receiving state updates, but the widget extension is not rendering it. The XPCInputParticipant error suggests the widget extension process cannot find the activity created by the main app.