watchOS app gets killed by filecoordinationd when in Always on mode

Hi,

I have a watchOS app which is able to control Sonos speakers. So people set it to stay active for 1 hour. Unfortunately, the system kills the application every time after 5 to 15 min. I have made many system diagnosis and the pattern is always the same.

  1. Carousel decides that the app must be suspended.
  2. runnungboardd suspends the app.
  3. filecoordinationd kills with SIGKILL because it detected it has been suspended.
  4. launchd reports that the app has been killed.

The issue is that I don't understand why Carousel wants to suspend the app. I have disabled all animations while the app is in Always on mode. The app does not perform any operations.

If anyone has any idea on what do try, I would be glad for help.

Here are some of the related logs. There are thousands around that but I could not deduce anything useful from them.

The app gets suspended and then the filecoordinationd decides to kill it. But why is it suspended ?

Just before, the app invalidates the timelines. But the timelines here are from the Backlight service.


debug	2024-05-11 10:19:47.116194 +0200	WatchSonos WatchKit Extension	0x16d57dd0 invalidateAllTimelinesForReason:Host update. for environment:de.heinrich.alexander.WatchSonos.watchkitapp


default	2024-05-11 10:19:47.116285 +0200	WatchSonos WatchKit Extension	[(FBSceneManager):de.heinrich.alexander.WatchSonos.watchkitapp] Sending action(s): BLSInvalidateFrameSpecifiersAction

Here an error occurs when setting the darwin gpu. This could be related

default	2024-05-11 10:19:47.176223 +0200	runningboardd	[app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1706] Shutdown sockets (ALL)
default	2024-05-11 10:19:47.176259 +0200	runningboardd	[app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1706] Set darwin role to: None
default	2024-05-11 10:19:47.176264 +0200	runningboardd	1706 Set Darwin GPU to "deny"
error	2024-05-11 10:19:47.176292 +0200	runningboardd	1706 setGPURole failed with result = e00002c7

Here the carousel requests suspension which then later performed by the runningoardd

default	2024-05-11 10:19:47.177176 +0200	Carousel	[app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1706] Setting process task state to: Suspended
info	2024-05-11 10:19:47.177309 +0200	Carousel	Client requesting suspension of PID:1706 Name:<redacted>
info	2024-05-11 10:19:47.177407 +0200	Carousel	Update delivered for [app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1706] with taskState 3

Suspending the process

default	2024-05-11 10:21:13.851752 +0200	runningboardd	[app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1707] Suspending task.
info	2024-05-11 10:21:13.851963 +0200	runningboardd	Process: [app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1707] has changes in inheritances: {(
    <RBSInheritance| environment:UIScene:@com.apple.frontboard.systemappservices/FBSceneManager:de.heinrich.alexander.WatchSonos.watchkitapp name:com.apple.frontboard.visibility origID:74-186-52947 payload 646688203>,
    <RBSInheritance| environment:(none) name:com.apple.frontboard.visibility origID:74-186-53033 0>
)}
info	2024-05-11 10:21:13.852269 +0200	runningboardd	Current inheritances: {(
    <RBSInheritance| environment:(none) name:com.apple.frontboard.visibility origID:74-186-53032 0>,
    <RBSInheritance| environment:UIScene:@com.apple.frontboard.systemappservices/FBSceneManager:de.heinrich.alexander.WatchSonos.watchkitapp name:com.apple.frontboard.visibility origID:74-186-52947 payload 646688203>,
    <RBSInheritance| environment:(none) name:com.apple.frontboard.visibility origID:74-186-52948 0>,
    <RBSInheritance| environment:(none) name:com.apple.frontboard.visibility origID:74-186-53033 0>
)}
default	2024-05-11 10:21:13.852375 +0200	runningboardd	Process: [app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1707]: Sending inheritance changeset: <RBSInheritanceChangeSet| gained:{(
)} lost:{(
    <RBSInheritance| environment:(none) name:com.apple.frontboard.visibility origID:74-186-53032 0>,
    <RBSInheritance| environment:(none) name:com.apple.frontboard.visibility origID:74-186-52948 0>
)}>
default	2024-05-11 10:21:13.852794 +0200	runningboardd	[app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1707] Shutdown sockets (SVC)
default	2024-05-11 10:21:13.852829 +0200	runningboardd	[app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1707] Set darwin role to: None

Killing the process:

default	2024-05-11 10:19:48.441773 +0200	filecoordinationd	Detected process suspension: 1706
info	2024-05-11 10:19:48.441776 +0200	filecoordinationd	Update delivered for [app<de.heinrich.alexander.WatchSonos.watchkitapp((null))>:1706] with taskState 4
default	2024-05-11 10:19:48.441776 +0200	filecoordinationd	Claim 562AB55E-CE67-46FA-A080-798F89013643 observed suspension of client with 1706
error	2024-05-11 10:19:48.444295 +0200	filecoordinationd	SimulateCrash() on another process is not supported
default	2024-05-11 10:19:48.444361 +0200	filecoordinationd	Claim 562AB55E-CE67-46FA-A080-798F89013643 was revoked

Reporting the kill

default	2024-05-11 10:19:48.455485 +0200	launchd	exited due to SIGKILL | sent by filecoordinationd[316], ran for 7913ms
watchOS app gets killed by filecoordinationd when in Always on mode
 
 
Q