CoreBluetooth for Swift: 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

CoreBluetooth for Swift: 蓝牙低功耗完整指南

\n\n

1. 什么是 CoreBluetooth 及其用途

\n\n

CoreBluetooth 是 Apple 提供的一个框架,提供了与蓝牙低功耗(BLE,蓝牙 4.0 及以上版本)设备交互的 API。它是 iOS SDK 和 macOS SDK 的一部分,因此是 Apple 生态系统开发的本地工具。与经典蓝牙不同,BLE 专注于最低功耗,非常适合可穿戴设备、传感器、智能锁、健身追踪器和 IoT 设备。

\n\n

为什么需要 CoreBluetooth?如果您正在开发一个 iPhone 应用程序,需要与心率监测器交换数据、控制智能灯泡或从气象站获取读数,那么您将需要这个框架。它处理所有底层工作:扫描空中信号、建立连接、发现服务和特征,以及读取/写入数据。CoreBluetooth 扮演两个角色:Central(搜索并连接的设备)和 Peripheral(广播自身并提供数据的设备)。在本文中,我们将重点介绍 Central 角色,因为它在应用程序中最常用。

\n\n

重要的是要理解,CoreBluetooth 不是第三方库,而是一个系统框架。它不需要通过包管理器安装,在 Xcode 中“开箱即用”。但是,为了正常工作,您需要在 Info.plist 中添加蓝牙使用说明(对于 iOS 13+ 使用键 NSBluetoothAlwaysUsageDescription,对于更早版本使用 NSBluetoothPeripheralUsageDescription)。

\n\n

2. 安装

\n\n

CoreBluetooth 不需要通过 pip 或 CocoaPods 安装。它是 Apple 标准库的一部分。要将框架添加到项目中:

\n\n
    \n
  1. 在 Xcode 中打开您的项目。
  2. \n
  3. 选择您的应用程序 target。
  4. \n
  5. 转到 "General" 选项卡 → "Frameworks, Libraries, and Embedded Content"。
  6. \n
  7. 点击 "+" 并选择 CoreBluetooth.framework。
  8. \n
\n\n

或者,只需在代码中添加导入:

\n\n
import CoreBluetooth
\n\n

在 iOS 14+ 和 macOS 11+ 的模拟器上使用蓝牙也可以工作,但真实的 BLE 设备仅在物理设备上可用。在模拟器上,您只能测试扫描和连接逻辑,但不能测试数据传输。

\n\n

3. 快速入门 — 最小工作示例

\n\n

以下是最小代码,它初始化一个中央设备(Central Manager)并开始扫描所有可用的 BLE 设备。结果将输出到控制台。

\n\n
import UIKit\nimport CoreBluetooth\n\nclass ViewController: UIViewController, CBCentralManagerDelegate {\n\n    var centralManager: CBCentralManager!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // 使用委托初始化 Central Manager\n        centralManager = CBCentralManager(delegate: self, queue: nil)\n    }\n\n    // MARK: - CBCentralManagerDelegate\n\n    func centralManagerDidUpdateState(_ central: CBCentralManager) {\n        switch central.state {\n        case .poweredOn:\n            print("蓝牙已开启。开始扫描...")\n            // 开始扫描所有设备\n            centralManager.scanForPeripherals(withServices: nil, options: nil)\n        case .poweredOff:\n            print("蓝牙已关闭")\n        case .unauthorized:\n            print("应用程序未获得蓝牙授权")\n        case .unknown:\n            print("蓝牙状态未知")\n        case .unsupported:\n            print("设备不支持 BLE")\n        case .resetting:\n            print("蓝牙正在重置")\n        @unknown default:\n            print("未知状态")\n        }\n    }                    

推荐