The iOS CallKit end my call without user action.

By analysis the log, seems the following 3 calls has been ended by system callkit (Not mainly trigger the end call):

@apple Do you have similar report that the iOS CallKit End the call withtour user action?

Device info:

iPhone18,1(iPhone 16 Pro)

iOS 26.2

RCAppMobile/25.4.30.995 CTRadioAccessTechnologyNR(5G NR)

By analysis the log, seems the following 3 calls has been ended by system callkit (Not mainly trigger the end call):

I'm not sure I follow the meaning of your log data. How do you know no user action was involved?

Both calls are ending ~1s after the report which is with the range of human action, particularly if some kind of hardware action like pushing the side button of the phone or blocking through a headset's physical button is involved.

@apple Do you have similar report that the iOS CallKit End the call withtour user action?

No, not that I'm aware of.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Thanks for your reply. But if the user taps any hardware to trigger an action, the app will receive it then the app will create a CXAction to the CallKit, here the app will print the calling of for this method:

open func request(_ transaction: CXTransaction) async throws

But there is no such log, so we can make sure there is no user action, but directly from the system:

func provider(_ provider: CXProvider, perform action: CXEndCallAction) {

Thanks for your reply. But if the user taps any hardware to trigger an action, the app will receive it.

How are you receiving these events from hardware or from the call screen UI? For example, if you're on the lock screen in a call and the user taps "end call", how is your app receiving that event from the system?

I ask, because the way I'd expect this to behave and the way our sample app behaves is that the system “directly” calls "performEndCallAction:" on your CXProviderDelegate, exactly what you seem to be describing.

Then the app will create a CXAction to the CallKit, here the app will print the calling of this method:

CXCallController.request(CXTransaction) is how your app asks CallKit to perform action on your app’s behavior. For example, Speakerbox uses it to implement its own interface for starting, ending, and muting calls. However, this is only used for implementing the in-app UI. The same actions in the call screen UI will be delivered directly through the provider delegate.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

OK, I saw the difference. But we still can not know the user action type from this method.

func provider(_ provider: CXProvider, perform action: CXEndCallAction)

There is no option like actionType to know it is triggered by the CallKit screen / Hardware / unknown. Then we can know the details.

OK, I saw the difference. But we still can not know the user action type from this method. func provider(_ provider: CXProvider, perform action: CXEndCallAction)

There is no option like actionType to know it is triggered by the CallKit screen / Hardware / unknown. Then we can know the details.

Why do you want to know this? What are you trying to do? We don't provide this kind of detail because applications shouldn't be changing their behavior based on the how the user ended the call.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

The iOS CallKit end my call without user action.
 
 
Q