Hello everybody
Not sure if this is the right forum to ask my question, please give me feedback if this is OT. Ok, now my problem. I'm currently updating our CallKit based app for iOS 13 and found the following problem: If you try to call any contact from the Contacts.app in iOS 13 with your CallKit app, it will NOT get any contact information (and will not be able to call your contact then). Why? Apple changed the intent from INStartAudioCallIntent
to INStartCallIntent
. I tried to fix this by extending the case statement handling intents:
// iOS < 13.0
case "INStartAudioCallIntent":
if let to = (userActivity.interaction?.intent as! INStartAudioCallIntent).contacts?.first?.personHandle?.value {
// logic
}
// iOS > 13.0
case "INStartCallIntent":
if let to = (userActivity.interaction?.intent as? INStartCallIntent).contacts?.first?.personHandle?.value {
// logic
}
I can't compile this using Xcode 10 because INStartCallIntent
is not available. Compiling with Xcode 11 beta is also a no-go as Apple does not accept apps compiled with Xcode 11 yet. Wrapping this in an if #available
statement does not work either as Xcode still complains about the missing type. I also tried combining the two cases, however this results in crashing the app as a INStartCallIntent
can not be casted to a INStartAudioCallIntent
.
It looks like the official Skype app has the same problem though, as calling from the Contacts.app does not work in the iOS beta. WhatsApp however does work, and I think this because WhatsApp is still built in Objective-C which does clearly not have this problems.
Any ideas how to fix this? Is there a way to dynamically cast in Swift?