Hello, experts!
I'm working on a VOIP application that handles audio calls and integrates with CallKit. The problem occurs when attempting to redial a previously made audio call from the system's call history. When I try to handle the NSUserActivity
in the application(_:continue:restorationHandler:) method,
it intercepts the INStartAudioCallIntent
instead of the expected INStartCallIntent.
Background
- Deprecation Warnings: I'm encountering deprecation warnings when using INStartAudioCallIntent and INStartVideoCallIntent:
'INStartAudioCallIntent' was deprecated in iOS 13.0: INStartAudioCallIntent is deprecated. Please adopt INStartCallIntent instead. 'INStartVideoCallIntent' was deprecated in iOS 13.0: INStartVideoCallIntent is deprecated. Please adopt INStartCallIntent instead.
As a result, I need to migrate to INStartCallIntent instead, but the issue is that when trying to redial a call from the system’s call history, INStartAudioCallIntent is still being triggered.
- Working with Deprecated Intents: If I use INStartAudioCallIntent or INStartVideoCallIntent, everything works as expected, but I want to adopt INStartCallIntent to align with the current iOS recommendations.
Configuration:
- CXProvider Configuration: The
CXProvider
is configured as follows:
let configuration = CXProviderConfiguration() configuration.supportsVideo = true configuration.maximumCallsPerCallGroup = 1 configuration.maximumCallGroups = 1 configuration.supportedHandleTypes = [.generic] configuration.iconTemplateImageData = UIImage(asset: .callKitLogo)?.pngData() let provider = CXProvider(configuration: configuration)
- Outgoing Call Handle: When making an outgoing call, the
CXHandle
is created like this:
let handle = CXHandle(type: .generic, value: callId)
Info.plist
Configuration: In the info.plist, the following key is defined:
<key>NSUserActivityTypes</key> <array> <string>INStartCallIntent</string> </array>
Problem:
When trying to redial the audio call from the system's call history, the NSUserActivity
received in the application(_:continue:restorationHandler:)
method is an instance of INStartAudioCallIntent
instead of INStartCallIntent.
This happens even though INStartCallIntent
is listed in NSUserActivityTypes
in the info.plist
and I want to migrate to the newer intent as recommended in iOS 13+.
Device:
- iPhone 13 mini
- iOS version 17.6.1