Search code examples
ioswatchkitwatchconnectivityapple-watch-complication

WCSession "isComplicationEnabled" always returns false in iOS 15.4


Since I've updated my test device (iPhone 12 mini) to the latest iOS version 15.4, the complications of my companion app on the watch (watchOS 8.5) do not receive any updates sent by the iOS app.

To reproduce the issue you need:

  • An iOS app with an watchOS companion app and at least one active complication of this app. (I can provide you access to my TestFlight app.)
  • The iOS app needs an active WCSession object to send update complication messages through "transferCurrentComplicationUserInfo:"
  • If you check the isComplicationEnabeld property, it will always return false and therefore, the complication will not be updated.

This issues only occurs since the update to iOS 15.4. Previous versions did work well.

Here is my code to transfer the updated content for the complications...

if ([self.connectivityHandler.validSession isComplicationEnabled] &&
    self.connectivityHandler.validSession.remainingComplicationUserInfoTransfers > 0) {
    
    [self.connectivityHandler transferCurrentComplicationUserInfo:[self applicationContext]];
}

The connectivityHandler is a singleton object which handles the data transfer and holds the WCSession object (validSession). It implements the transferCurrentComplicationUserInfo method to transfer the updated content for the complication.

Since iOS 15.4, the if clause above is always false due to the isComplicationEnabled check. Before it worked correctly.

I've already tried:

  • Restarting devices: iPhone and watch
  • Resetting watch

Anyone out there with the same issue and probably a solution?

Thank's for your support!


Solution

  • After first tests, Apple fixed it in iOS 15.5 and watchOS 8.6.