Technical Q&A QA1938

iOS 10 and the Legacy VoIP Architecture

Q:  My VoIP app still uses the legacy VoIP architecture (NSStreamNetworkServiceTypeVoIP and so on). Why, when I build it with Xcode 8 and run it on iOS 10, does it no longer receive calls when in the background?

A: The legacy VoIP architecture was replaced by a new PushKit-based architecture in iOS 8. It was then formally deprecated with the iOS 9 SDK. In iOS 10 it is only available as a compatibility measure; it continues to work (as well as it ever did) if your app is linked with an old SDK, but is disabled if you link with the iOS 10 SDK.

For the moment you can work around this by building your app with Xcode 7. However, this is not a good long-term solution because:

Some VoIP apps are specifically designed to work in special networks, ones that don’t provide access to the wider Internet. To use PushKit in such an environment you must configure the network to allow iOS devices to access the Apple Push Notification Service. See TCP and UDP ports used by Apple software products for information on how to do this.

For more information about PushKit, see:

Document Revision History


First Version