这是一个底层的、原生 Swift Bluetooth SDK,用于实现 "Central" (客户端) Core Bluetooth (BLE) 功能。
它抽象了使用 Core Bluetooth 时一些比较“繁琐”的方面,允许应用程序轻松实现蓝牙客户端功能。
实现 Apple Core Bluetooth SDK 可能是一个相当繁琐的过程。例如,发现 服务 (Services)、特征 (Characteristics) 和 描述符 (Descriptors) 可能会非常复杂和耗时。RVS_BlueThoth 在“后台”处理这些问题,让您可以专注于为应用程序或 SDK 的用户提供更丰富的体验。
RVS_BlueThoth 并非真正设计为应用程序层系统的直接依赖项(尽管在 测试工具 中已经展示了这种用法)。相反,它被设计为特定于应用程序的 "外观 (Façade)" 层的基础,例如 OBD 适配器或 mesh 设备 驱动程序。
RVS_BlueThoth 背后的基本理念是它是一个基础架构元素,因此,它需要尽可能地具有最高质量。我们已经尽一切努力确保它能够完美运行。
RVS_BlueThoth 是 100% 开源的、MIT 许可的代码。
您可以随意使用它,但请注意,我们没有义务支持该项目,并且不对它是否适合您的用途提供任何保证。
如果您不熟悉 SPM,这一系列文章 可能会有所帮助。
RVS_BlueThoth 有一个外部构建依赖项:RVS_Generic_Swift_Toolbox 项目(也由 The Great Rift Valley Software Company 编写和支持)。如果您希望构建 测试工具,那么您还需要 RVS_PersistentPrefs 项目。
包含的 XCode 工作区 已经包含这些依赖项。
RVS_BlueThoth 是一个完全原生的 Swift SDK。 它不与 Objective-C 接口。
RVS_BlueThoth 将在所有 Apple 操作系统上运行(iOS/iPadOS、MacOS、tvOS 和 WatchOS)。它可以被合并到针对这些环境中的任何一个的项目中。
SPM 构建作为静态库提供,而不是作为 动态框架 提供。 RVS_BlueThoth 是一个相当“轻量级”的代码库,并且可能是任何给定项目中较小的组件之一。 如果您更喜欢动态库,可以在项目的 Package.swift
文件 中轻松更改。 SDK 中没有资源或非代码组件。 这是一个简单的可执行代码库。
应该注意的是,Core Bluetooth 需要使用设备,而不是模拟器。该库将无法在模拟器上工作,并注册蓝牙不可用错误。
RVS_BlueThoth 没有实现 单元测试。相反,它提供了四个 测试工具应用程序;每个支持的平台一个(iOS/iPadOS、MacOS、tvOS 和 WatchOS)。
每个测试工具应用程序都是一个完全合格的、"为 App Store 发布做好准备" 的应用程序。它们充当“蓝牙嗅探器”应用程序。 事实上,iOS 测试工具 实际上已经转换为 iOS App Store 上发布的应用程序(这是源代码)。
在学习实现 SDK 时,它们应该提供出色的“起点”。
如前所述,您应该使用 Swift Package Manager (SPM) 将项目导入到您自己的项目中。如果您不确定如何操作,那么 这篇文章可能会很有帮助。
SSH GitHub URI 是 git@github.com:RiftValleySoftware/RVS_BlueThoth.git
,HTTPS GitHub URI 是 https://github.com/RiftValleySoftware/RVS_BlueThoth.git
)。
安装包后,您需要通过将以下内容添加到文件的开头,将模块导入到任何使用它的文件中。
import RVS_BlueThoth
RVS_BlueThoth 实现了 委托模式 (Delegate pattern)(但更像 观察者 (Observer))。
为了降低 SDK 的复杂性,我们创建了 一个“瓶颈”委托协议,用于处理来自 SDK 的所有响应。
如果您正在 RVS_BlueThoth 上实现一个以应用程序为中心的层,那么您可能需要考虑将其划分为观察者或绑定。 这取决于您。 为了使用 SDK,您需要有一个可以处理各种回调并相应地调度它们的单个委托。
委托是“单向的”,就像一个观察者。 它接收来自 SDK 的回调,并且不以任何方式响应。
所有委托回调都在主线程中。
委托需要是一个类(而不是结构体),并且从 SDK 内部弱引用(这意味着您需要确保它保持存在)。
四个测试工具中委托的示例位于以下源文件中
我们首先实例化 RVS_BlueThoth 类
CGA_AppDelegate.centralManager = RVS_BlueThoth(delegate: self)
此示例来自 tvOS 测试工具
请注意,我们立即提供了委托。 它可能会很快收到回调,表明蓝牙系统已设置完毕,并准备好开始扫描外围设备。
蓝牙系统准备就绪后,我们可以开始扫描外围设备(也来自 tvOS 测试工具)
centralManager?.scanCriteria = scanCriteria
centralManager?.minimumRSSILevelIndBm = prefs.minimumRSSILevel
centralManager?.discoverOnlyConnectablePeripherals = prefs.discoverOnlyConnectableDevices
centralManager?.allowEmptyNames = prefs.allowEmptyNames
centralManager?.startScanning(duplicateFilteringIsOn: !prefs.continuouslyUpdatePeripherals)
可以设置一些属性来控制如何处理发现的外围设备。
从这里开始,最好使用 API 文档 或 [深入的技术文档](技术文档)。
如果您有任何错误、功能请求、反馈等,请随时 打开一个 GitHub issue,或 直接联系我们。