Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

[Widget] ChronoKit.InteractiveWidgetActionRunner.Errors.runnerClientError `There is no metadata for `

In our widget we include a button with an intent, making a network call to refresh some shared data in its perform(). Whether the call finishes in time or not is not important to us, what matters more is that the widget gets reloaded at the end and displays whatever data it has available with its transition animation.

On iOS18.0 we see the widget being reloaded but on the latest version 18.4 this doesn't happen anymore.

Going through the logs, on both devices we see this same flow:

default	2025-04-10 15:05:26.853674 +0300	WidgetRenderer_Default	Evaluating dispatch of UIEvent: 0x300e002a0; type: 0; subtype: 0; backing type: 11; shouldSend: 1; ignoreInteractionEvents: 0, systemGestureStateChange: 0
default	2025-04-10 15:05:26.853691 +0300	WidgetRenderer_Default	Sending UIEvent type: 0; subtype: 0; to windows: 1
default	2025-04-10 15:05:26.853702 +0300	WidgetRenderer_Default	Sending UIEvent type: 0; subtype: 0; to window: <WidgetRenderer.WidgetWindow: 0x5689b4000>; contextId: 0x8E401B8A
default	2025-04-10 15:05:26.853735 +0300	SpringBoard	Evaluating dispatch of UIEvent: 0x300af9420; type: 0; subtype: 0; backing type: 11; shouldSend: 1; ignoreInteractionEvents: 0, systemGestureStateChange: 0
default	2025-04-10 15:05:26.853836 +0300	SpringBoard	Sending UIEvent type: 0; subtype: 0; to windows: 1
default	2025-04-10 15:05:26.853864 +0300	SpringBoard	Sending UIEvent type: 0; subtype: 0; to window: <_UISystemGestureWindow: 0xb5a20d000>; contextId: 0x5A4C4C23
default	2025-04-10 15:05:26.854862 +0300	SpringBoard	Evaluating dispatch of UIEvent: 0x300aeeca0; type: 0; subtype: 0; backing type: 11; shouldSend: 1; ignoreInteractionEvents: 0, systemGestureStateChange: 0
default	2025-04-10 15:05:26.854866 +0300	WidgetRenderer_Default	[Timeline[<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget:systemMedium::321.00/148.00/20.20:(null)]--A76785AED3F9::0xb5bc4c000)] Handle action
default	2025-04-10 15:05:26.854892 +0300	SpringBoard	Sending UIEvent type: 0; subtype: 0; to windows: 1
default	2025-04-10 15:05:26.854901 +0300	SpringBoard	Sending UIEvent type: 0; subtype: 0; to window: <SBHomeScreenWindow: 0xb5ad60000>; contextId: 0x71D69FA2
default	2025-04-10 15:05:26.855015 +0300	WidgetRenderer_Default	Handle action: <private>
default	2025-04-10 15:05:26.855360 +0300	SpringBoard	Allowing tap for icon view '<private>'
default	2025-04-10 15:05:26.855376 +0300	SpringBoard	Not allowing tap gesture to begin because we're not editing, the custom view controller's user interaction is enabled, and the effective icon alpha isn't zero.
default	2025-04-10 15:05:26.856940 +0300	SpringBoard	Icon touch ended: <private>
default	2025-04-10 15:05:26.857474 +0300	backboardd	contact 1 presence: none
default	2025-04-10 15:05:26.857826 +0300	chronod	Received action <private> for interaction <WidgetRenderSession--4632871937259503361-scene::C1F20222-CC99-45CC-B074-A76785AED3F9::0xb5bc4c000-[<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget:systemMedium::321.00/148.00/20.20:(null)]>
default	2025-04-10 15:05:26.858381 +0300	chronod	[<WidgetRenderSession--4632871937259503361-scene::C1F20222-CC99-45CC-B074-A76785AED3F9::0xb5bc4c000-[<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget:systemMedium::321.00/148.00/20.20:(null)]>] Handle interaction: <private>
default	2025-04-10 15:05:26.858436 +0300	chronod	Pausing reloads for: [<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget]
default	2025-04-10 15:05:26.869525 +0300	chronod	[0xd180b2440] activating connection: mach=true listener=false peer=false name=com.apple.linkd.registry
default	2025-04-10 15:05:26.870054 +0300	WidgetRenderer_Default	Evaluating dispatch of UIEvent: 0x300e002a0; type: 0; subtype: 0; backing type: 11; shouldSend: 0; ignoreInteractionEvents: 0, systemGestureStateChange: 0
default	2025-04-10 15:05:26.870124 +0300	SpringBoard	Evaluating dispatch of UIEvent: 0x300af9420; type: 0; subtype: 0; backing type: 11; shouldSend: 0; ignoreInteractionEvents: 0, systemGestureStateChange: 0
default	2025-04-10 15:05:26.870198 +0300	SpringBoard	Evaluating dispatch of UIEvent: 0x300aeeca0; type: 0; subtype: 0; backing type: 11; shouldSend: 0; ignoreInteractionEvents: 0, systemGestureStateChange: 0
default	2025-04-10 15:05:26.871831 +0300	linkd	Accepting XPC connection from PID 129 for service "com.apple.linkd.registry"
default	2025-04-10 15:05:26.871840 +0300	linkd	[0x410cbe6c0] activating connection: mach=false listener=false peer=true name=com.apple.linkd.registry.peer[129].0x410cbe6c0
info	2025-04-10 15:05:26.876032 +0300	chronod	Client requested (
    "<LNFullyQualifiedActionIdentifier: 0xd17321b40, bundleIdentifier: <edited-bundle-identifier>, actionIdentifier: ReloadBalanceIntent>"
), got {
}
default	2025-04-10 15:05:26.877178 +0300	chronod	[0xd180b2440] invalidated because the current process cancelled the connection by calling xpc_connection_cancel()
default	2025-04-10 15:05:26.877377 +0300	linkd	[0x410cbe6c0] invalidated because the client process (pid 129) either cancelled the connection or exited

Then it followa with this on iOS18.4 :

error	2025-04-10 15:21:32.964920 +0300	chronod	[<WidgetRenderSession-7817322460413849944-scene::B5E4D7C4-91E1-4656-8175-C3C3C1CB894D::0xc733b8000-[<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget:systemLarge::364.00/382.00/23.00:(null)~(null)]>] Encountered error when handling interaction: ChronoKit.InteractiveWidgetActionRunner.Errors.runnerClientError(Error Domain=WFLinkActionWorkflowRunnerClientErrorDomain Code=1 "There is no metadata for ReloadBalanceIntent in `<edited-bundle-identifier>`" UserInfo={NSLocalizedDescription=There is no metadata for ReloadBalanceIntent in `<edited-bundle-identifier>`})
default	2025-04-10 15:21:32.964958 +0300	chronod	[<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget] Resuming reloads. Reload state paused -> clean
info	2025-04-10 15:21:32.965013 +0300	chronod	[interactionFailed] All diagnostics are disabled.

Whereas on iOS18.0 it follows with a simplified error:

error	2025-04-10 15:05:26.879005 +0300	chronod	[<WidgetRenderSession--4632871937259503361-scene::C1F20222-CC99-45CC-B074-A76785AED3F9::0xb5bc4c000-[<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget:systemMedium::321.00/148.00/20.20:(null)]>] Encountered error when handling interaction: Error Domain=ChronoKit.InteractiveWidgetActionRunner.Errors Code=1
default	2025-04-10 15:05:26.879065 +0300	chronod	Resuming reloads for: [<edited-bundle-identifier>::<edited-bundle-identifier>.<Widget>:widget]

but afterwards we see many lines describing the reload process.

So it turns out that the intent fails(?) to execute on both OSes but iOS18.0 triggers a reload even so, which fits our purposes. What could the issue be? The intent is pretty standard, it contains only the title, localizedDescription and is defined only inside the widget.

only inside the widget.

Correction: it is defined in a framework that the widget imports and that is the cause. Seems like that metadata search only considers the main executable & not other binaries.

FB17198643

[Widget] ChronoKit.InteractiveWidgetActionRunner.Errors.runnerClientError &#96;There is no metadata for &#96;
 
 
Q