Sible是在iOS蓝牙低功耗(BLE)API之上的抽象层。当开发复杂的BLE应用程序时,发现服务、特征并启动读写请求的过程会迅速变得复杂且难以管理。Sible封装了这种复杂性,并使可以使用更简单、直观且易于使用的模式与BLE设备进行交互。
gem install cocoapods
安装CocoaPods。在你的XCode项目中创建一个名为Podfile
的文件,并添加以下行
pod 'Sible'
在Xcode项目目录中运行pod install
。CocoaPods应该会下载并安装Sible库,并创建一个新的Xcode工作区。在Xcode中打开此工作区。
Sible *sible = [[Sible alloc] init];
[sible scan:@"SERVICE-UUID" WithDuration:5.0 Handler:^(NSArray *scans, NSError *error) {
for (PeripheralScan *scan in scans) {
NSLog(@"Peripheral: %@", scan.peripheral);
NSLog(@"Advertisement: %@", scan.advertisement);
NSLog(@"RSSI: %@", scan.RSSI);
}
}];
Sible *sible = [[Sible alloc] init];
[sible read:peripheral ServiceUUID:@"SERVICE-UUID" CharacteristicUUID:@"CHAR-UUID"
Handler:^(CBPeripheral *peripheral, NSData *data, NSError *error) {
NSLog(@"Result: %@", data);
}];
Sible *sible = [[Sible alloc] init];
[sible write:device.peripheral ServiceUUID:@"SERVICE-UUID" CharacteristicUUID:@"CHAR-UUID" Byte:0x99
Handler:^(CBPeripheral *peripheral, NSError *error) { }];
Sible *sible = [[Sible alloc] init];
[sible write:device.peripheral ServiceUUID:@"SERVICE-UUID" CharacteristicUUID:@"CHAR-UUID" String:@"my data"
Handler:^(CBPeripheral *peripheral, NSError *error) { }];
unsigned char bytes = {0x01, 0x02, 0x03};
NSData *data = [NSData dataWithBytes:bytes length:3];
Sible *sible = [[Sible alloc] init];
[sible write:device.peripheral ServiceUUID:@"SERVICE-UUID" CharacteristicUUID:@"CHAR-UUID" Value:data
Handler:^(CBPeripheral *peripheral, NSError *error) { }];
同时执行针对多个外设的操作也是可能的。下面的例子将并行向设备列表写入。
for (CBPeripheral *peripheral in myListOfPeripherals) {
[sible write:peripheral ServiceUUID:@"SERVICE-UUID" CharacteristicUUID:@"CHAR-UUID" Byte:0x99 Handler:^(CBPeripheral *peripheral, NSError *error) { }];
}
事务是一种简单的 orchestration(编排)方式,用于使一系列连续发生的操作按顺序执行。这些操作可以是读取或写入,甚至是针对不同的外部设备(Peripherals)执行。所有的事务中的操作都是顺序执行,每次只执行一个,直到所有操作都完成。如果在事务执行过程中某个操作失败,事务将停止,并调用适当的错误处理块。
//This transaction executes 2 write operations and then a read
SiblePeripheralTransaction *transaction = [[SiblePeripheralTransaction alloc] initWithPeripheral:peripheral];
[transaction enqueueWriteOperation:@"SERVICE1-UUID" CharacteristicUUID:@"CHAR1-UUID" Byte:0x01];
[transaction enqueueWriteOperation:@"SERVICE2-UUID" CharacteristicUUID:@"CHAR2-UUID" String:@"my data"];
SibleReadOperation *readOp = [transaction enqueueReadOperation:@"SERVICE3-UUID" CharacteristicUUID:@"CHAR3-UUID"];
[sible executeTransaction:transaction Handler:^(SibleTransaction *transaction, NSError *error) {
NSLog(@"Result: %@", readOp.readValue);
}];
//This transaction executes 2 write operations and then a read.
//Each operation is executed against a different peripheral.
SibleTransaction *transaction = [[SibleTransaction alloc] init];
[transaction enqueueWriteOperation:peripheral1 ServiceUUID:@"SERVICE1-UUID" CharacteristicUUID:@"CHAR1-UUID" Byte:0x01];
[transaction enqueueWriteOperation:peripheral2 ServiceUUID:@"SERVICE2-UUID" CharacteristicUUID:@"CHAR2-UUID" String:@"my data"];
SibleReadOperation *readOp = [transaction enqueueReadOperation:peripheral3 ServiceUUID:@"SERVICE3-UUID" CharacteristicUUID:@"CHAR30UUID"];
[sible executeTransaction:transaction Handler:^(SibleTransaction *transaction, NSError *error) {
NSLog(@"Result: %@", readOp.readValue);
}];