Hello there,
I am trying to clarify whether iOS 26 changed the expected Phone Recents behavior for CallKit calls reported with CXHandle.generic.
On iOS 18 and earlier, CallKit calls reported with:
CXHandle(type: .generic, value: <stable custom identifier>)
were grouped and displayed in Phone Recents based on the stable handle value. The details/history screen for a Recents entry showed calls for that same handle value.
On iOS 26, the same approach no longer appears to work the same way.
Observed behavior on iOS 26
I tested multiple stable CXHandle.generic values.
The Recents rows are created, but when opening the details/history screen for one Recents entry, the history shows all calls, not only calls for the selected generic handle value.
I also tested other handle types:
CXHandle(type: .emailAddress, value: <stable email-like identifier>) works as expected: Recents grouping and the details/history screen are isolated to that handle value.
CXHandle(type: .phoneNumber, value: <phone number>) also works as expected for real phone-number-style identities: Recents grouping and the details/history screen are isolated to that phone number.
CXHandle(type: .generic, value: <stable custom identifier>) does not work the same way on iOS 26: the details/history screen is not isolated to that generic handle value and instead shows all calls.
Questions
Is CXHandle.generic still intended to be a supported identity for Phone Recents grouping and the details/history screen on iOS 26?
Given that .emailAddress and .phoneNumber handles appear to isolate history correctly, is .generic intentionally treated differently by the iOS 26 Phone app, or is this a regression?
Did iOS 26 change Phone Recents/details matching so that CXHandle.generic values are no longer used as isolated per-caller identities?
If this behavior is intentional, what handle type should be used for stable non-phone CallKit identities?
Is using CXHandle(type: .emailAddress, value: "@example.invalid") an acceptable supported approach for stable non-phone identities, if the value is not a real user email address?
Is there documentation describing the iOS 26 Phone Recents identity-matching behavior for CallKit calls?
Minimal repro
Configure a CXProvider with calls included in Recents.
Report several CallKit calls using different stable generic handles, for example:
CXHandle(type: .generic, value: "app-target-1")
CXHandle(type: .generic, value: "app-target-2")
End the calls.
Open Phone Recents on iOS 26.
Open the details/history screen for one of the Recents entries.
Expected result:
The details/history screen shows only calls for the selected generic handle value.
Actual result:
The details/history screen shows all calls.
Could you clarify whether this is expected behavior on iOS 26, a regression, or an unsupported use of CXHandle.generic?
Thank you.