List devices that are in range of Bluetooth device in Swift
12,903
To tell a Playground that your code does something in the background, you have to import XCPlayground
and call XCPSetExecutionShouldContinueIndefinitely()
.
This will keep the IOBluetoothDeviceInquiry alive in the Playground and allow it to call the delegate method when finished.
import Cocoa
import IOBluetooth
import XCPlayground
class BlueDelegate : IOBluetoothDeviceInquiryDelegate {
func deviceInquiryComplete(sender: IOBluetoothDeviceInquiry, error: IOReturn, aborted: Bool) {
aborted
println("called")
var devices = sender.foundDevices()
for device : AnyObject in devices {
if let thingy = device as? IOBluetoothDevice {
thingy.getAddress()
}
}
}
}
var delegate = BlueDelegate()
var inquiry = IOBluetoothDeviceInquiry(delegate: delegate)
inquiry.start()
XCPSetExecutionShouldContinueIndefinitely()
While the above approach works, I find it easier to create simple, traditional test projects for tasks that need concepts like async-code, delegation, ...
Comments
-
David Padbury almost 2 years
I have the following code in a Xcode 6 playground:
import Cocoa import IOBluetooth class BlueDelegate : IOBluetoothDeviceInquiryDelegate { func deviceInquiryComplete(sender: IOBluetoothDeviceInquiry, error: IOReturn, aborted: Bool) { aborted var devices = sender.foundDevices() for device : AnyObject in devices { if let thingy = device as? IOBluetoothDevice { thingy.getAddress() } } } } var inquiry = IOBluetoothDeviceInquiry(delegate: BlueDelegate()) inquiry.start()
I'm just getting started with Bluetooth under OSX, and all I currently would like is a list of devices in range.
It doesn't seem to be calling my delegate method at all.
I'm new to OSX development and Swift, so be gentle. :)
-
cocoseis over 8 yearsHow exactly would you do this using a "traditional test projects"?
-
Thomas Zoechling over 8 yearsJust create a new Xcode project (instead of using a Playground). While using XCPSetExecutionShouldContinueIndefinitely works, a compiled executable (with a runloop and the ability to attach a debugger) is easier to handle when the test project evolves.
-
Dylan over 6 yearsYou can find an updated Swift 4.0 answer here (stackoverflow.com/questions/40636726/…)