Similar but different to a @Keselme's answer about checking availableInputs
which did not contain CarPlay for me.
More reliable in my case was checking the audioSession's current route's outputs for port type carAudio:
let audioSession = AVAudioSession.sharedInstance()
for output in audioSession.currentRoute.outputs {
if output.portType == AVAudioSession.Port.carAudio {
return true
}
}
return false