CoreBluetooth für Swift: Vollständiges BLE-Guide mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

CoreBluetooth für Swift: Vollständiges Guide zu Bluetooth Low Energy

1. Was ist CoreBluetooth und wofür braucht man es?

CoreBluetooth ist ein Apple-Framework, das eine API für die Kommunikation mit Geräten über das Bluetooth Low Energy-Protokoll (BLE, Bluetooth 4.0 und höher) bereitstellt. Es ist Teil des iOS SDK und macOS SDK und damit ein natives Werkzeug für die Entwicklung im Apple-Ökosystem. Im Gegensatz zu klassischem Bluetooth ist BLE auf minimalen Stromverbrauch ausgelegt – ideal für Wearables, Sensoren, Smart Locks, Fitness-Tracker und IoT-Gadgets.

Wofür braucht man CoreBluetooth? Wenn Sie eine App für das iPhone entwickeln, die Daten mit einem Pulsmesser austauschen, eine intelligente Glühbirne steuern oder Messwerte einer Wetterstation abrufen soll – dann benötigen Sie genau dieses Framework. Es übernimmt die gesamte Low-Level-Arbeit: Scannen der Umgebung, Verbindungsaufbau, Erkennung von Diensten und Charakteristiken sowie das Lesen und Schreiben von Daten. CoreBluetooth arbeitet in zwei Rollen: Central (das Gerät, das sucht und Verbindungen aufbaut) und Peripheral (das Gerät, das sich bewirbt und Daten bereitstellt). In diesem Artikel konzentrieren wir uns auf die Central-Rolle, da sie in Apps am häufigsten benötigt wird.

Wichtig zu verstehen: CoreBluetooth ist keine externe Bibliothek, sondern ein systemeigenes Framework. Es muss nicht über einen Paketmanager installiert werden, sondern ist in Xcode sofort verfügbar. Für den korrekten Betrieb müssen Sie jedoch eine Beschreibung zur Bluetooth-Nutzung in der Info.plist hinzufügen (Schlüssel NSBluetoothAlwaysUsageDescription für iOS 13+ oder NSBluetoothPeripheralUsageDescription für ältere Versionen).

2. Installation

CoreBluetooth erfordert keine Installation über pip oder CocoaPods. Es ist Teil der Apple-Standardbibliothek. So binden Sie das Framework in Ihr Projekt ein:

  1. Öffnen Sie Ihr Projekt in Xcode.
  2. Wählen Sie das Target Ihrer App aus.
  3. Gehen Sie zum Tab "General" → "Frameworks, Libraries, and Embedded Content".
  4. Klicken Sie auf "+" und wählen Sie CoreBluetooth.framework.

Oder fügen Sie einfach den Import in Ihren Code ein:

import CoreBluetooth

Für die Arbeit mit Bluetooth im Simulator (iOS 14+ und macOS 11+) funktioniert dies ebenfalls, aber echte BLE-Geräte sind nur auf einem physischen Gerät verfügbar. Im Simulator können Sie lediglich die Scan- und Verbindungslogik testen, nicht jedoch die Datenübertragung.

3. Schnellstart – Minimales Arbeitsbeispiel

Nachfolgend finden Sie einen minimalen Code, der ein Central Device (Central Manager) initialisiert und das Scannen aller verfügbaren BLE-Geräte startet. Das Ergebnis wird in der Konsole ausgegeben.

import UIKit
import CoreBluetooth

class ViewController: UIViewController, CBCentralManagerDelegate {

    var centralManager: CBCentralManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Central Manager mit Delegat initialisieren
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }

    // MARK: - CBCentralManagerDelegate

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central.state {
        case .poweredOn:
            print("Bluetooth ist eingeschaltet. Scannen wird gestartet...")
            // Scannen aller Geräte starten
            centralManager.scanForPeripherals(withServices: nil, options: nil)
        case .poweredOff:
            print("Bluetooth ist ausgeschaltet")
        case .unauthorized:
            print("App ist nicht für Bluetooth autorisiert")
        case .unknown:
            print("Bluetooth-Status unbekannt")
        case .unsupported:
            print("Gerät unterstützt kein BLE")
        case .resetting:
            print("Bluetooth wird zurückgesetzt")
        @unknown default:
            print("Unbekannter Status")
        }
    }

    func centralManager(_ central: CBCentralManager,                    

Empfehlungen