Core Bluetooth Mock
《Core Bluetooth Mock》库旨在模拟 Core Bluetooth 对象,为测试蓝牙应用程序提供简便的方式。由于在模拟器上不支持原生蓝牙 API,使用此库您可以在不使用实体手机或平板电脑的情况下运行、测试和截取这样的应用程序的屏幕截图。您还可以在外围设备仍在开发中的时候开始编写 iOS 应用程序。
Core Bluetooth?
Core Bluetooth 框架提供了应用程序与支持低能耗 (LE) 无线技术的蓝牙设备通信所需的所有类。它需要 iPhone 或 iPad 来工作,这使得蓝牙应用程序的测试变得困难。正如文档中所说
不要子类化 Core Bluetooth 框架中的任何类。重写这些类是不受支持的,并可能导致未定义的行为。
Core Bluetooth Mock!
《Core Bluetooth Mock》库定义了多个CBM...类和常量,用于封装或模仿来自Core Bluetooth框架的相应CB...对等类。例如,CBMCentralManager
具有与CBCentralManager
相同的API和行为等。在物理i设备上,对CBMCentralManager
和CBMPeripheral
的所有调用都转发到它们的本地等效项,但在模拟器上使用用户定义的模拟实现。
如何开始
《Core Bluetooth Mock》库仅提供Swift版本,兼容iOS 11.0及以上,macOS 10.13及以上,tvOS 11.0及以上,watchOS 4.0及以上,一些特定功能仅在较新的平台上可用。对于使用Objective-C的项目,我们推荐使用https://github.com/Rightpoint/RZBluetooth库。
包括库
此库支持CocoaPods、Carthage和Swift包管理器。
CocoaPods
-
使用以下内容创建/更新您的Podfile
target 'YourAppTargetName' do pod 'CoreBluetoothMock' end
-
安装依赖项
pod install
-
打开新创建的
.xcworkspace
Carthage
-
在项目的根目录下创建一个包含以下内容的新
Cartfile
github "https://github.com/NordicSemiconductor/IOS-CoreBluetooth-Mock" ~> x.y // Replace x.y with your required version
-
使用 Carthage 构建
carthage update --platform iOS // also supported are tvOS, watchOS and macOS
-
将 CoreBluetoothMock.framework 从 Carthage/Build 拷贝到您的项目,并按照 Carthage 的说明 进行操作。
Swift Package Manager
该库也可以作为 SPM 包包含。只需在 Xcode 中:文件 -> Swift Packages -> 添加包依赖,输入 https://github.com/NordicSemiconductor/IOS-CoreBluetooth-Mock.git 并设置所需版本、分支或提交。
如果您有 Swift.package 文件,则包括以下依赖项
dependencies: [
// [...]
.package(name: "CoreBluetoothMock",
url: "https://github.com/NordicSemiconductor/IOS-CoreBluetooth-Mock.git",
.upToNextMajor(from: "x.y")) // Replace x.y with your required version
]
并将其添加到您的目标
targets: [
// [...]
.target(
name: "<Your target name>",
dependencies: ["CoreBluetoothMock"]),
]
文档
该库的文档可通过以下链接访问 此处。
从 CoreBluetooth 迁移
迁移示例可通过以下链接访问 此处。有关分步指南,请参阅 Pull Request #1。
注意
当前迁移示例应用在测试中不使用模拟。为此,请查看此存储库中的 Example 文件夹,其中包括 nRF Blinky 应用,该应用在单元测试和 UI 测试中使用模拟外围设备。以下为示例。
示例应用:nRF Blinky
nRF Blinky是一个面向BLE新手的示例应用,同时也展示了使用Core Bluetooth Mock库的方式。该应用控制nRF5DK上的LED,并在按下和释放套件上的按钮时接收通知。
模拟实现用于单元测试和UI测试。请参考AppDelegate.swift来设置模拟环境,以及UITests.swift和UITests.swift类。
模拟外设定义在MockPeripherals.swift。
Nordic LED和按钮服务
Nordic半导体公司推出的简化专用服务,包含两个特性,一个用于控制LED3和按钮1。
-
服务UUID:
00001523-1212-EFDE-1523-785FEABCD123
- 第一个特性控制LED状态(开启/关闭)。
- UUID:
00001525-1212-EFDE-1523-785FEABCD123
- 值:
1
=> LED开启 - 值:
0
=> LED关闭
- UUID:
- 第二个特性在按键状态改变(按下/释放)时通知中心设备。
- UUID:
00001524-1212-EFDE-1523-785FEABCD123
- 值:
1
=> 按键按下 - 值:
0
=> 按键释放
- UUID:
有关完整规范,请参阅文档。
- 第一个特性控制LED状态(开启/关闭)。
需求
- 具有BLE功能的iOS设备或模拟器(以运行模拟)。
- 开发套件(除非测试模拟)。
- 在开发套件上烧写的Blinky示例固件。为了方便您使用,我们已在项目中的Firmwares目录下捆绑了两个固件。
- 要获取最新固件和检查源代码,您可以直接访问我们的开发者网站,下载所需的SDK版本,然后在
/examples/ble_peripheral/ble_app_blinky/
目录中找到闪烁示例的源代码和HEX文件。 - LBS(LED按钮服务)也支持在nRF Connect SDK中:请参阅此处.
- 有关nRFBlinky示例固件的更多信息,请参阅文档.
安装和使用
-
准备您的开发套件。
- 通过USB将开发套件连接到您的计算机。
- 开启开发套件电源。
- 开发套件现在将显示为移动存储设备。
- 将适当的HEX文件拖动(或复制粘贴)到该新设备上。
- 开发套件的LED将闪烁,并断开并重新连接。
- 开发套件现在已准备好并烧录了nRFBlinky示例固件。
-
启动Xcode并在您的目标iOS设备上构建项目(注意: iOS模拟器中不可用BLE,因此需要iOS设备才能进行真实硬件测试)。
- 在您的iOS设备上启动
应用。 - 应用将开始扫描附近的外围设备。
- 选择屏幕上出现的
外围设备(注意:如果外围设备未显示,请确保它已开启并功能正常)。 - 您的iOS设备现在将连接到外围设备并在屏幕上显示状态。
- 更改切换器值将打开或关闭LED 3。
- 按下开发套件上的按钮1将在应用上显示按钮状态为按住。
- 释放按钮1将在应用上显示状态为释放。
- 在您的iOS设备上启动