There are quite a number of other limitations. You will want to take a look at CallKit and how it will have to replace much of the SIP stack functionality.
There’s three parts to this:
Ring indication is how your VoIP app learns about new incoming phone calls while its suspended in the background. We strongly recommend that you use PushKit for this. For more information about PushKit, see:
Older versions of iOS supported a different ring indication strategy that’s been deprecated in favour of PushKit. PushKit has been available since iOS 8.1 (it was present but not functional in 8.0) so there’s no reason for new apps to use the legacy VoIP architecture.
OS integration is all about how to make your VoIP app look like a peer of the built-in Phone app. Starting with iOS 10 there’s an excellent solution for this, CallKit. For details, see:
VoIP transport is all about how your app actually transfers voice data on the wire. iOS does not have specific APIs for this. You’ll have to write (or acquire) the code to do this, building on top of our standard networking APIs (typically BSD Sockets). And, as you noted, this will have to be compatible with IPv4-only, IPv6-only and dual stack networks.
The only specific infrastructure we provide for VoIP relates to network quality of service (QoS). Network traffic that carries voice data (which has low bandwidth but strict latency constraints) should be marked as such. To learn more about how to do this, watch WWDC 2016 Session 714 Networking for the Modern Internet.
Share and Enjoy
Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
let myEmail = "eskimo" + "1" + "@apple.com"