Hello,
I am a developer currently working on a personal contact management app.
What is the app? My app stores additional information beyond basic contact details. Therefore, instead of using the Contacts framework, I manage contact objects using Core Data.
What am I trying to achieve? I want to display additional information on the caller ID screen when a call is received from a number stored in my app.
What have I tried? I’ve attempted the following methods without success:
1. Call Directory Extension:
I thought using this method would allow me to display additional information from Core Data on the call screen. However, I learned that when a call is received, the iOS system first searches for the phone number in the Contacts app and only looks to the Extension app if no match is found. Therefore, displaying contact information from my app seems unfeasible. 2. Custom Call UI: Using CallKit seemed like a viable option to display the necessary information during a call, but it appears to only be possible with VoIP apps. My app does not support VoIP calls, so this method was also not implementable.
I am wondering if there are any technologies available that could help me achieve my goal, or if there’s something I might be missing. Any advice would be greatly appreciated.
Thank you!
If a similar question has been asked, I apologize for the repetition.
According to the documentation in https://developer.apple.com/documentation/callkit/identifying-and-blocking-calls, it seems that the Call Directory is only referenced for phone numbers that are not in the system contacts. Is that correct?
Yes, that's correct. Whatever is in the Contacts database is considered the "highest priority" data, overriding any other data source. Keep in mind that I think thinking in terms of "not referencing the data" makes the issue here less obvious than it should be. If Contacts and Call Directory both have an entry for the same number, then the system has to decide which of those numbers to use. Contacts has to be the priority, since NOT using Contacts means that the user now has numbers that that can't actually name.
For example, if the system contact is saved as “Mr. Kim Minsu” but in this app, it’s saved as “Importance 5 Kim Minsu,” I want the incoming call screen to display “Importance 5 Kim Minsu” when the call is received.
In terms of the specific "system contacts" (meaning, the entries directly in the users read/write contact database), I don't see any way to do this beside directly renaming the contact through the Contacts Framework.
However, assuming these contacts are something your system has more information about (for example, a business directory), then ContactProvider might actually work pretty well for this. All contact modification would need to got through your app (ContactProvider contacts are read-only outside of your app/extension), but you'd directly control that contact card.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware