Can someone investigate the behavior of VoWiFi?
Unfortunately, my experience has been that this kind of issue is inherently very difficult to investigate. Nearly every issue I've ever investigated has turned out to be an issue with the Wi-Fi network, but the exact nature of that issue is incredibly varied and impossible to summarize.
Even worse, from experience, I've found that the most easily accessible data, the system console log, tends to be far less useful than you'd think. Putting that in more concrete terms, with a lot of practice and experience, all you can really determine from the console log is that:
-
Everything worked fine as far as the system is concerned, except that some final component ("the app") failed before the call reached "you". This is fairly common in 3rd-party VoIP apps, but I've NEVER seen this occur with Phone.app.
-
The device was not connected to a working network when the call arrived.
-
The device THOUGHT it was connected to a working network when the call arrived.
I picked the word "thought" intentionally. That's because I've never seen our calling infrastructure fail on a network that was actually working properly. I've seen several cases where, as far as the device is concerned, it looks like the call "should" have worked, but all of those have also turned out to be network-level problems that just happened to not be visible on the iOS device side.
For example, I've seen a few cases where a poorly configured intermediate NAT router severed the WAN side connection (the connection from the NAT router to "our" servers) while leaving the LAN side connection (the connection from the NAT router to the iOS device) open. Many of our connections are intentionally long-lived connections with minimal traffic, so the iOS device did nothing because, as far as it could tell, everything was working fine.
That leads to here:
A clear and easy way to reproduce the issue is:
Turn off the iPhone screen.
Wait 5 minutes.
Receive a phone call.
This failure pattern is extremely common with this sort of issue. While the device is being actively used, things often "work better", either because the device is simply more active on the network or because secondary effects "fix" issues which would otherwise create problems.
For example, MANY apps use APNS, which means the first thing they do on launch is ask the system for their push token. The system validates their push token by contacting our push servers of the same connections used to receive pushes, which means that many app launches indirectly either:
- Generates traffic on the push connection, acting as a quasi-keep alive.
OR
- ...or cause the system to reconnect when the transmission failure makes it realize the connection is actually dead.
All of that sort of thing stops (or slows down considerably) once the device is locked, making failure more likely.
That leads to here:
...even when the Wi-Fi connection itself is in excellent condition.
Unfortunately, this is much trickier to determine than it seems. Most of these issues happen above the "base" radio layer, which means things like signal strength aren't relevant. Similarly, the use of very long-lived connections is somewhat unusual, which means comparisons with other devices aren't all that meaningful.
Finally, on the question of bugs:
I suspect this may be a general iOS issue that has been present across several iOS versions.
From what I've written above, you might assume that I think the system is "perfect" and always works great. Let me assure you, that is not the case. I've found and experienced plenty of bugs across nearly all of the system. The difference here is that I've been looking into issues like this for a 10+ years and found SHOCKINGLY few cases where the system was the problem. Again and again, what I've found when looking at this particular area of the system is:
-
The system was working exactly as it should.
-
Something else wasn't.
I'm happy to try and answer any questions you have, but the best advice I can give is to look much more closely at your larger network instead of focusing on iOS.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware