Swift 的蓝牙通用属性配置文件 (GATT)
GATT 可以作为 Swift Package Manager 包使用。要使用它,请在你的 Package.swift
中添加以下依赖项
.package(url: "https://github.com/PureSwift/GATT.git", branch: "master"),
并将 GATT
添加到你的目标依赖项。然后你可以 import GATT
来访问 GATT 功能。
平台 | 角色 | 后端 | 库 |
---|---|---|---|
macOS, iOS, watchOS, tvOS, visionOS | 中心设备 (Central), 外围设备 (Peripheral) | CoreBluetooth | DarwinGATT |
Linux | 中心设备 (Central), 外围设备 (Peripheral) | BlueZ | BluetoothLinux, GATT |
Android | 中心设备 (Central) | Java 本地接口 (Java Native Interface) | AndroidBluetooth |
WebAssembly | 中心设备 (Central) | 蓝牙 Web API | BluetoothWeb |
Pi Pico W | 外围设备 (Peripheral) | BlueKitchen BTStack | BTStack |
ESP32 | 外围设备 (Peripheral) | Apache NimBLE | NimBLE |
nRF52840 | 外围设备 (Peripheral) | Zephyr SDK | Zephyr |
import Bluetooth
#if canImport(Darwin)
import DarwinGATT
#elseif os(Linux)
import BluetoothLinux
#endif
#if os(Linux)
typealias LinuxPeripheral = GATTPeripheral<BluetoothLinux.HostController, BluetoothLinux.L2CAPSocket>
guard let hostController = await HostController.default else {
fatalError("No Bluetooth hardware connected")
}
let serverOptions = GATTPeripheralOptions(
maximumTransmissionUnit: .max,
maximumPreparedWrites: 1000
)
let peripheral = LinuxPeripheral(
hostController: hostController,
options: serverOptions,
socket: BluetoothLinux.L2CAPSocket.self
)
#elseif canImport(Darwin)
let peripheral = DarwinPeripheral()
#else
#error("Unsupported platform")
#endif
// start advertising
try await peripheral.start()
import Bluetooth
#if canImport(Darwin)
import DarwinGATT
#elseif os(Linux)
import BluetoothLinux
#endif
#if os(Linux)
typealias LinuxCentral = GATTCentral<BluetoothLinux.HostController, BluetoothLinux.L2CAPSocket>
let hostController = await HostController.default
let central = LinuxCentral(
hostController: hostController,
socket: BluetoothLinux.L2CAPSocket.self
)
#elseif canImport(Darwin)
let central = DarwinCentral()
#else
#error("Unsupported platform")
#endif
// start scanning
let stream = try await central.scan(filterDuplicates: true)
for try await scanData in stream {
print(scanData)
stream.stop()
}
GATT 是在 MIT 许可证下发布的。有关详细信息,请参阅 LICENSE。