@ppwqgtl Small correction/update from our side: my earlier reply saying reboot fixed this was wrong. In the latest reproduction, a normal Apple Watch reboot did not recover the app. Deleting/reinstalling from TestFlight does recover it. Separately, one affected watch recovered after the battery drained completely, was left dead for hours, then charged/cold-booted. So this seems more persistent than a simple in-memory bad state.
Our latest read is still that this is not an app crash. In the failed state, our app process is never created, there are no app startup logs, and launching with devicectl fails before our code runs with the same Security / RequestDenied shape.
The strongest evidence we have now is around AppConduit / paired app state. In iPhone sysdiagnose we see AppConduit / ACXRemoteAppList reporting that the “App database is out of sync” around the relevant window. That lines up with the symptoms: the TestFlight watch app was installed, had launched successfully earlier on the same build/device, then later became launch-denied locally.
We no longer think “dependent vs independent watch app” is the main theory. It may still affect which Apple code paths are involved, but it does not look sufficient as the explanation.
The more interesting lead for us is background iPhone-to-watch WatchConnectivity traffic.
In our case, the production iOS app receives silent/background pushes and, during those background wakes, can proactively send updated state to the watch using WatchConnectivity while the watch app is not foregrounded. Our local debug build does not have the same production APNs background-wakeup path. The production/TestFlight watch app has hit this launch-denied state multiple times; the local debug watch app on the same hardware has not.
So our current theory is:
- iOS app wakes in the background.
- It touches WatchConnectivity / AppConduit to find or update the paired watch app.
- This happens repeatedly while the watch app is suspended/backgrounded/not running.
- Some Apple-side paired-app database/cache becomes inconsistent.
- Later watch app launch is denied before our process starts.
That is still only a theory, but it fits the AppConduit “database out of sync” log better than anything else we’ve found.
A few questions that would be very useful to compare:
- Does your iOS app receive silent/background pushes?
- During those background wakes, do you send anything to the watch with WCSession, especially updateApplicationContext, transferUserInfo, or sendMessage?
- In your iPhone sysdiagnose, do you see AppConduit / ACXRemoteAppList / MobileInstallation logs near the failure window?
- Does a normal watch reboot actually fix it for you, or only reinstall?
We are going to try reducing/removing proactive background iPhone-to-watch sends and see whether the issue stops reproducing.
Once more into the deep !