Watch Connectivity does not reliably call its delegate to reflect the reachable state of the Watch App

Originator:tealShift
Number:rdar://23337218 Date Originated:10-30-2015
Status:Still a bug Resolved:No
Product:Watch OS Product Version:2.0.1
Classification:Serious Bug Reproducible:Yes
 
Summary:
WatchConnectivity seems to fail updating its reachable state when the watch is deactivated and reactivated rapidly (lowered and raised within a 1-2 second time span). This occurs reliably on my devices.

I've also written a test project to get you the simplest possible example of the bug. 
https://dl.dropboxusercontent.com/u/2649851/WatchConnectivityTest.zip

Steps to Reproduce:
Steps 1 and 2 demonstrate how the framework should work.

1) Lower the watch, allowing the WCSessionDelegate to get called and update the UI. 

2) Raise again to restore the previous state. 

3) Lower and raise the watch quickly (within 1-2 seconds) so the delegate doesn't get a chance to call before the Watch App reactivates.

Expected Results:
Quickly lowering and raising the watch should result in two calls to the WCSessionDelegate's sessionReachabilityDidChange method to make an accurate reflection of the Watch App state.

Actual Results:
The delegate gets called just once, reflecting the NOT reachable state and fails to call again to reflect the correct active state of the watch app.

Version:
2.0.1

Notes:
Here's a video demonstration of the bug: https://youtu.be/hx7VR8IPxT8

Configuration:
This has occurred on all iPhones and Apple Watch OS2 versions. It doesn't seem to happen on Simulator.

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!