in iOS 17 (21A5326A) audioSession.setCategory(.playAndRecord, mode: .default,options: .allowBluetooth) does not set input to bluetooth. In iOS 16 it does.
Here the steps to reproduce:
Create project with storyboard.
in info.plist add
<key>NSMicrophoneUsageDescription</key>
<string>Your microphone will be used to record your speech when you press the "Start Recording" button.</string>
put in ViewController:
import UIKit
import Speech
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
AVAudioSession.sharedInstance().requestRecordPermission { granted in
func startAudioSession(){
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playAndRecord, mode: .default,options: .allowBluetooth)
try audioSession.setActive(true,options: .notifyOthersOnDeactivation)
print(audioSession.currentRoute.description)
} catch {
@IBAction func btnTap(_ sender: UIButton) {
startAudioSession()
put button on the Main.storyboard and link it to btnTap
Connect bluetooth headset to iphone, start the App and tap button.
in iOS 16 see the current route - bluetooth.
in iOS 17 see the current route - speaker
This site contains user submitted content, comments and opinions and is for informational purposes only. Apple disclaims any and all liability for the acts, omissions and conduct of any third parties in connection with or related to your use of the site. All postings and use of the content on this site are subject to the
Apple Developer Forums Participation Agreement.
Forums
Apple Developer Program
Apple Developer Enterprise Program
App Store Small Business Program
MFi Program
News Partner Program
Video Partner Program
Security Bounty Program
Security Research Device Program