Swift 语言 蓝牙开发 Core Bluetooth 框架

Swift阿木 发布于 2025-05-28 11 次阅读


Swift语言【1】下Core Bluetooth框架【2】的蓝牙开发实践

随着移动设备的普及,蓝牙技术已经成为人们日常生活中不可或缺的一部分。Swift语言作为苹果公司推出的新一代编程语言,以其简洁、安全、高效的特点,受到了广大开发者的喜爱。本文将围绕Swift语言和Core Bluetooth框架,探讨蓝牙开发的相关技术,并通过实际代码示例进行讲解。

Core Bluetooth框架简介

Core Bluetooth是iOS和macOS平台上一套用于开发蓝牙应用的框架。它提供了丰富的API,使得开发者可以轻松地实现蓝牙设备的扫描、连接、数据传输【3】等功能。Core Bluetooth框架主要包含以下几个部分:

- CBCentralManager【4】:用于管理蓝牙中心设备,负责扫描、连接和断开蓝牙设备。
- CBPeripheral【5】:表示一个蓝牙外围设备,可以与中心设备进行通信。
- CBService【6】:表示一个蓝牙服务,包含多个特征(Characteristic)【7】
- CBCharacteristic【8】:表示一个蓝牙特征,可以读取、写入和通知。

蓝牙开发环境搭建

在开始蓝牙开发之前,我们需要搭建一个合适的开发环境。以下是搭建蓝牙开发环境的步骤:

1. 确保你的设备支持蓝牙4.0【9】或更高版本。
2. 在Xcode【10】中创建一个新的iOS项目,选择“Single View App”模板。
3. 在项目导航器中,找到“TARGETS”下的“YourAppName”,点击“+”,选择“New Target”,然后选择“iOS”下的“App Extension【11】”,选择“Core Bluetooth”作为模板。
4. 将新创建的App Extension拖拽到主项目中,并确保它被选中。
5. 在App Extension的“Info.plist【12】”文件中,添加蓝牙权限。

蓝牙扫描【13】与连接

下面是一个简单的蓝牙扫描与连接的示例代码:

swift
import CoreBluetooth

class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {

var centralManager: CBCentralManager!
var peripheral: CBPeripheral!

override func viewDidLoad() {
super.viewDidLoad()

centralManager = CBCentralManager(delegate: self, queue: nil)
}

func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
centralManager.scanForPeripherals(withServices: nil, options: nil)
} else {
print("蓝牙不可用")
}
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
self.peripheral = peripheral
centralManager.connect(peripheral, options: nil)
}

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
if let services = peripheral.services {
for service in services {
peripheral.discoverCharacteristics(nil, for: service)
}
}
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristics characteristics: [CBCharacteristic], for service: CBService) {
for characteristic in characteristics {
peripheral.readValue(for: characteristic, with: nil)
}
}

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if let value = characteristic.value {
// 处理接收到的数据
}
}
}

在上面的代码中,我们首先创建了一个`CBCentralManager`实例,并设置了其代理为`self`。在`centralManagerDidUpdateState`方法中,我们检查蓝牙是否可用,如果可用,则开始扫描蓝牙设备。在`centralManager(_:didDiscover:advertisementData:rssi:)`方法中,我们获取到扫描到的蓝牙设备,并尝试连接它。在`centralManager(_:didConnect:)`方法中,我们设置`peripheral`的代理为`self`,并调用`discoverServices`方法来获取设备上的服务。在`peripheral(_:didDiscoverServices:)`方法中,我们获取到服务,并调用`discoverCharacteristics`方法来获取特征。在`peripheral(_:didDiscoverCharacteristics:for:)`方法中,我们读取特征值。

蓝牙数据传输

在蓝牙连接【14】成功后,我们可以通过特征(Characteristic)进行数据传输。以下是一个简单的数据写入【15】和读取的示例代码:

swift
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if let value = characteristic.value {
// 处理接收到的数据
}
}

func writeData(data: Data) {
if let characteristic = peripheral?.services?.first?.characteristics?.first {
peripheral?.writeValue(data, for: characteristic, type: .withResponse)
}
}

在上面的代码中,`peripheral(_:didUpdateValueFor:)`方法用于处理接收到的数据。`writeData`方法用于向蓝牙设备写入数据。

总结

本文介绍了Swift语言下Core Bluetooth框架的蓝牙开发技术。通过实际代码示例,我们学习了如何进行蓝牙扫描、连接、数据传输等操作。在实际开发过程中,开发者需要根据具体需求调整代码,以满足不同的应用场景。希望本文能对蓝牙开发者有所帮助。