Swift Playground: Bluetooth Low Energy


Have you ever wonder how it is to work with Bluetooth Low Energy, or maybe you think that BLE is a pain in the ass when you need to play with it on the iOS / MacOS side?
In this article, I would like to show that it is quite easy to start playing with it, and what is more, I did that in the MacOS Playground.

You can wonder why I am using the MacOS Playground while there is so much content provided how to work with iOS Playgrounds? The answer is easy: using the iOS Playground we do not have access to the CoreBluetooth. (The truth is that we do have access, but we get the unsupported error). Moreover, CoreBluetooth support is entirely necessary to work with BLE.

Swift Playground
Source: unsplash.com

So let’s start:

We need to capture the onScannerReady closure; as it can take some time while hardware Bluetooth module starts, and only then we can perform some action on the CBCentralManager (e.g. start scanning).
BluetoothScanner is an NSObject subclass because it is a CBCentralManagerDelegate requirement.
To find more information check:

https://developer.apple.com/documentation/corebluetooth/cbcentralmanagerdelegate

Now we need to implement the protocol methods:

As we can see, when CBCentralManager is ready we perform scannerReady closure; also there is a good practice to remove the closure reference. Thanks to that, there is no way to use it again accidentally.

How hard can it be…?

Defining a separate method to start scanning can be handy as the CBCentralManagerDelegate is a lovely old-fashioned Obj-C API.
We need to save the onDiscover closure, and perform it whenever CBCentralManager returns new discovered CBPeripheral

And the implementation of the delegate method:

Let’s decompose this method into the first one;

  • rssi: NSNumber which is the received signal strength indicator in a moment when central discovered peripheral.
  • advertisementData is a dictionary containing any advertisement data; e.g. advertised name or information is the device connectable. https://developer.apple.com/documentation/corebluetooth/cbcentralmanagerdelegate/advertisement_data_retrieval_keys ←here you can find future information about that. 🚀
  • CBPeripheral is a CoreBluetooth object reference to given peripheral.
  • CBCentralManager good known reference to the object which calls this method

It is handy to cover discovered peripheral by own protocol; It will be easier to display simple information about the peripheral.

So let us check is if it is working:

Swift Playground

Work like a charm 🍀

 

Thank you! You can find working playground example on my Github repo: https://github.com/gregiOS/Playgrounds

Sign up for Untitled Kingdom newsletter

Fresh startup & app development infobites delivered to your inbox.

➡️Check our Privacy Policy⬅️

Read more from Unititled Kingdom:

0
0
Also tagged Digital Health

How much does it cost to develop a digital health app and why?

Klaudia Raczek

Klaudia Raczek

Marketer interested in startups. Building software for web & mobile apps for digital health, FemTech, IoT and digital transformation @ untitledkingdom.com

Klaudia Raczek

Klaudia Raczek

Marketer interested in startups. Building software for web & mobile apps for digital health, FemTech, IoT and digital transformation @ untitledkingdom.com

Feb 21, 2019 6 min read
Also tagged Business

What’s my purpose of running a business?

Also tagged Work Culture

Software company vs. digital product studio. What’s the difference? What questions should you ask?

Klaudia Raczek

Klaudia Raczek

Marketer interested in startups. Building software for web & mobile apps for digital health, FemTech, IoT and digital transformation @ untitledkingdom.com

Klaudia Raczek

Klaudia Raczek

Marketer interested in startups. Building software for web & mobile apps for digital health, FemTech, IoT and digital transformation @ untitledkingdom.com

Jan 07, 2019 9 min read