Real-Time WatchConnectivity Sync Not Working Between iPhone and Apple Watch

Hi everyone,

I'm building a health-focused iOS and watchOS app that uses WatchConnectivity to sync real-time heart rate and core body temperature data from iPhone to Apple Watch. While the HealthKit integration works correctly on the iPhone side, I'm facing persistent issues with WatchConnectivity — the data either doesn't arrive on the Watch, or session(_:didReceiveMessage:) never gets triggered.

Here's the setup:

On iPhone: Using WCSession.default.sendMessage(_:replyHandler:errorHandler:) to send real-time values every few seconds.

On Apple Watch: Implemented WCSessionDelegate, and session(_:didReceiveMessage:) is supposed to update the UI.

Both apps have WCSession.isSupported() checks, activate the session, and assign delegates correctly.

The session state shows isPaired = true and isWatchAppInstalled = true.

Bluetooth and Wi-Fi are on, both devices are unlocked and nearby.

Despite all this, the Watch never receives messages in real-time. Sometimes, data comes through in bulk much later or not at all.

I've double-checked Info.plist configurations and made sure background modes include "Uses Bluetooth LE accessories" and "Background fetch" where appropriate.

I would really appreciate guidance on:

Best practices for reliable, low-latency message delivery with WatchConnectivity.

Debugging steps or sample code to validate message transmission and reception.

Any pitfalls related to UI updates from the delegate method.

Happy to share further details. Thanks in advance!

Hello! Your experience sending messages from iPhone to Apple Watch is expected. There is a good description in the Discussion section for sendMessage here . When using sendMessage, reachability is very important, and your iPhone app is far more reachable than your Apple Watch app. When you call sendMessage from your Watch app, your companion iOS app is reachable if it's in the background. WatchConnectivity will wake it and deliver the message. But when you call send message from your iOS app, your Watch app is reachable only if it's foreground. That means the person has to be holding their wrist up and have the display active (not always-on display, but actually wrist up, watch awake, your app in the foreground).

You might think of some other ways this could be done.

  • Is there another communication method that can be used to transfer the data and have it available in the Watch app when needed by the person when they view it when the Watch app is awake (e.g. use sendMessage when the Watch app is reachable and use updateApplicationContext or sendUserInfo otherwise)? Details are in the WWDC Session: There and back again: Data transfer on Apple Watch.
  • Depending on how you're collecting the data (e.g. Bluetooth LE accessories), can this be done by the Watch app instead of the phone app?
  • As an overall question, what is the duration of the data collection and how feasible is it to do real-time data messaging to the Apple Watch without rapidly depleting someone's battery? Few things will make someone uninstall your Watch app faster than running down their battery.
Real-Time WatchConnectivity Sync Not Working Between iPhone and Apple Watch
 
 
Q