【Swift UI】Bluejay(Bluetoothライブラリ)の使い方!

この記事からわかること
- Swift UIでBluejayを使用してBluetooth接続アプリの実装方法
- セントラルの実装
- インストールやスキャン、接続方法
- Core Bluetoothへ移行するには?
index
[open]
\ アプリをリリースしました /
環境
- Xcode:15.0.1
- iOS:17.1
- Swift:5.9
- macOS:Sonoma 14.1
Bluejayとは?
BluejayとはBluetooth(BLE)でアプリと機器を接続するための機能を提供しているiOSアプリライブラリです。iOSアプリでのBLE接続は公式のフレームワークである「Core Bluetooth」が用意されていますが、これをラップして使用しやすいようにしているのがBluejayになります。
BluejayはBLEの複数台接続には対応していないため、同時に周辺機器と接続したい際にはこのライブラリは使用できないので注意してください。
インストール
BluejayライブラリをCarthageやCocoa Podsでのインストールをサポートしています。
Carthage
Cocoa Pods
Cocoa Podsを使用してXcode15でインストール後、ビルドすると以下のようなエラーが出ました。
セントラル機能の実装と使い方
BLE機能を試したい場合はiPhoneを2台用意してペリフェラル側を実装する必要があるのでCore Bluetoothを使用してペリフェラル側を実装した以下の記事を参考にしてください。
上記の記事で実装したペリフェラル機器があるとしてセントラル側の実装をBluejayを使用して実装していきます。また今回の実装はGitHubに上げてますので参考にしてください。
Privacy - Bluetooth Always Usage Descriptionキーの追加
iOSアプリからBluetooth機能を使用するためには「info.plist」に以下のキーを追加する必要があります。
忘れずに追加してvalue
には「アプリ内でBluetooth機能を使用するため」など、Bluetooth機能を使用する理由を記述しておきます。
使用するサービス/キャラクタリスティックの準備
サービスとキャラクタリスティックの定義にはServiceIdentifier
とCharacteristicIdentifier
を使用します。引数にはUUIDを渡し、サービスとキャラクタリスティックの紐付けは引数にサービスを渡すだけになっています。
以下記事でUUIDについても解説しています。
初期設定
Bluejayを使用するためにはデリゲートのセットとstart
メソッドを実行します。これはイニシャライザの中で実行しておきます。
さまざまなデリゲートプロトコルが用意されているので準拠させておきます。準拠させたらstart
メソッドの前にそれぞれを登録しておきます。
スキャン処理
ペリフェラルをスキャンするにはscan
メソッドを渡します。引数には検索したいサービスを配列形式で渡します。ペリフェラルが見つかるとdiscovery
クロージャーの中から配列形式でScanDiscovery
型で取得できます。ScanDiscovery
型はプロパティにペリフェラルのIDや名称を保持しています。discovery
クロージャーの返り値はScanAction
型でスキャン後の挙動をコントロールすることができます。
ScanAction
はスキャンの続行、停止、ブラックリスト、コネクトの4つの挙動を決めることが可能です。
例えばスキャンして最初に見つかったペリフェラルにそのまま接続したい場合は以下のようにconnect
を指定します。
接続処理
スキャンの流れでコネクトしない場合はスキャンで検出したペリフェラルを保持しておきconnect
メソッドを使用して接続処理を後から実行することも可能です。引数には接続したいペリフェラルのIDを渡します。
Read処理
Readキャラクタリスティックを使用するにはread
メソッドを使用します。
Write処理
Writeキャラクタリスティックを使用するにはwrite
メソッドを使用します。
切断
接続中のペリフェラルと切断するためにはdisconnect
メソッドを使用します。bluejay.isConnected
プロパティから接続中であるかどうかを識別することが可能です。immediate
にtrue
を渡すと溜まっているキューを無視して即時切断することが可能です。
またcancelEverything
メソッドでは接続は維持しつつも行われている操作をリセットすることが可能です。
Core Bluetoothへ移行する
BluejayではCore BluetoothをラップしているのでCBPeripheral
やCBCentralManager
は外部に公開していません。利用したい場合はstopAndExtractBluetoothState
メソッドを使用することでタプルでそれぞれを取得することが可能です。stopAndExtractBluetoothState
メソッドはすべての操作を停止し、Bluejayのすべての状態をクリアにしてCore Bluetoothを返します。
これによりCore Bluetoothまたは別のBLEライブラリへ移行することが可能です。
Core Bluetoothから移行する
逆にCore BluetoothからBluejayへ移行したい場合はstart
メソッドのmode
の引数にuse(manager:, peripheral:)
を使用します。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。