Widgets & Live Activities

RSS for tag

Discuss how to manage and implement Widgets & Live Activities.

WidgetKit Documentation

Posts under Widgets & Live Activities subtopic

Post

Replies

Boosts

Views

Created

Live Activity / Dynamic Island countdown responds to manual device clock changes, while app timer and shielding remain correct
Our app runs offline-first focus sessions using FamilyControls / ManagedSettings shielding and DeviceActivity monitoring. The in-app session timer is protected against wall-clock manipulation by using monotonic elapsed time, and the shield remains active correctly when the user manually changes the iPhone clock. However, the Live Activity and Dynamic Island countdown appear to use the device's wall clock for their timer rendering. If the user changes the device time from Settings during an active session, the Live Activity / Dynamic Island countdown immediately jumps forward or backwards, even though the underlying session has not changed. Is there a recommended ActivityKit approach for rendering a Live Activity / Dynamic Island countdown that is resistant to manual device clock changes? If not, is this an expected limitation of Live Activity timer rendering? And is there any supported way for the host app or widget extension to detect wall-clock manipulation so the Live Activity can be corrected, dismissed, or replaced with a safer non-countdown state?
0
0
82
4d
Receiving MPMusicPlayerController playback notifications when app is suspended
Heyy, I'm building a music tracking app that logs a user's Apple Music plays to build a personal weekly chart. The core mechanic depends on accurately counting how many times a user plays each track. My current implementation uses MPMusicPlayerController.systemMusicPlayer with beginGeneratingPlaybackNotifications() and observes MPMusicPlayerControllerNowPlayingItemDidChange. This works well when the app is in the foreground or recently backgrounded, but notifications stop firing once iOS suspends the app. To get around this I've implemented: applicationDidBecomeActive - restarts the monitor and logs the currently playing track on every foreground Background fetch (performFetchWithCompletionHandler) - periodically wakes the app to log what's playing. This gives some coverage but misses plays that happen between background fetch intervals or when the user hasn't opened the app in a while. The result is an inaccurate play count which undermines the core feature. My questions: Is there a supported entitlement or capability that would allow an app to receive MPMusicPlayerController playback notifications while suspended? Is MusicKit or MediaPlayer the recommended framework for this use case, or is there a better API I'm not aware of? Are there any supported background modes that would keep playback notification delivery alive without requiring the app to be a full audio player? I've looked at MusicRecentlyPlayedRequest but it only returns the last 25 items with no play counts, so it can't tell me a track was played 10 times vs once. Any guidance on the right approach here would be really appreciated.
2
0
103
5d
Can the same widget in an Xcode project support multiple targets?
Hello everyone, my app A now supports iOS Widget C under the same Xcode project. Now I have another app B under this project, and I hope it can also support this Widget C. What should be done? How should the app group be configured? I have found some solutions: for example, add this key under the info.plist corresponding to app B: NSExtension NSExtensionPointIdentifier com.apple.widgetkit-extension NSExtensionPrincipalClass $(PRODUCT_MODULE_NAME).WidgetEntryView However, when I configured it and started running, not only could I not see the support Widget C, but the screen also went black. Thank you all.
1
0
143
1w
Minimum achievable latency for ending a Live Activity after app force-kill via APNs push-to-end
Context I'm building a study-timer feature for an iOS app (Flutter + native ActivityKit) that displays a Live Activity on the Lock Screen / Dynamic Island while a session is running. When the user force-quits the app by swiping it up from the App Switcher, I want the Live Activity to disappear as quickly as possible. I have already confirmed (from on-device testing and Apple Developer Forums thread 732418) that: applicationWillTerminate is not called on swipe-up force-kill, only on OS-initiated termination or crash. So synchronous Activity.end(...) from the app itself is not a solution for the force-kill path. Shortening staleDate does not visually dismiss the Live Activity once the app process is gone — the Widget Extension keeps rendering the last fresh snapshot and there is no body-reevaluation trigger on the stale transition post-app-death. (I implemented and verified this, then rolled it back.) The only Apple-official reliable mechanism is APNs push-to-end (Activity.request(pushType: .token) + server sends event: end via APNs). Current architecture I have APNs push-to-end working end-to-end. Structure: Client: Activity.request(pushType: .token), subscribe to Activity.pushTokenUpdates, forward each new token to the backend. Backend: On every client heartbeat, upsert (user_id, la_apns_token, la_activity_id, last_heartbeat) into Postgres. A separate scheduler polls for rows whose last_heartbeat < now() - grace_ttl and sends APNs event: end to the stored token. Parameters I am currently running with: Parameter Value Client heartbeat interval 60 s Orphan grace TTL (server) 135 s (heartbeat × 2.25, to absorb network jitter) Scheduler poll interval 30 s The observation End-to-end latency from "user force-kills the app" to "Live Activity disappears from Lock Screen" is: Worst case: 60 + 135 + 30 = ~225 s (~3.75 min) Typical: ~3 min (as consistently measured on iOS 26.4.1, iPhone 17 Pro Max) Theoretical minimum (if the kill happens exactly at a heartbeat boundary): ~135 s Users perceive 3 minutes as broken — the timer clearly stopped (no ticking), but the Live Activity "ghost" is still visible on the Lock Screen. My question Is there any Apple-supported mechanism to reliably tear down a Live Activity faster than ~2 minutes after the owning app's process is gone, given that applicationWillTerminate does not fire on swipe-kill? Specifically: Is there any practical lower bound below ~60 s for this scenario using the current ActivityKit + APNs model, assuming we are not willing to spam heartbeats every few seconds? I can push heartbeat to 20–30 s, but the server cost grows linearly with active sessions. Does BGAppRefreshTask / BGProcessingTask have any documented lifecycle hook that fires on user-initiated swipe-kill specifically, so that I could do a "last-heartbeat flush" just before the process dies? My understanding is that background tasks are scheduled for later and do not fire synchronously at termination. Is there any signal from APNs/ActivityKit to my server (e.g. a feedback-service-like mechanism) that indicates "this Live Activity's owning app was force-killed", which would let the server short-circuit the heartbeat-based orphan detection? Are there any new APIs in iOS 18.x or the upcoming release that address this specific force-kill → LA-dismissal latency? I could not find anything in the 18.x release notes, but I may have missed it. What I am NOT asking I am not asking how to implement APNs push-to-end (that works). I am not asking about applicationWillTerminate (I already confirmed it does not fire on swipe-kill). I am not asking about shortening staleDate as a visual workaround (I already verified it does not trigger body reevaluation post-kill). Environment iOS 26.4.1 (also reproducible on 18.x devices I have on hand) iPhone 17 Pro Max, iPhone 15 Pro, iPad Air 11-inch (M3) Xcode 26.x Activity.request(pushType: .token) with ActivityContent + custom stalenessInterval = 120s APNs HTTP/2 via token auth (.p8), targeting api.push.apple.com in production apns-push-type: liveactivity, apns-priority: 10, payload includes event: end What I have tried (for the record, to avoid "did you try" responses) applicationWillTerminate with DispatchSemaphore 3.5 s sync wait + dismissalPolicy: .immediate — works only for OS-terminate, not swipe-kill. stalenessInterval = 30s + 15 s refresh cadence + override to 5 s on AppLifecycleState.paused — verified not to dismiss the LA after app death. Cold-start reconciliation via Activity<...>.activities on next app launch — works, but that only helps if the user relaunches. Current APNs push-to-end with 60 s / 135 s / 30 s configuration — works, but latency is the complaint. Any guidance, even "no, ~2 minutes is the floor by design" with a pointer to the relevant doc, would be very helpful. Thank you.
0
0
50
1w
Localization doesn't work in watchOS widget configuration intent
Hi, I have a problem with watchOS widget configuration intents. It turns out that watchOS is unable to load text for localization keys. This is how I set configuration parameter in WidgetConfigurationIntent: @Parameter( title: LocalizedStringResource( "watchWidgetConfig.showSymbols", defaultValue: "Symbole", table: "WidgetLocalizable", bundle: widgetBundle ), default: true ) var showSymbols: Bool Unfortunately, on a device always the defaultValue is used. I tried everything and nothing works. What's weird, it correctly works on watchOS simulator and if you configure widgets in iOS "Watch" app. On real Apple Watch, the "defaultValue" is displayed. I'm not sure if it's important but both: the Swift file with WidgetConfigurationIntent and WidgetLocalizable.xcstring are included in two targets: Watch Widget Extension and Watch App. I tried so far: All variants of LocalizableStringResource init. With/without "table", with/without "bundle". Previously I had texts in Localizable.strings, I migrated it to WidgetLocalizable.xcstrings and it didn't work either. Setting only one target for WidgetLocalizable.xcstring and WidgetConfigurationIntent. I checked inside xcarchive to see if WidgetLocalizable.xcstring is copied correctly. Seems like watchOS bug, but I would be happy to know if someone figured out any workaround. Xcode: Version 26.4 (17E192) iOS 26.4.1 watchOS 26.4 I already created a ticket: FB22509406
2
0
138
1w
Live Activity Stops Updating After 30 Seconds in Background During Audio Playback
Hi I developed a music app that plays offline audio and displays lyrics using Live Activities. According to ActivityKit documentation, Live Activities can be updated from the background. However, in my case, updates stop after ~30 seconds when the app goes to the background or the device is locked. Important points: The app continues running in the background (audio playback works fine using AVAudioSession with .playback) Background code execution is working as expected Only the Live Activity stops updating I am not using push updates since this is an offline app. Is there any limitation or requirement for updating Live Activities continuously in the background during audio playback? Audio Session Configuration let session = AVAudioSession.sharedInstance() try session.setCategory( .playback, mode: .default, options: [.mixWithOthers] // ✅ DO NOT interrupt other audio ) try session.setActive(true) print("✅ [AudioSession] Activated with mixWithOthers") } catch { print("❌ [AudioSession] Error: \(error)") } Live Activity Update Methods guard let activity = getLiveActivity(for: recordID) else{ print("⚠️ No Live Activity found for recordID: \(recordID)") return } guard activity.activityState == .active else { print("⚠️ Activity is not active") return } Task { let content = ActivityContent( state: state, staleDate: Date().addingTimeInterval(60 * 60 * 12), relevanceScore: 1.0 ) await activity.update(content) print("✅ Live Activity updated with ActivityContent") } }
0
0
183
2w
Live Activity creates successfully but never displays on lock screen or Dynamic Island ( iOS 26.4.1, Xcode 26.4)
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.
1
0
119
2w
Live Activity Silent Rendering Failure- Any Way to Detect Crash / Failure State?
Hi Apple Team, We are facing an issue with Live Activities where the UI intermittently fails to render and shows a loader or blank state. After extensive debugging, we’ve identified that the failure happens during the rendering phase inside the system process (WidgetKit / liveactivitiesd), but there are no actionable signals exposed to the app. Problem: Live Activity launches successfully After a few updates or under certain UI conditions, it: stops rendering shows a loader / blank UI sometimes disappears No crash logs are generated No MetricKit diagnostics available for the extension Console logs show: Invalid frame dimension (negative or non-finite) Archive was nil. LiveActivity will be empty Sometimes because of memory pressure too The extension process appears to terminate silently Challenge Currently, there is no way to detect from the app side that: the Live Activity has failed to render the extension process has crashed/terminated the UI is no longer being updated Questions Is there any callback, delegate, or lifecycle hook that notifies when: a Live Activity rendering fails the extension process crashes or is terminated by the system? Is there any recommended way to detect a “broken” Live Activity state (e.g., stuck loader / non-updating UI)? Are there any diagnostic APIs or logs we can rely on in production to identify such failures? Is this considered expected behavior under certain system constraints (e.g., memory/rendering limits), and if so, are there guidelines to proactively detect or mitigate it? Goal We want to: proactively detect Live Activity failure log it for monitoring optionally fallback or recover gracefully Additional context: We fixed all the issues and the live activity is pretty stable. But asking for methods to track & fix such cases.
0
1
180
2w
Flutter iOS Project: WidgetKit Extension Not Embedding / Build Cycle Error
Hi, I need your opinion about an issue we faced while trying to implement an iOS widget in our Flutter app. Here is what we did and the problems we encountered: We created a Widget Extension (SwiftUI + WidgetKit) inside the existing Flutter iOS project. The widget files were generated correctly (Widget.swift, WidgetBundle.swift, Info.plist, etc.). However, during the integration, we faced multiple issues: Build Cycle Error We repeatedly got: “Cycle inside Runner; building could produce unreliable results” This was related to embedding the widget extension into the Runner target. Embed Problems Sometimes Xcode did not automatically create the “Embed App Extensions” phase. When we added it manually → build cycle errors appeared. When we removed it → the widget was not embedded at all (no PlugIns folder in Runner.app). Duplicate / Conflicting Embed The extension appeared both in: “Embed Foundation Extensions” “Frameworks, Libraries, and Embedded Content” Removing one often broke the build or removed the other as well. Widget Not Appearing Even when build succeeded: Widget did not appear on device PlugIns/Widget.appex was missing from build output Flutter Linking Errors In another test project, we got: Undefined symbol: _FlutterMethodChannel Undefined symbol: _FlutterBasicMessageChannel etc. This happened because the widget extension tried to link Flutter dependencies, which should not happen. App Group Confusion We also tried adding App Group (group.com.xxx), but behavior didn’t change. Conclusion: We suspect the root issue is: The Flutter template we are using was not designed for WidgetKit integration Xcode embedding phases and Flutter build scripts conflict with extension targets Question: In your opinion: Is this a known limitation with Flutter-based iOS projects? Is there a clean way to integrate WidgetKit without breaking the Runner target? Or is it better to create a separate native iOS module for the widget? Any guidance would be really appreciated. Thanks!
3
0
145
2w
Widget layout issue: Unexpected padding/content inset on specific widget types
Hello everyone, I am currently developing a suite of widgets for my iOS app using SwiftUI and WidgetKit. While the initial widgets (let's call them Widget A, B, and C) render perfectly, I am encountering a strange layout issue with a new widget (Widget D). The Issue: On the Home Screen, Widget D appears to have an unwanted internal padding or "squeezed" content inset, even though it shares a similar structural implementation with the other functional widgets. Technical Details: I am using .frame(maxWidth: .infinity, maxHeight: .infinity) on the main container to ensure the content fills the available space.
0
0
109
2w
Flutter iOS Project: WidgetKit Extension Not Embedding / Build Cycle Error
Hi, I need your opinion about an issue we faced while trying to implement an iOS widget in our Flutter app. Here is what we did and the problems we encountered: We created a Widget Extension (SwiftUI + WidgetKit) inside the existing Flutter iOS project. The widget files were generated correctly (Widget.swift, WidgetBundle.swift, Info.plist, etc.). However, during the integration, we faced multiple issues: Build Cycle Error We repeatedly got: “Cycle inside Runner; building could produce unreliable results” This was related to embedding the widget extension into the Runner target. Embed Problems Sometimes Xcode did not automatically create the “Embed App Extensions” phase. When we added it manually → build cycle errors appeared. When we removed it → the widget was not embedded at all (no PlugIns folder in Runner.app). Duplicate / Conflicting Embed The extension appeared both in: “Embed Foundation Extensions” “Frameworks, Libraries, and Embedded Content” Removing one often broke the build or removed the other as well. Widget Not Appearing Even when build succeeded: Widget did not appear on device PlugIns/Widget.appex was missing from build output Flutter Linking Errors In another test project, we got: Undefined symbol: _FlutterMethodChannel Undefined symbol: _FlutterBasicMessageChannel etc. This happened because the widget extension tried to link Flutter dependencies, which should not happen. App Group Confusion We also tried adding App Group (group.com.xxx), but behavior didn’t change. Conclusion: We suspect the root issue is: The Flutter template we are using was not designed for WidgetKit integration Xcode embedding phases and Flutter build scripts conflict with extension targets Question: In your opinion: Is this a known limitation with Flutter-based iOS projects? Is there a clean way to integrate WidgetKit without breaking the Runner target? Or is it better to create a separate native iOS module for the widget? Any guidance would be really appreciated. Thanks!
0
0
132
2w
Live Activity Not Updating Frequently for Offline Music App (Lyrics Sync Issue)
Hi everyone, I’m currently implementing Live Activities in my music app to display real-time lyrics on the Lock Screen. The app works fully offline, so I’m not using push updates or push tokens. Instead, I’m updating the Live Activity locally as each new line of lyrics is played (essentially near real-time updates synced with the song). However, I’m running into an issue where the Live Activity UI is not updating reliably or frequently enough. Even though I’m calling the update method for each lyric line, the changes are either delayed or not reflected at all. Here’s some additional context: • The app runs fine in the background (verified via battery usage and playback behavior) • Live Activity is successfully created and initially displayed • Updates are triggered locally (no push notifications involved) • Updates are happening quite frequently (per lyric line) • No crashes or errors are observed My questions: 1. Is there a system-imposed throttling limit on how frequently Live Activities can be updated locally? 2. Are there recommended update intervals for smooth UI updates (e.g., for use cases like lyrics or timers)? 3. Does Live Activity deprioritize updates for offline apps or background execution? 4. Are there any additional configurations or capabilities required to ensure consistent updates? 5. Is using something like AsyncStream or other concurrency patterns helpful in this case? 6. Are there any undocumented limitations or best practices for high-frequency updates? 7. Is there any private or internal API used by Apple apps (like Music) that allows smoother real-time updates? My goal is to achieve smooth, near real-time lyric updates similar to Apple Music’s Now Playing experience. Any guidance, best practices, or clarification would be greatly appreciated. Thanks in advance!
0
0
168
2w
Live Activity works perfectly on Simulator but fails on physical device: "No asset provider bundle ID provided"
Hello community, I am implementing a Live Activity for my existing App Store app. The Live Activity works perfectly on the iOS Simulator, but it completely fails to appear on the physical device's lock screen. When I call Activity.request, it succeeds and returns a valid Activity ID, but the physical device's console immediately outputs the following errors from liveactivitiesd: liveactivitiesd is not entitled to specify a scene target. Defaulting containingProcess target to liveactivitiesd No asset provider bundle ID provided I have spent days debugging this and have tried every known workaround. Here is the comprehensive list of what I have already verified and attempted: Environment: Xcode: 16.4 iOS Device: iPhone 13 mini, iOS 26.3.1 macOS: Sequoia 15.6 What I have verified/tried (to avoid duplicate suggestions): NSSupportsLiveActivities: It is set to YES in the main app's Info.plist. I also tried adding it to the Widget Extension's Info.plist just in case. App Icons: The main app has a valid AppIcon set in Assets.xcassets. The Primary App Icon Set Name in Build Settings is correctly set to AppIcon. Bundle IDs: They match perfectly (com.mycompany.app and com.mycompany.app.MyWidget). Version & Build Numbers: The main app and the Widget Extension have exactly the same Version and Build numbers. App Groups & Entitlements: Checked and perfectly synced between the main app and the extension. Dummy Widget: Since it's a Live-Activity-only extension, I added a standard static DummyWidget to the WidgetBundle to prevent the known iOS 17 bug where the system ignores extensions without home screen widgets. Memory/Sanitizers: Ensured Address Sanitizer and Zombie Objects are completely disabled in the Scheme to prevent the 30MB memory limit crash on the device. Nuclear Option: Completely deleted the Widget Extension target, wiped DerivedData, restarted the Mac and iPhone, and recreated the extension from scratch. Minimal UI Test: Replaced the widget's UI with a simple Text("Test") to rule out any SwiftUI rendering crashes. Device Settings: Verified that "Live Activities" is enabled under "Face ID & Passcode" settings on the physical iPhone. Despite all of this, the Simulator works flawlessy, while the device throws No asset provider bundle ID provided and shows nothing. Does anyone know what specific condition causes liveactivitiesd to fail to find the asset provider (the parent app) on a physical device for an existing app? Are there any undocumented provisioning profile quirks or obscure Build Settings I might be missing? Any insights would be deeply appreciated. Thank you!
3
0
209
3w
Control widget panel
I haven't been able to find the exact name for this. In iOS 26, there's a widget called "New Reminder" in Reminders app among the Control Center widgets(Action Button also). In the Shortcuts app, name is “Show quick reminder.” It doesn't seem to be either the input window that appears when requesting parameters or the snippet view. Is it possible to implement the sheet that appears after tap this widget button? I've looked through the relevant documentation and WWDC videos but haven't found anything.
0
0
208
3w
Clarification on App Transfer Criteria for iOS Apps Using App Groups and Widgets
Hi everyone, I’m currently reviewing the app transfer criteria in Apple’s official documentation and came across the following statement: “Mac apps that have used the sandbox environment and share the Application Group Container Directory with other Mac apps can't be transferred.” We are planning to add Widget support to our iOS app before initiating an app transfer. As part of this, the app would likely: Enable App Sandbox Use App Groups to share data between the main app and the Widget Given this, I have a couple of questions: Although the documentation explicitly mentions Mac apps, would the same restriction for app transfer apply to iOS apps that use App Groups (e.g., for Widgets)? If iOS apps are not subject to this restriction, will the Widget extension and its associated App Group data transfer correctly along with the main app during the transfer process? We want to make sure we don’t introduce any blockers before proceeding with the transfer. Any clarification or related experience would be greatly appreciated. Thanks in advance!
0
0
101
Apr ’26
AccessoryTransport Extensions not launching on iOS 26.5 beta — missing entitlements not available in provisioning
Environment Xcode 26.5 beta iOS 26.5 beta Using AccessorySetupKit + AccessoryTransportExtension framework Three extensions: AccessoryTransportAppExtension, AccessoryTransportSecurityExtension, AccessoryDataProviderExtension Background Everything worked correctly on iOS 26.4 beta. All three extensions shared the entitlement com.apple.developer.accessory-transport-extension, and the system launched them as expected. After upgrading to iOS 26.5 beta (both Xcode and device), the app compiles and runs, the accessory pairs and connects successfully (state = authorized, BLE connected, notification forwarding = allow), but none of the extensions are launched by the system. Investigation Captured system Console logs from the device and found these errors from deviceaccessd: error deviceaccessd ### Extension 'com.huami.NotificationForwardingDemo.AccessoryDataProviderExtension' is missing entitlement: com.apple.developer.accessory-data-provider for com.apple.accessory-data-provider error deviceaccessd ### Extension 'com.huami.NotificationForwardingDemo.AccessoryTransportSecurityExtension' is missing entitlement: com.apple.developer.accessory-transport-security for com.apple.accessory-transport-security It appears that iOS 26.5 now requires per-extension-type entitlements instead of the shared one. On iOS 26.4, all three extensions used com.apple.developer.accessory-transport-extension and it worked. On iOS 26.5, deviceaccessd now expects com.apple.developer.accessory-transport-security for the security extension and com.apple.developer.accessory-data-provider for the data provider extension. The transport app extension did not report an error, so it may still accept the old entitlement. Attempted Fix Changed the entitlement keys in the .entitlements files to match what deviceaccessd expects. Xcode fails to build with: ▎ Entitlement com.apple.developer.accessory-data-provider not found and could not be included in profile. This likely is not a valid entitlement and should be removed from your entitlements file. Root Cause Checked Apple Developer Portal — only one capability is available: "Accessory Transport Extension", which maps to com.apple.developer.accessory-transport-extension. There are no separate capability options for the new entitlements. The iOS 26.5 beta system requires new per-extension-type entitlements, but the provisioning system does not yet support them. This makes it impossible to build a working AccessoryTransport app on iOS 26.5 beta. Request Please either add the new entitlement capabilities (com.apple.developer.accessory-transport-security, com.apple.developer.accessory-data-provider) to the Apple Developer Portal, or restore backward compatibility with com.apple.developer.accessory-transport-extension in deviceaccessd.
1
0
246
Mar ’26
After iOS app overlay installation widget process killed OSLaunchdJob | handle= start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments
After iOS app overlay installation widget process killed OSLaunchdJob | handle= start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments,widget kill and liveactivity dismiss ,infomation : 默认 chronod [com.jd.jinrong.JDJRWidget] Creating session... 默认 chronod [DFB1D11C]: activityHandler ended 默认 iconservicesagent [0x5e2812320] activating connection: mach=false listener=false peer=true name=com.apple.iconservices.peer.0x5e2812320 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd Executing launch request for xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> (Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892) 默认 runningboardd Checking PreventLaunch: global:0 exPath:(null) predicates:(null) allow:(null) 默认 runningboardd Skipping preflight as <RBSLaunchRequest| xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])>; "Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892"> is not an app 默认 runningboardd Creating and launching job for: xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: submitExtension created a job 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: createInstance created a job <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465> 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 extensionkitservice RBSLaunchRequest error launching extension com.jd.jinrong.JDJRWidget error: Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xca4d04aa0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}} 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 错误 chronod -[_EXServiceClient launchWithConfiguration:error:]_block_invoke failed with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}} 错误 chronod New process is nil. 错误 chronod Failed to create extensionProcess for extension 'com.jd.jinrong.JDJRWidget' error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}}. 默认 chronod [com.jd.jinrong.JDJRWidget] Failed to launch extension with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 UserInfo={NSLocalizedFailureReason=, NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 UserInfo={NSLocalizedDescription=}}}}}.
2
0
143
Mar ’26
After iOS app overlay installation widget process killed OSLaunchdJob | handle= start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments
默认 chronod [com.jd.jinrong.JDJRWidget] Creating session... 默认 chronod [DFB1D11C]: activityHandler ended 默认 iconservicesagent [0x5e2812320] activating connection: mach=false listener=false peer=true name=com.apple.iconservices.peer.0x5e2812320 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd Executing launch request for xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> (Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892) 默认 runningboardd Checking PreventLaunch: global:0 exPath:(null) predicates:(null) allow:(null) 默认 runningboardd Skipping preflight as <RBSLaunchRequest| xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])>; "Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892"> is not an app 默认 runningboardd Creating and launching job for: xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: submitExtension created a job 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: createInstance created a job <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465> 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 extensionkitservice RBSLaunchRequest error launching extension com.jd.jinrong.JDJRWidget error: Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xca4d04aa0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}} 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 错误 chronod -[_EXServiceClient launchWithConfiguration:error:]_block_invoke failed with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}} 错误 chronod New process is nil. 错误 chronod Failed to create extensionProcess for extension 'com.jd.jinrong.JDJRWidget' error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}}. 默认 chronod [com.jd.jinrong.JDJRWidget] Failed to launch extension with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 UserInfo={NSLocalizedFailureReason=, NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 UserInfo={NSLocalizedDescription=}}}}}.
0
0
158
Mar ’26
Family Controls Distribution Request
Hi, I am looking for help. I submitted my request for Family Conotrols Distribution using the form. I have been waiting for days and didn't get any reply or confirmation email. Thanks.
Replies
0
Boosts
0
Views
44
Activity
4d
Live Activity / Dynamic Island countdown responds to manual device clock changes, while app timer and shielding remain correct
Our app runs offline-first focus sessions using FamilyControls / ManagedSettings shielding and DeviceActivity monitoring. The in-app session timer is protected against wall-clock manipulation by using monotonic elapsed time, and the shield remains active correctly when the user manually changes the iPhone clock. However, the Live Activity and Dynamic Island countdown appear to use the device's wall clock for their timer rendering. If the user changes the device time from Settings during an active session, the Live Activity / Dynamic Island countdown immediately jumps forward or backwards, even though the underlying session has not changed. Is there a recommended ActivityKit approach for rendering a Live Activity / Dynamic Island countdown that is resistant to manual device clock changes? If not, is this an expected limitation of Live Activity timer rendering? And is there any supported way for the host app or widget extension to detect wall-clock manipulation so the Live Activity can be corrected, dismissed, or replaced with a safer non-countdown state?
Replies
0
Boosts
0
Views
82
Activity
4d
Receiving MPMusicPlayerController playback notifications when app is suspended
Heyy, I'm building a music tracking app that logs a user's Apple Music plays to build a personal weekly chart. The core mechanic depends on accurately counting how many times a user plays each track. My current implementation uses MPMusicPlayerController.systemMusicPlayer with beginGeneratingPlaybackNotifications() and observes MPMusicPlayerControllerNowPlayingItemDidChange. This works well when the app is in the foreground or recently backgrounded, but notifications stop firing once iOS suspends the app. To get around this I've implemented: applicationDidBecomeActive - restarts the monitor and logs the currently playing track on every foreground Background fetch (performFetchWithCompletionHandler) - periodically wakes the app to log what's playing. This gives some coverage but misses plays that happen between background fetch intervals or when the user hasn't opened the app in a while. The result is an inaccurate play count which undermines the core feature. My questions: Is there a supported entitlement or capability that would allow an app to receive MPMusicPlayerController playback notifications while suspended? Is MusicKit or MediaPlayer the recommended framework for this use case, or is there a better API I'm not aware of? Are there any supported background modes that would keep playback notification delivery alive without requiring the app to be a full audio player? I've looked at MusicRecentlyPlayedRequest but it only returns the last 25 items with no play counts, so it can't tell me a track was played 10 times vs once. Any guidance on the right approach here would be really appreciated.
Replies
2
Boosts
0
Views
103
Activity
5d
Can the same widget in an Xcode project support multiple targets?
Hello everyone, my app A now supports iOS Widget C under the same Xcode project. Now I have another app B under this project, and I hope it can also support this Widget C. What should be done? How should the app group be configured? I have found some solutions: for example, add this key under the info.plist corresponding to app B: NSExtension NSExtensionPointIdentifier com.apple.widgetkit-extension NSExtensionPrincipalClass $(PRODUCT_MODULE_NAME).WidgetEntryView However, when I configured it and started running, not only could I not see the support Widget C, but the screen also went black. Thank you all.
Replies
1
Boosts
0
Views
143
Activity
1w
Minimum achievable latency for ending a Live Activity after app force-kill via APNs push-to-end
Context I'm building a study-timer feature for an iOS app (Flutter + native ActivityKit) that displays a Live Activity on the Lock Screen / Dynamic Island while a session is running. When the user force-quits the app by swiping it up from the App Switcher, I want the Live Activity to disappear as quickly as possible. I have already confirmed (from on-device testing and Apple Developer Forums thread 732418) that: applicationWillTerminate is not called on swipe-up force-kill, only on OS-initiated termination or crash. So synchronous Activity.end(...) from the app itself is not a solution for the force-kill path. Shortening staleDate does not visually dismiss the Live Activity once the app process is gone — the Widget Extension keeps rendering the last fresh snapshot and there is no body-reevaluation trigger on the stale transition post-app-death. (I implemented and verified this, then rolled it back.) The only Apple-official reliable mechanism is APNs push-to-end (Activity.request(pushType: .token) + server sends event: end via APNs). Current architecture I have APNs push-to-end working end-to-end. Structure: Client: Activity.request(pushType: .token), subscribe to Activity.pushTokenUpdates, forward each new token to the backend. Backend: On every client heartbeat, upsert (user_id, la_apns_token, la_activity_id, last_heartbeat) into Postgres. A separate scheduler polls for rows whose last_heartbeat < now() - grace_ttl and sends APNs event: end to the stored token. Parameters I am currently running with: Parameter Value Client heartbeat interval 60 s Orphan grace TTL (server) 135 s (heartbeat × 2.25, to absorb network jitter) Scheduler poll interval 30 s The observation End-to-end latency from "user force-kills the app" to "Live Activity disappears from Lock Screen" is: Worst case: 60 + 135 + 30 = ~225 s (~3.75 min) Typical: ~3 min (as consistently measured on iOS 26.4.1, iPhone 17 Pro Max) Theoretical minimum (if the kill happens exactly at a heartbeat boundary): ~135 s Users perceive 3 minutes as broken — the timer clearly stopped (no ticking), but the Live Activity "ghost" is still visible on the Lock Screen. My question Is there any Apple-supported mechanism to reliably tear down a Live Activity faster than ~2 minutes after the owning app's process is gone, given that applicationWillTerminate does not fire on swipe-kill? Specifically: Is there any practical lower bound below ~60 s for this scenario using the current ActivityKit + APNs model, assuming we are not willing to spam heartbeats every few seconds? I can push heartbeat to 20–30 s, but the server cost grows linearly with active sessions. Does BGAppRefreshTask / BGProcessingTask have any documented lifecycle hook that fires on user-initiated swipe-kill specifically, so that I could do a "last-heartbeat flush" just before the process dies? My understanding is that background tasks are scheduled for later and do not fire synchronously at termination. Is there any signal from APNs/ActivityKit to my server (e.g. a feedback-service-like mechanism) that indicates "this Live Activity's owning app was force-killed", which would let the server short-circuit the heartbeat-based orphan detection? Are there any new APIs in iOS 18.x or the upcoming release that address this specific force-kill → LA-dismissal latency? I could not find anything in the 18.x release notes, but I may have missed it. What I am NOT asking I am not asking how to implement APNs push-to-end (that works). I am not asking about applicationWillTerminate (I already confirmed it does not fire on swipe-kill). I am not asking about shortening staleDate as a visual workaround (I already verified it does not trigger body reevaluation post-kill). Environment iOS 26.4.1 (also reproducible on 18.x devices I have on hand) iPhone 17 Pro Max, iPhone 15 Pro, iPad Air 11-inch (M3) Xcode 26.x Activity.request(pushType: .token) with ActivityContent + custom stalenessInterval = 120s APNs HTTP/2 via token auth (.p8), targeting api.push.apple.com in production apns-push-type: liveactivity, apns-priority: 10, payload includes event: end What I have tried (for the record, to avoid "did you try" responses) applicationWillTerminate with DispatchSemaphore 3.5 s sync wait + dismissalPolicy: .immediate — works only for OS-terminate, not swipe-kill. stalenessInterval = 30s + 15 s refresh cadence + override to 5 s on AppLifecycleState.paused — verified not to dismiss the LA after app death. Cold-start reconciliation via Activity<...>.activities on next app launch — works, but that only helps if the user relaunches. Current APNs push-to-end with 60 s / 135 s / 30 s configuration — works, but latency is the complaint. Any guidance, even "no, ~2 minutes is the floor by design" with a pointer to the relevant doc, would be very helpful. Thank you.
Replies
0
Boosts
0
Views
50
Activity
1w
Family Controls (Distribution)
It has been five days since we applied for Family Controls (Distribution) permission, but the status still shows as Submitted. Is there any way to expedite the review process?
Replies
1
Boosts
0
Views
73
Activity
1w
Localization doesn't work in watchOS widget configuration intent
Hi, I have a problem with watchOS widget configuration intents. It turns out that watchOS is unable to load text for localization keys. This is how I set configuration parameter in WidgetConfigurationIntent: @Parameter( title: LocalizedStringResource( "watchWidgetConfig.showSymbols", defaultValue: "Symbole", table: "WidgetLocalizable", bundle: widgetBundle ), default: true ) var showSymbols: Bool Unfortunately, on a device always the defaultValue is used. I tried everything and nothing works. What's weird, it correctly works on watchOS simulator and if you configure widgets in iOS "Watch" app. On real Apple Watch, the "defaultValue" is displayed. I'm not sure if it's important but both: the Swift file with WidgetConfigurationIntent and WidgetLocalizable.xcstring are included in two targets: Watch Widget Extension and Watch App. I tried so far: All variants of LocalizableStringResource init. With/without "table", with/without "bundle". Previously I had texts in Localizable.strings, I migrated it to WidgetLocalizable.xcstrings and it didn't work either. Setting only one target for WidgetLocalizable.xcstring and WidgetConfigurationIntent. I checked inside xcarchive to see if WidgetLocalizable.xcstring is copied correctly. Seems like watchOS bug, but I would be happy to know if someone figured out any workaround. Xcode: Version 26.4 (17E192) iOS 26.4.1 watchOS 26.4 I already created a ticket: FB22509406
Replies
2
Boosts
0
Views
138
Activity
1w
Live Activity Stops Updating After 30 Seconds in Background During Audio Playback
Hi I developed a music app that plays offline audio and displays lyrics using Live Activities. According to ActivityKit documentation, Live Activities can be updated from the background. However, in my case, updates stop after ~30 seconds when the app goes to the background or the device is locked. Important points: The app continues running in the background (audio playback works fine using AVAudioSession with .playback) Background code execution is working as expected Only the Live Activity stops updating I am not using push updates since this is an offline app. Is there any limitation or requirement for updating Live Activities continuously in the background during audio playback? Audio Session Configuration let session = AVAudioSession.sharedInstance() try session.setCategory( .playback, mode: .default, options: [.mixWithOthers] // ✅ DO NOT interrupt other audio ) try session.setActive(true) print("✅ [AudioSession] Activated with mixWithOthers") } catch { print("❌ [AudioSession] Error: \(error)") } Live Activity Update Methods guard let activity = getLiveActivity(for: recordID) else{ print("⚠️ No Live Activity found for recordID: \(recordID)") return } guard activity.activityState == .active else { print("⚠️ Activity is not active") return } Task { let content = ActivityContent( state: state, staleDate: Date().addingTimeInterval(60 * 60 * 12), relevanceScore: 1.0 ) await activity.update(content) print("✅ Live Activity updated with ActivityContent") } }
Replies
0
Boosts
0
Views
183
Activity
2w
Live Activity creates successfully but never displays on lock screen or Dynamic Island ( iOS 26.4.1, Xcode 26.4)
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.
Replies
1
Boosts
0
Views
119
Activity
2w
Live Activity Silent Rendering Failure- Any Way to Detect Crash / Failure State?
Hi Apple Team, We are facing an issue with Live Activities where the UI intermittently fails to render and shows a loader or blank state. After extensive debugging, we’ve identified that the failure happens during the rendering phase inside the system process (WidgetKit / liveactivitiesd), but there are no actionable signals exposed to the app. Problem: Live Activity launches successfully After a few updates or under certain UI conditions, it: stops rendering shows a loader / blank UI sometimes disappears No crash logs are generated No MetricKit diagnostics available for the extension Console logs show: Invalid frame dimension (negative or non-finite) Archive was nil. LiveActivity will be empty Sometimes because of memory pressure too The extension process appears to terminate silently Challenge Currently, there is no way to detect from the app side that: the Live Activity has failed to render the extension process has crashed/terminated the UI is no longer being updated Questions Is there any callback, delegate, or lifecycle hook that notifies when: a Live Activity rendering fails the extension process crashes or is terminated by the system? Is there any recommended way to detect a “broken” Live Activity state (e.g., stuck loader / non-updating UI)? Are there any diagnostic APIs or logs we can rely on in production to identify such failures? Is this considered expected behavior under certain system constraints (e.g., memory/rendering limits), and if so, are there guidelines to proactively detect or mitigate it? Goal We want to: proactively detect Live Activity failure log it for monitoring optionally fallback or recover gracefully Additional context: We fixed all the issues and the live activity is pretty stable. But asking for methods to track & fix such cases.
Replies
0
Boosts
1
Views
180
Activity
2w
Flutter iOS Project: WidgetKit Extension Not Embedding / Build Cycle Error
Hi, I need your opinion about an issue we faced while trying to implement an iOS widget in our Flutter app. Here is what we did and the problems we encountered: We created a Widget Extension (SwiftUI + WidgetKit) inside the existing Flutter iOS project. The widget files were generated correctly (Widget.swift, WidgetBundle.swift, Info.plist, etc.). However, during the integration, we faced multiple issues: Build Cycle Error We repeatedly got: “Cycle inside Runner; building could produce unreliable results” This was related to embedding the widget extension into the Runner target. Embed Problems Sometimes Xcode did not automatically create the “Embed App Extensions” phase. When we added it manually → build cycle errors appeared. When we removed it → the widget was not embedded at all (no PlugIns folder in Runner.app). Duplicate / Conflicting Embed The extension appeared both in: “Embed Foundation Extensions” “Frameworks, Libraries, and Embedded Content” Removing one often broke the build or removed the other as well. Widget Not Appearing Even when build succeeded: Widget did not appear on device PlugIns/Widget.appex was missing from build output Flutter Linking Errors In another test project, we got: Undefined symbol: _FlutterMethodChannel Undefined symbol: _FlutterBasicMessageChannel etc. This happened because the widget extension tried to link Flutter dependencies, which should not happen. App Group Confusion We also tried adding App Group (group.com.xxx), but behavior didn’t change. Conclusion: We suspect the root issue is: The Flutter template we are using was not designed for WidgetKit integration Xcode embedding phases and Flutter build scripts conflict with extension targets Question: In your opinion: Is this a known limitation with Flutter-based iOS projects? Is there a clean way to integrate WidgetKit without breaking the Runner target? Or is it better to create a separate native iOS module for the widget? Any guidance would be really appreciated. Thanks!
Replies
3
Boosts
0
Views
145
Activity
2w
Widget layout issue: Unexpected padding/content inset on specific widget types
Hello everyone, I am currently developing a suite of widgets for my iOS app using SwiftUI and WidgetKit. While the initial widgets (let's call them Widget A, B, and C) render perfectly, I am encountering a strange layout issue with a new widget (Widget D). The Issue: On the Home Screen, Widget D appears to have an unwanted internal padding or "squeezed" content inset, even though it shares a similar structural implementation with the other functional widgets. Technical Details: I am using .frame(maxWidth: .infinity, maxHeight: .infinity) on the main container to ensure the content fills the available space.
Replies
0
Boosts
0
Views
109
Activity
2w
Flutter iOS Project: WidgetKit Extension Not Embedding / Build Cycle Error
Hi, I need your opinion about an issue we faced while trying to implement an iOS widget in our Flutter app. Here is what we did and the problems we encountered: We created a Widget Extension (SwiftUI + WidgetKit) inside the existing Flutter iOS project. The widget files were generated correctly (Widget.swift, WidgetBundle.swift, Info.plist, etc.). However, during the integration, we faced multiple issues: Build Cycle Error We repeatedly got: “Cycle inside Runner; building could produce unreliable results” This was related to embedding the widget extension into the Runner target. Embed Problems Sometimes Xcode did not automatically create the “Embed App Extensions” phase. When we added it manually → build cycle errors appeared. When we removed it → the widget was not embedded at all (no PlugIns folder in Runner.app). Duplicate / Conflicting Embed The extension appeared both in: “Embed Foundation Extensions” “Frameworks, Libraries, and Embedded Content” Removing one often broke the build or removed the other as well. Widget Not Appearing Even when build succeeded: Widget did not appear on device PlugIns/Widget.appex was missing from build output Flutter Linking Errors In another test project, we got: Undefined symbol: _FlutterMethodChannel Undefined symbol: _FlutterBasicMessageChannel etc. This happened because the widget extension tried to link Flutter dependencies, which should not happen. App Group Confusion We also tried adding App Group (group.com.xxx), but behavior didn’t change. Conclusion: We suspect the root issue is: The Flutter template we are using was not designed for WidgetKit integration Xcode embedding phases and Flutter build scripts conflict with extension targets Question: In your opinion: Is this a known limitation with Flutter-based iOS projects? Is there a clean way to integrate WidgetKit without breaking the Runner target? Or is it better to create a separate native iOS module for the widget? Any guidance would be really appreciated. Thanks!
Replies
0
Boosts
0
Views
132
Activity
2w
Live Activity Not Updating Frequently for Offline Music App (Lyrics Sync Issue)
Hi everyone, I’m currently implementing Live Activities in my music app to display real-time lyrics on the Lock Screen. The app works fully offline, so I’m not using push updates or push tokens. Instead, I’m updating the Live Activity locally as each new line of lyrics is played (essentially near real-time updates synced with the song). However, I’m running into an issue where the Live Activity UI is not updating reliably or frequently enough. Even though I’m calling the update method for each lyric line, the changes are either delayed or not reflected at all. Here’s some additional context: • The app runs fine in the background (verified via battery usage and playback behavior) • Live Activity is successfully created and initially displayed • Updates are triggered locally (no push notifications involved) • Updates are happening quite frequently (per lyric line) • No crashes or errors are observed My questions: 1. Is there a system-imposed throttling limit on how frequently Live Activities can be updated locally? 2. Are there recommended update intervals for smooth UI updates (e.g., for use cases like lyrics or timers)? 3. Does Live Activity deprioritize updates for offline apps or background execution? 4. Are there any additional configurations or capabilities required to ensure consistent updates? 5. Is using something like AsyncStream or other concurrency patterns helpful in this case? 6. Are there any undocumented limitations or best practices for high-frequency updates? 7. Is there any private or internal API used by Apple apps (like Music) that allows smoother real-time updates? My goal is to achieve smooth, near real-time lyric updates similar to Apple Music’s Now Playing experience. Any guidance, best practices, or clarification would be greatly appreciated. Thanks in advance!
Replies
0
Boosts
0
Views
168
Activity
2w
Live Activity works perfectly on Simulator but fails on physical device: "No asset provider bundle ID provided"
Hello community, I am implementing a Live Activity for my existing App Store app. The Live Activity works perfectly on the iOS Simulator, but it completely fails to appear on the physical device's lock screen. When I call Activity.request, it succeeds and returns a valid Activity ID, but the physical device's console immediately outputs the following errors from liveactivitiesd: liveactivitiesd is not entitled to specify a scene target. Defaulting containingProcess target to liveactivitiesd No asset provider bundle ID provided I have spent days debugging this and have tried every known workaround. Here is the comprehensive list of what I have already verified and attempted: Environment: Xcode: 16.4 iOS Device: iPhone 13 mini, iOS 26.3.1 macOS: Sequoia 15.6 What I have verified/tried (to avoid duplicate suggestions): NSSupportsLiveActivities: It is set to YES in the main app's Info.plist. I also tried adding it to the Widget Extension's Info.plist just in case. App Icons: The main app has a valid AppIcon set in Assets.xcassets. The Primary App Icon Set Name in Build Settings is correctly set to AppIcon. Bundle IDs: They match perfectly (com.mycompany.app and com.mycompany.app.MyWidget). Version & Build Numbers: The main app and the Widget Extension have exactly the same Version and Build numbers. App Groups & Entitlements: Checked and perfectly synced between the main app and the extension. Dummy Widget: Since it's a Live-Activity-only extension, I added a standard static DummyWidget to the WidgetBundle to prevent the known iOS 17 bug where the system ignores extensions without home screen widgets. Memory/Sanitizers: Ensured Address Sanitizer and Zombie Objects are completely disabled in the Scheme to prevent the 30MB memory limit crash on the device. Nuclear Option: Completely deleted the Widget Extension target, wiped DerivedData, restarted the Mac and iPhone, and recreated the extension from scratch. Minimal UI Test: Replaced the widget's UI with a simple Text("Test") to rule out any SwiftUI rendering crashes. Device Settings: Verified that "Live Activities" is enabled under "Face ID & Passcode" settings on the physical iPhone. Despite all of this, the Simulator works flawlessy, while the device throws No asset provider bundle ID provided and shows nothing. Does anyone know what specific condition causes liveactivitiesd to fail to find the asset provider (the parent app) on a physical device for an existing app? Are there any undocumented provisioning profile quirks or obscure Build Settings I might be missing? Any insights would be deeply appreciated. Thank you!
Replies
3
Boosts
0
Views
209
Activity
3w
Control widget panel
I haven't been able to find the exact name for this. In iOS 26, there's a widget called "New Reminder" in Reminders app among the Control Center widgets(Action Button also). In the Shortcuts app, name is “Show quick reminder.” It doesn't seem to be either the input window that appears when requesting parameters or the snippet view. Is it possible to implement the sheet that appears after tap this widget button? I've looked through the relevant documentation and WWDC videos but haven't found anything.
Replies
0
Boosts
0
Views
208
Activity
3w
Clarification on App Transfer Criteria for iOS Apps Using App Groups and Widgets
Hi everyone, I’m currently reviewing the app transfer criteria in Apple’s official documentation and came across the following statement: “Mac apps that have used the sandbox environment and share the Application Group Container Directory with other Mac apps can't be transferred.” We are planning to add Widget support to our iOS app before initiating an app transfer. As part of this, the app would likely: Enable App Sandbox Use App Groups to share data between the main app and the Widget Given this, I have a couple of questions: Although the documentation explicitly mentions Mac apps, would the same restriction for app transfer apply to iOS apps that use App Groups (e.g., for Widgets)? If iOS apps are not subject to this restriction, will the Widget extension and its associated App Group data transfer correctly along with the main app during the transfer process? We want to make sure we don’t introduce any blockers before proceeding with the transfer. Any clarification or related experience would be greatly appreciated. Thanks in advance!
Replies
0
Boosts
0
Views
101
Activity
Apr ’26
AccessoryTransport Extensions not launching on iOS 26.5 beta — missing entitlements not available in provisioning
Environment Xcode 26.5 beta iOS 26.5 beta Using AccessorySetupKit + AccessoryTransportExtension framework Three extensions: AccessoryTransportAppExtension, AccessoryTransportSecurityExtension, AccessoryDataProviderExtension Background Everything worked correctly on iOS 26.4 beta. All three extensions shared the entitlement com.apple.developer.accessory-transport-extension, and the system launched them as expected. After upgrading to iOS 26.5 beta (both Xcode and device), the app compiles and runs, the accessory pairs and connects successfully (state = authorized, BLE connected, notification forwarding = allow), but none of the extensions are launched by the system. Investigation Captured system Console logs from the device and found these errors from deviceaccessd: error deviceaccessd ### Extension 'com.huami.NotificationForwardingDemo.AccessoryDataProviderExtension' is missing entitlement: com.apple.developer.accessory-data-provider for com.apple.accessory-data-provider error deviceaccessd ### Extension 'com.huami.NotificationForwardingDemo.AccessoryTransportSecurityExtension' is missing entitlement: com.apple.developer.accessory-transport-security for com.apple.accessory-transport-security It appears that iOS 26.5 now requires per-extension-type entitlements instead of the shared one. On iOS 26.4, all three extensions used com.apple.developer.accessory-transport-extension and it worked. On iOS 26.5, deviceaccessd now expects com.apple.developer.accessory-transport-security for the security extension and com.apple.developer.accessory-data-provider for the data provider extension. The transport app extension did not report an error, so it may still accept the old entitlement. Attempted Fix Changed the entitlement keys in the .entitlements files to match what deviceaccessd expects. Xcode fails to build with: ▎ Entitlement com.apple.developer.accessory-data-provider not found and could not be included in profile. This likely is not a valid entitlement and should be removed from your entitlements file. Root Cause Checked Apple Developer Portal — only one capability is available: "Accessory Transport Extension", which maps to com.apple.developer.accessory-transport-extension. There are no separate capability options for the new entitlements. The iOS 26.5 beta system requires new per-extension-type entitlements, but the provisioning system does not yet support them. This makes it impossible to build a working AccessoryTransport app on iOS 26.5 beta. Request Please either add the new entitlement capabilities (com.apple.developer.accessory-transport-security, com.apple.developer.accessory-data-provider) to the Apple Developer Portal, or restore backward compatibility with com.apple.developer.accessory-transport-extension in deviceaccessd.
Replies
1
Boosts
0
Views
246
Activity
Mar ’26
After iOS app overlay installation widget process killed OSLaunchdJob | handle= start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments
After iOS app overlay installation widget process killed OSLaunchdJob | handle= start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments,widget kill and liveactivity dismiss ,infomation : 默认 chronod [com.jd.jinrong.JDJRWidget] Creating session... 默认 chronod [DFB1D11C]: activityHandler ended 默认 iconservicesagent [0x5e2812320] activating connection: mach=false listener=false peer=true name=com.apple.iconservices.peer.0x5e2812320 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd Executing launch request for xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> (Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892) 默认 runningboardd Checking PreventLaunch: global:0 exPath:(null) predicates:(null) allow:(null) 默认 runningboardd Skipping preflight as <RBSLaunchRequest| xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])>; "Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892"> is not an app 默认 runningboardd Creating and launching job for: xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: submitExtension created a job 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: createInstance created a job <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465> 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 extensionkitservice RBSLaunchRequest error launching extension com.jd.jinrong.JDJRWidget error: Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xca4d04aa0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}} 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 错误 chronod -[_EXServiceClient launchWithConfiguration:error:]_block_invoke failed with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}} 错误 chronod New process is nil. 错误 chronod Failed to create extensionProcess for extension 'com.jd.jinrong.JDJRWidget' error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}}. 默认 chronod [com.jd.jinrong.JDJRWidget] Failed to launch extension with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 UserInfo={NSLocalizedFailureReason=, NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 UserInfo={NSLocalizedDescription=}}}}}.
Replies
2
Boosts
0
Views
143
Activity
Mar ’26
After iOS app overlay installation widget process killed OSLaunchdJob | handle= start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments
默认 chronod [com.jd.jinrong.JDJRWidget] Creating session... 默认 chronod [DFB1D11C]: activityHandler ended 默认 iconservicesagent [0x5e2812320] activating connection: mach=false listener=false peer=true name=com.apple.iconservices.peer.0x5e2812320 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=DCD4DC2C-32B3-4340-94F7-72C8C150F82C>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd Executing launch request for xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> (Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892) 默认 runningboardd Checking PreventLaunch: global:0 exPath:(null) predicates:(null) allow:(null) 默认 runningboardd Skipping preflight as <RBSLaunchRequest| xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])>; "Launching extension com.jd.jinrong.JDJRWidget(BFEC114A-32BF-4A62-97F3-8B0C3FE6AB70) for host 2892"> is not an app 默认 runningboardd Creating and launching job for: xpcservice<com.jd.jinrong.JDJRWidget([osservice<com.apple.chronod>:2892])> 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: submitExtension created a job 默认 runningboardd <OSLaunchdJob | handle=3BD97E17-E46A-41F7-B794-520044BCD36D>: createInstance created a job <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465> 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: start succeeded, info=spawn failed, error=111: Invalid or missing Program/ProgramArguments 错误 extensionkitservice RBSLaunchRequest error launching extension com.jd.jinrong.JDJRWidget error: Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xca4d04aa0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}} 错误 runningboardd Process start failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 默认 runningboardd <OSLaunchdJob | handle=3B5CA561-A268-4A5C-BAFF-819801EB4465>: remove failed with error 144 Requestor lacks required entitlement 错误 runningboardd Job remove after failed start failed with Error Domain=OSLaunchdErrorDomain Code=144 "Requestor lacks required entitlement" UserInfo={NSLocalizedFailureReason=Requestor lacks required entitlement} 错误 runningboardd Launch failed with Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed} 错误 chronod -[_EXServiceClient launchWithConfiguration:error:]_block_invoke failed with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}} 错误 chronod New process is nil. 错误 chronod Failed to create extensionProcess for extension 'com.jd.jinrong.JDJRWidget' error: Error Domain=com.apple.extensionKit.errorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}}. 默认 chronod [com.jd.jinrong.JDJRWidget] Failed to launch extension with error: Error Domain=com.apple.extensionKit.errorDomain Code=2 UserInfo={NSUnderlyingError=0xde6b31c10 {Error Domain=RBSRequestErrorDomain Code=5 UserInfo={NSLocalizedFailureReason=, NSUnderlyingError=0xde6b328e0 {Error Domain=NSPOSIXErrorDomain Code=111 UserInfo={NSLocalizedDescription=}}}}}.
Replies
0
Boosts
0
Views
158
Activity
Mar ’26