iOS 26: Unable to Transition from CallKit Screen to App when remoteHandle is nil or empty string

Hello,

I am developing an internal phone application using CallKit. I am experiencing an issue with the behavior of remoteHandle settings in iOS 26 and would appreciate any insights you can provide towards a solution.

1. Problem Description

When an iPhone running iOS 26 is in a sleep state and receives a VoIP incoming call where remoteHandle is set to nil or an empty string (@""), we are unable to transition to our application (the UIExtension provided by the provider) from the CallKit UI's "More" (…) button after answering the call.

2. Conditions and Symptoms

  • OS Version: iOS 26
  • Initial State: iPhone is in a sleep state
  • Call Type: An unsolicited(unknown number) VoIP incoming call where the CXCallUpdate's remoteHandle is set to either nil or [[CXHandle alloc] initWithType:CXHandleTypePhoneNumber value:@""]
  • Symptoms: After answering the VoIP call by sliding the button, selecting the "More" (…) button displayed on the CallKit screen does not launch our application's UIExtension (custom UI), and the iPhone instead stay to the CallKit screen.

3. Previous Behavior (Up to iOS 18)

Up to iOS 18, even when remoteHandle was set to an empty string using the following code, the application would transition normally from "More" after answering an incoming call from a sleep state.

CXCallUpdate *update = [[CXCallUpdate alloc] init];
update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypePhoneNumber value:@""];

[provider reportNewIncomingCallWithUUID:uuid update:update completion:completion];

4. Unsuccessful Attempts to Resolve

The issue remained unresolved after changing the handling for unsolicited(unknown number) incoming calls as follows:

CXCallUpdate *update = [[CXCallUpdate alloc] init];
update.remoteHandle = nil; // Set remoteHandle to nil
[provider reportNewIncomingCallWithUUID:uuid update:update completion:completion];

5. Workaround (Temporary)

The problem can be resolved, and the application can transition successfully, by setting a dummy numerical value (e.g., "0") for the value in remoteHandle using the following code:

CXCallUpdate *update = [[CXCallUpdate alloc] init];
update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypePhoneNumber value:@"0"]; // Set a dummy numerical value

[provider reportNewIncomingCallWithUUID:uuid update:update completion:completion];

6. Additional Information

If remoteHandle is correctly set with the caller's number (i.e., not an unsolicited(unknown number) call; e.g., value:@"1234567890"), the application transitions normally from the "More" button after answering an incoming call from a sleep state, even in iOS 26.

The above issue does not occur when answering incoming calls while the iPhone is in an active state (not sleeping).

7. Questions

  1. Have there been any other reports of similar behavior?
  2. Should this be considered a bug in CallKit for iOS 26? Should I make file a new Feedback report?
  3. Is there a suitable method to resolve this issue when the caller ID is unsolicited (nil or an empty string)?

This problem significantly impacts user operations as end-users are unable to perform essential in-app actions such as hold or transfer after answering an unsolicited(unknown number) call from a sleep state. We are eager to find an urgent solution and would appreciate any information or advice you can provide.

Thank you for your assistance.

Answered by DTS Engineer in 870060022
  1. Have there been any other reports of similar behavior?

Nope, not that I'm aware of. To be honest, this is the first time I've ever thought of passing an empty remoteHandle. It's entirely possible you're the first person who's ever tried this, and you're certainly the first person who's asked me about it.

Should this be considered a bug in CallKit for iOS 26?

Yes and no. That is, it certainly shouldn't be behaving the way you're seeing, but I'm also not sure it should allow remoteHandle to be empty at all.

Should I make a new Feedback report?

Yes, please file a bug on this and post the bug number back here.

Having said that...

Is there a suitable method to resolve this issue when the caller ID is unsolicited (nil or an empty string)?

...the actual answer here is that "remoteHandle" should never be empty. What your app "should" put there depends on the reason the value is empty/unknown, but "remoteHandle" is the primary mechanism your app uses to tell the user about the call you're reporting. In that context, virtually any value is better than nothing.

Is there some reason you're not just using "Unknown Caller" for this case?

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

  1. Have there been any other reports of similar behavior?

Nope, not that I'm aware of. To be honest, this is the first time I've ever thought of passing an empty remoteHandle. It's entirely possible you're the first person who's ever tried this, and you're certainly the first person who's asked me about it.

Should this be considered a bug in CallKit for iOS 26?

Yes and no. That is, it certainly shouldn't be behaving the way you're seeing, but I'm also not sure it should allow remoteHandle to be empty at all.

Should I make a new Feedback report?

Yes, please file a bug on this and post the bug number back here.

Having said that...

Is there a suitable method to resolve this issue when the caller ID is unsolicited (nil or an empty string)?

...the actual answer here is that "remoteHandle" should never be empty. What your app "should" put there depends on the reason the value is empty/unknown, but "remoteHandle" is the primary mechanism your app uses to tell the user about the call you're reporting. In that context, virtually any value is better than nothing.

Is there some reason you're not just using "Unknown Caller" for this case?

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

iOS 26: Unable to Transition from CallKit Screen to App when remoteHandle is nil or empty string
 
 
Q