I've run Speakerbox(https://docs-assets.developer.apple.com/published/8e99045a90e2/MakingAndReceivingVoIPCallsWithCallKit.zip) to check the behavior of CallKit. When there was one active call and one on hold and another call was received, the behavior was defferent depending on whether I operated it from a headset or not.
- No headset or operated from CallKit screen
- When "End & Accept" tapped: the active call is hung up, and the received call is answered.
- When "End Held & Accept" tapped: the held call is hung up, the active call is held, and the received call is answered.
- Operated from headset
- Answer opeation cannot be performed for unknown reasons
- Disconnect operation caused that all calls other than the one on hold are hung up and the held call is unheld.
- Hold operation caused that the active call is held and the received call is answered. (Strangely, there are two held calls.)
- And when I toggle calls at this time, one of the two on hold is hung up for unknown reasons.
I tried changing the settings of CXProviderConfiguration and CXCallUpdate, and changing the options in the Audio Session category, but it did not improve.
I checked CXActions occurring, and it was as follows.
(Call A = held call, Call B = active call, Call C = received call)
- Disconnect (or Answer?) operation
- (lacking CXEndCallAction for Call A)
- CXEndCallAction for Call B
- CXAnswerCallAction for Call C
- CXEndCallAction for Call C <- weird
- CXSetHeldCallAction for Call A onHold=false
- Hold operation
- (lacking lacking CXEndCallAction for Call A)
- CXSetHeldCallAction for Call B
- CXAnswerCallAction for Call C
- Toggle calls
- CXSetHeldCallAction for Call C onHold=true
- CXSetHeldCallAction for Call A onHold=false
- CXSetHeldCallAction for Call B onHold=false <- weird
- CXEndCallAction for Call B