引き続き・・・
実機繋げるケーブルが手元にないので、まだテストできないけど。
Peripheral をスキャンするコードは電源が入った状態で開始するように書く場所を移動。
import UIKit
import CoreBluetooth
class ViewController: UIViewController {
var blue: Bluetooth = Bluetooth()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
class Bluetooth: NSObject, CBCentralManagerDelegate {
var centralMagaer: CBCentralManager!
override init() {
super.init()
centralMagaer = CBCentralManager(delegate: self, queue: nil)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch(central.state){
case .poweredOff:
print("Central State: Powered Off.")
break
case .poweredOn:
print("Central State: Powered On.")
self.centralMagaer.scanForPeripherals(withServices: nil, options: nil)
break
case .resetting:
print("Central State: Resetting.")
break
case .unauthorized:
print("Central State: Unauthorized.")
break
case .unknown:
print("Central State: Unknown.")
break
case .unsupported:
print("Central State: Unsupported.")
break
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
//print("Delegate: didDiscover.")
print("Discovered Peripheral: \(peripheral)")
for ad in advertisementData {
print("Advertisemented Data: \(ad)")
}
}
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
print("Delegate: didDisconnectPeripheral.")
print("Peripheral: \(peripheral)")
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print("Delegate: didConnect.")
print("Peripheral: \(peripheral)")
if let service = peripheral.services {
for src in service {
print("Service: \(srv)")
}
}
}
/*
func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) {
print("Delegate: willRestoreState.")
}
*/
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
print("Delegate: didFailToConnect.")
print("Peripheral: \(peripheral)")
}
}
Delegate 系を継承しているので、とりあえずめぼしいものを定義してみる。
xcode のヘルプから Documentation and API Reference を開いて
ショートカット: + +
目的の Delegate 名を検索すると定義できるシンボルの一覧がわかる。キーワードさえわかれば Code Editor 上で自動で補完してくれるけど。
が、「willRestoreState」だけはそのままでは怒られるのでコメントアウト。
2017-07-28 10:15:40.102566+0900 BluetoothSample [13427:2444511] [CoreBluetooth] API MISUSE: <CBCentralManager: 0x608000079ac0> has no restore identifier but the delegate implements the centralManager:willRestoreState: method. Restoring will not be supported Central State: Unsupported.
動くかどうかは不明・・・。
追記:
動いたけどログの出方が汚いので少し修正。
ひたすら Discovered な Peripheral がログに出てくる。出している奴は MacBook 側。もちろん MacBook の Bluetooth の設定は有効な状態。
Discovered Peripheral: <CBPeripheral: 0x1700fff00, identifier = /* 省略(32桁のID) */, name = MacBook Pro, state = disconnected> Advertisemented Data: (key: "kCBAdvDataIsConnectable", value: 1)