I realise this is a little late but we ran in to a similar issue and managed to solve it by making sure the device is unlocked before fulfilling the CXAnswerCallAction.
The code looked like this:
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
checkUnlockedAndFulfill(action: action, counter: 0)
}
private func checkUnlockedAndFulfill(action: CXAnswerCallAction, counter: Int) {
if UIApplication.shared.isProtectedDataAvailable {
action.fulfill()
} else if counter > 180 { // fail if waiting for more then 3 minutes
action.fail()
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.checkUnlockedAndFulfill(action: action, counter: counter + 1)
}
}
}
Hopefully this helps.