iOS 26 Phone Recents: CXHandle.generic no longer groups CallKit VoIP calls/history by handle value

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

  1. Is CXHandle.generic still intended to be a supported identity for Phone Recents grouping and the details/history screen on iOS 26?

  2. 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?

  3. Did iOS 26 change Phone Recents/details matching so that CXHandle.generic values are no longer used as isolated per-caller identities?

  4. If this behavior is intentional, what handle type should be used for stable non-phone CallKit identities?

  5. Is using CXHandle(type: .emailAddress, value: "<stable-id>@example.invalid") an acceptable supported approach for stable non-phone identities, if the value is not a real user email address?

  6. Is there documentation describing the iOS 26 Phone Recents identity-matching behavior for CallKit calls?

Minimal repro

  1. Configure a CXProvider with calls included in Recents.
  2. 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")
  3. End the calls.
  4. Open Phone Recents on iOS 26.
  5. 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.

iOS 26 Phone Recents: CXHandle.generic no longer groups CallKit VoIP calls/history by handle value
 
 
Q