CBCentralManager delegate never fires on iOS 26, auth status returns 0 but permission dialog never appears

2 hours ago 1
ARTICLE AD BOX

I'm trying to scan for BLE devices using CoreBluetooth on iOS 26.5.
The permission dialog never appears and centralManagerDidUpdateState
never fires, despite CBCentralManager.authorization returning 0
(not determined).

**Setup:**
- iPhone running iOS 26.5
- Xcode 16
- NSBluetoothAlwaysUsageDescription set in Info.plist
- NSBluetoothPeripheralUsageDescription set in Info.plist

**Code:**

class ViewController: UIViewController, CBCentralManagerDelegate {
var centralManager: CBCentralManager!

override func viewDidAppear(\_ animated: Bool) { super.viewDidAppear(animated) print("Auth status: \\(CBCentralManager.authorization.rawValue)") // prints 0 (not determined) centralManager = CBCentralManager(delegate: self, queue: nil) } func centralManagerDidUpdateState(\_ central: CBCentralManager) { // this never fires print("State: \\(central.state.rawValue)") }

}

**Console output:**
Auth status: 0
(nothing else — centralManagerDidUpdateState never called)

**What I've tried:**
- Reset Location & Privacy on device
- Deleting and reinstalling the app
- Using DispatchQueue.global(qos: .background) for the queue
- Adding CBCentralManagerOptionShowPowerAlertKey: true to options
- Both SwiftUI and UIKit approaches

Has iOS 26 changed how Bluetooth permissions are triggered?

Read Entire Article