Gormsson
哈罗德“蓝牙”戈姆松是丹麦和挪威的国王。
要求
- iOS 9.1+
- Xcode 10.2+
安装
CocoaPods 与 Podfile
使用pod 'Gormsson'
打开您最喜欢的终端,转到项目根路径
pod install
Carthage 与 Cartfile
使用github "MoveUpwards/Gormsson"
打开您最喜欢的终端,转到项目根路径并运行
carthage update
Swift 包管理器
Swift 包管理器是一个自动化 Swift 代码分发的工具,已集成到 swift
编译器中。它处于早期开发阶段,但 Alamofire 支持在支持的平台中使用它。
一旦设置了 Swift 包,添加 Alamofire 作为依赖项就像将其添加到 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/MoveUpwards/Gormsson.git", from: "0.8.0")
]
使用方法
启动服务
Gormsson 的 init 方法让你定义一个特定的队列以避免在 主线程
上运行。你也可以为 CoreBluetooth
管理器提供可选的 Dictionary
。
let manager = Gormsson(queue: DispatchQueue(label: "com.ble.manager", attributes: .concurrent))
开始扫描外围设备
扫描到的每个外围设备都会在 didDiscover
块中返回,包括广告数据。查看文档以查看所有可用的 GattAdvertisement
属性。
以下示例中,我们过滤提供 HeartRate
服务的设备。
manager.scan([.heartRate], didDiscover: { [weak self] cbPeripheral, advertisementData in
print(cbPeripheral)
print(advertisementData.localName)
print(advertisementData.txPowerLevel)
print(advertisementData.isConnectable)
})
你可以自定义广告数据变量。参见 自定义广告数据。
连接外围设备
连接外围设备时,库会自动停止扫描附近的设备。
manager.connect(cbPeripheral)
读取特征
假设您想读取由您最喜欢的心率监测器传感器提供的Body Sensor Location
,您只需请求管理器读取.bodySensorLocation
特征,它将返回一个类型为BodySensorLocationEnum
的值。
manager.read(.bodySensorLocation, success: { value in
guard let location = value as? BodySensorLocationEnum else { return }
print("\(location.description)")
}, error: { error in
print(error ?? "Unknown error")
})
订阅特征更新
如果您想获取当前心率并且获得所有更新值,您可以使用特征的Notify
能力。为此,操作就像简单的读取一样简单。
现在,每当值改变时,该块将触发。
manager.notify(.heartRateMeasurement, success: { value in
guard let rate = (value as? HeartRateMeasurementType)?.heartRateValue else { return }
print("\(rate)")
}, error: { error in
print(error ?? "Unknown error")
})
写入特征
如果您想向特征写入值,操作相当直接。您提供要使用的特征以及要写入的给定值,并且可选地提供BLE写入类型。默认是.withResponse
。
manager.write(.setState, value: UInt8(1), type: .withoutResponse, success: {
print("set state success")
}, error: { error in
print("set state failure:", error ?? "nil")
})
自定义服务
为了使用自定义服务,您只需创建一个自定义的GattService
。
let gpsService = GattService.custom("C94E7734-F70C-4B96-BB48-F1E3CB95F79E")
然后您可以使用这个自定义服务来过滤扫描外部设备。
manager.scan([gpsService], didDiscover: { [weak self] peripheral, advertisementData in
})
自定义特征
为了使用符合CharateristicProtocol
的自定义特征类。
public protocol CharacteristicProtocol {
var service: GattService { get }
var uuid: CBUUID { get }
var format: DataInitializable.Type { get }
}
以下是一个自定义特征的示例,它将提供已记录GPS会话的数量。
public final class GPSSessionCount: CharacteristicProtocol {
public var uuid: CBUUID {
return CBUUID(string: "C94E0001-F70C-4B96-BB48-F1E3CB95F79E")
}
public var service: GattService {
return gpsService
}
public var format: DataInitializable.Type {
return UInt.self
}
}
然后您可以使用它与读取、notify或写入BLE命令一起使用。
manager.read(GPSSessionCount(), success: { value in
print("GPSSessionCount read:", value as? UInt ?? "nil")
}, error: { error in
print(error ?? "Unknown error")
})
自定义广告数据
如果您的BLE从属设备具有自定义制造商数据,则可以向GattAdvertisement
类添加扩展。
假设您提供了制造商数据中的从属设备MAC地址。
extension GattAdvertisement {
/// An object containing the manufacturer data of a peripheral.
open var macAddress: String? {
let gpsService = GattService.custom("C94E7734-F70C-4B96-BB48-F1E3CB95F79E")
guard let data = serviceData?[gpsService.uuid] else { return nil }
return [UInt8](data).map({ String(format: "%02hhx", $0).uppercased() })
.reversed()
.joined(separator: ":")
}
}
文档
请查看文档以检查Gormsson
库可以提供的所有功能。
贡献
在向项目提交Pull Request之前,请阅读我们的贡献指南。
支持
有关即将推出的版本的更多信息,请参阅我们的路线图。
社区支持
有关使用Strapi的一般帮助,请参考官方Gormsson文档。如有更多帮助,您可以使用以下渠道之一提问
- StackOverflow
- Slack(强烈推荐以获得更快的支持)
- GitHub.
专业支持
我们提供全面解决方案,以获得更好的更快的结果。我们总是寻找下一项挑战:咨询、培训、开发移动和Web解决方案等。
给我们发邮件,看看我们如何帮助你。
许可
折叠单元格在MIT许可下发布。有关详细信息,请参阅LICENSE。
如果您在项目中使用开源库,请确保提及并链接至www.moveupwards.dev