CoreBluetooth pour Swift : Guide Complet du Bluetooth Low Energy
1. Qu'est-ce que CoreBluetooth et pourquoi l'utiliser ?
CoreBluetooth est un framework d'Apple qui fournit une API pour communiquer avec des appareils via le protocole Bluetooth Low Energy (BLE, Bluetooth 4.0 et supérieur). Il fait partie intégrante des SDK iOS et macOS, ce qui en fait un outil natif pour le développement dans l'écosystème Apple. Contrairement au Bluetooth classique, le BLE est conçu pour une consommation d'énergie minimale, ce qui le rend idéal pour les appareils portables, les capteurs, les serrures connectées, les trackers d'activité et les gadgets IoT.
Pourquoi utiliser CoreBluetooth ? Si vous développez une application iPhone qui doit échanger des données avec un cardiofréquencemètre, contrôler une ampoule connectée ou recevoir des relevés d'une station météo, ce framework est indispensable. Il gère tout le travail de bas niveau : scan des ondes, établissement de la connexion, découverte des services et caractéristiques, ainsi que la lecture/écriture des données. CoreBluetooth fonctionne selon deux rôles : Central (l'appareil qui cherche et se connecte) et Peripheral (l'appareil qui diffuse ses informations et fournit des données). Dans cet article, nous nous concentrerons sur le rôle Central, le plus couramment utilisé dans les applications.
Il est important de noter que CoreBluetooth n'est pas une bibliothèque tierce, mais un framework système. Il n'est pas nécessaire de l'installer via un gestionnaire de paquets ; il est disponible "prêt à l'emploi" dans Xcode. Cependant, pour un fonctionnement correct, vous devez ajouter une description de l'utilisation du Bluetooth dans le fichier Info.plist (clé NSBluetoothAlwaysUsageDescription pour iOS 13+ ou NSBluetoothPeripheralUsageDescription pour les versions antérieures).
2. Installation
CoreBluetooth ne nécessite pas d'installation via pip ou CocoaPods. Il fait partie de la bibliothèque standard d'Apple. Pour ajouter le framework à votre projet :
- Ouvrez votre projet dans Xcode.
- Sélectionnez la cible (target) de votre application.
- Allez dans l'onglet "General" → "Frameworks, Libraries, and Embedded Content".
- Cliquez sur "+" et choisissez
CoreBluetooth.framework.
Ou ajoutez simplement l'import dans votre code :
import CoreBluetooth
Cela fonctionne également sur le simulateur iOS 14+ et macOS 11+, mais les appareils BLE réels ne sont accessibles que sur un appareil physique. Sur le simulateur, vous ne pouvez tester que la logique de scan et de connexion, pas le transfert de données.
3. Démarrage rapide — Exemple minimal fonctionnel
Voici un code minimal qui initialise un Central Manager et commence à scanner tous les appareils BLE disponibles. Le résultat s'affiche dans la console.
import UIKit
import CoreBluetooth
class ViewController: UIViewController, CBCentralManagerDelegate {
var centralManager: CBCentralManager!
override func viewDidLoad() {
super.viewDidLoad()
// Initialisation du Central Manager avec un délégué
centralManager = CBCentralManager(delegate: self, queue: nil)
}
// MARK: - CBCentralManagerDelegate
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
print("Bluetooth activé. Début du scan...")
// Démarrage du scan de tous les appareils
centralManager.scanForPeripherals(withServices: nil, options: nil)
case .poweredOff:
print("Bluetooth désactivé")
case .unauthorized:
print("L'application n'est pas autorisée à utiliser le Bluetooth")
case .unknown:
print("État du Bluetooth inconnu")
case .unsupported:
print("L'appareil ne prend pas en charge le BLE")
case .resetting:
print("Réinitialisation du Bluetooth en cours")
@unknown default:
print("État inconnu")
}
}
func centralManager(_ central: CBCentralManager, Aussi dans la bibliothèque
Traitement d'images : redimensionnement et recadrage en C++ avec OpenCV
Validation des données en Swift : bibliothèque Validator
Travailler avec YAML en TypeScript : parsing, génération et validation de données
Configuration des applications Swift : bibliothèque SwiftyConfiguration
Travailler avec les dates en TypeScript : bibliothèques populaires et exemples