PLXCoreBluetooth 0.2

PLXCoreBluetooth 0.2

测试测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2016年9月

Michał MizeraPolideaMaciej Oczko维护。



  • Michal Mizera 和 Maciej Oczko

PLXCoreBluetooth 是在 CBCentralManagerCBPeripheral 上的一薄层抽象层,它使您可以通过使用 Reactive Cocoa 进行编程。

用法

示例应用

查看示例应用,它以非常直接的方式说明了所有常见的用法。要运行它,先从仓库中克隆,然后从 Example 目录中先运行 pod install,或者直接运行 pod try PLXCoreBluetooth

示例

让我们尝试搜索一些外围设备,连接到它们,查找给定服务的特征并读取。很简单。

@weakify(self)
[[[[self.centralManager rac_scanForPeripheralsWithServices:@[mySpecialService]
                                                     count:PLXCBCentralManagerScanInfiniteCount
                                                   options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @NO}]
        reduceEach:^id(CBPeripheral *peripheral, NSDictionary<NSString *, id> *advertisementData, NSNumber *RSSI) {
            return peripheral;
        }]
        flattenMap:^RACSignal *(CBPeripheral *peripheral) {
            @strongify(self)
            return [[[self.centralManager
                    rac_connectPeripheral:peripheral options:nil]
                    flattenMap:^RACSignal *(CBPeripheral *_) {
                        return [peripheral rac_discoverCharacteristics:nil forService:mySpecialService];
                    }]
                    flattenMap:^RACSignal *(NSArray<CBCharacteristic *> *characteristics) {
                        return [[[characteristics.rac_sequence signal]
                                flattenMap:^RACSignal *(CBCharacteristic *characteristic) {
                                    return [peripheral rac_readValueForCharacteristic:characteristic];
                                }]
                                collect];
                    }];
        }]

API

有两个扩展集,第一个是用于 CBCentralManager 的,第二个是用于 CBPeripheral 的。

CBCentralManager

这是确定以下所有方法是否仅在 CBCentralManager 处于已开启状态时才继续执行的一个属性。如果设置为 YES,则每个方法都会阻塞并等待已开启状态。否则,默认行为是在出现错误后立即结束。

默认设置为 NO。

@property(nonatomic, assign) BOOL plx_shouldWaitUntilPoweredOn;
搜索

搜索方法返回一个信号,包含给定服务的第一次搜索到的 count 个外围设备的信息元组(外围设备,广告数据,RSSI)。对于无限搜索,应传递 PLXCBCentralManagerScanInfiniteCount

如果搜索有限并且识别到所有外围设备,则会自动调用 stopScan。当信号被丢弃时,也会调用 stopScan

- (RACSignal *)rac_scanForPeripheralsWithServices:(nullable NSArray<CBUUID *> *)serviceUUIDs
                                            count:(NSInteger)count
                                          options:(nullable NSDictionary<NSString *, id> *)options;

停止搜索方法是一个包装器,用于调用 stopScan,并在调用后返回 @YES

- (RACSignal *)rac_stopScan;
连接

连接方法连接到外围设备,并在成功时返回它。在连接失败时,将返回错误信号。

- (RACSignal *)rac_connectPeripheral:(CBPeripheral *)peripheral
                             options:(nullable NSDictionary<NSString *, id> *)options;

断开连接方法从外围设备断开连接,并在成功时返回它。在断开连接失败时返回错误信号。

- (RACSignal *)rac_disconnectPeripheralConnection:(CBPeripheral *)peripheral;
其他

有一个信号,当打开属性改变时更新。

- (RACSignal *)rac_isPoweredOn;

CBPeripheral

这个属性用于确定下面所有方法是否只有在CBPeripheral处于连接状态时才继续执行。如果设置为YES,则每个方法都将阻塞并等待连接状态。否则,默认行为是在出错时立即完成。

默认设置为 NO。

@property(nonatomic, assign) BOOL plx_shouldWaitUntilConnected;

该属性返回最新的名称,并订阅外围设备名称的变化。

@property(nonatomic, strong, readonly) RACSignal *rac_name;

此方法返回用于订阅外围设备名称变化的通知。

- (RACSignal *)rac_peripheralDidUpdateName;

此方法返回包含随时间变化的外围设备服务的信号。

- (RACSignal *)rac_peripheralDidModifyServices;
发现

返回发现的服务数组。

- (RACSignal *)rac_discoverServices:(nullable NSArray<CBUUID *> *)serviceUUIDs;

返回给定服务的已发现包含服务的数组。

- (RACSignal *)rac_discoverIncludedServices:(nullable NSArray<CBUUID *> *)includedServiceUUIDs
                                 forService:(CBService *)service;

返回给定服务的已发现特性的数组。

- (RACSignal *)rac_discoverCharacteristics:(nullable NSArray<CBUUID *> *)characteristicUUIDs
                                forService:(CBService *)service;

返回给定特性的已发现描述符的数组。

- (RACSignal *)rac_discoverDescriptorsForCharacteristic:(CBCharacteristic *)characteristic;
读取

此方法返回RSSI值并完成,否则发出错误信号。

- (RACSignal *)rac_readRSSI;

这些方法返回读取值并在成功读取时完成,失败时发出错误信号。

- (RACSignal *)rac_readValueForCharacteristic:(CBCharacteristic *)characteristic;

- (RACSignal *)rac_readValueForDescriptor:(CBDescriptor *)descriptor;
写入

这些方法返回布尔值YES并在成功写入时完成,失败时发出错误信号。

- (RACSignal *)rac_writeValue:(NSData *)data
            forCharacteristic:(CBCharacteristic *)characteristic
                    writeType:(CBCharacteristicWriteType)writeType;

- (RACSignal *)rac_writeValue:(NSData *)data
                forDescriptor:(CBDescriptor *)descriptor;
更新

此方法返回布尔值YES,如果更改成功则完成,否则返回错误。

- (RACSignal *)rac_setNotifyValue:(BOOL)enabled
       forChangesInCharacteristic:(CBCharacteristic *)characteristic;

此方法返回更新值(从peripheral:didUpdateValueForCharacteristic:error:回调中获取),如果更新失败则返回错误。

- (RACSignal *)rac_setNotifyValue:(BOOL)enabled
andGetUpdatesForChangesInCharacteristic:(CBCharacteristic *)characteristic;

此方法返回包含值或错误的信号流(从peripheral:didUpdateValueForCharacteristic:error:回调中提取)。

- (RACSignal *)rac_listenForUpdatesForCharacteristic:(nullable CBCharacteristic *)characteristic;

要求

  • iOS 8.0+
  • Xcode 7.2+

安装

PLXCoreBluetooth可通过CocoaPods使用。要安装它,只需在Podfile中添加以下行:

pod "PLXCoreBluetooth"

作者

Maciej Oczko, [email protected]

Michal Mizera, [email protected]

许可证

PLXCoreBluetooth可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。