Good afternoon,
Our team is currently developing a mobile application that includes video call functionality, and we are seeking the optimal approach to enable incoming calls on iOS devices.
Ideally, we would like calls to be delivered even when the app is completely closed or after the device is restarted. As I understand it, this may require obtaining VoIP permissions; otherwise, calls may only work when the app is open or running in the background.
I would appreciate it if you could confirm my understanding and advise me on the steps or requirements for obtaining the appropriate permissions.
Currently, when I try to launch the app in XCode, I see an error (screenshot).
Ideally, we would like calls to be delivered even when the app is completely closed or after the device is restarted. As I understand it, this may require obtaining VoIP permissions; otherwise, calls may only work when the app is open or running in the background.
That understanding is incorrect. Voip apps do NOT require special authorization in order to function. All any voip app require to functions is including the two UIBackgroundModes:
-
"voip"
-> This allows an app to receive voip pushes through PushKit and use CallKit to report and manage the call interface. -
"audio"
-> This allows the app to use the audio system in the background.
In Xcode, both of these are configured through the "Background Modes" capability section. That section labels them:
-
"Voice over IP" ->
"voip"
-
"Audio, AirPlay, and Picture in Picture" ->
"audio"
CallKit has a sample app "Speakerbox" which fully demonstrates all of this. It works as a "standalone" calling app by looping audio (to "fake" call input), letting a single app test and validate how our voip architecture works without requiring multiple apps or a server.
Currently, when I try to launch the app in XCode, I see an error (screenshot).
You've created that error by manually including the value "com.apple.developer.pushkit.unrestricted-voip" in your Info.plist. That entitlement was a limited use entitlement which was granted to support very specific use cases from iOS 13-> iOS 15. It is has not been available for several years, as it was disabled in the iOS 15 SDK. Deleting it from your Info.plist will resolve the error.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware