Apple製開発ツール「Bluetooth Explorer」でBLEデバイスのGATT仕様を確認する

##Bluetooth Explorerとは？

Appleが提供する開発用ツールに、「Bluetooth Explorer」というものがあります。

![icon.png](https://qiita-image-store.s3.amazonaws.com/0/3180/c6455303-3836-ce2f-fd7a-e15c70ee3eec.png)


Bluetoothにまつわる諸々の解析や設定を行うためのツールで、非常に多くの機能を持っています。

![screenshot_r1_c1.jpg](https://qiita-image-store.s3.amazonaws.com/0/3180/8b62929f-1189-68fe-a4dd-4cfd067db6fc.jpeg)

上記のスクリーンショット、全部Bluetooth Explorerのウィンドウです。**MBP 15 Retina の最高解像度設定で画面が埋まる程度**にツールを立ち上げてみましたが、他にもまだまだ多くの機能があります。。


##BLE と Bluetooth Explorer

機能がありすぎて今日まで気付かなかったのですが、BLE向けの機能も持っています。

![konashi_r1_c1.jpg](https://qiita-image-store.s3.amazonaws.com/0/3180/eae90c6a-b97c-de48-b6c3-15d8f54ab04f.jpeg)

**Bluetooth Low Energy のデバイスをスキャン、接続し、提供するサービス／キャラクタリスティックを確認** することができます。


##何が嬉しいのか？

・・・とここまで書いたところで、これの何が嬉しいの？ **iOSアプリの「LightBlue」とか「BLExplr」でいいんじゃないの？？** という声が聞こえてきそうですが、いくつかiOS×BLEに関わるエンジニアにとって嬉しい点があります。

###ANCSのサービス・キャラクタリスティックが見える

ひとつは、**ANCS (Apple Notification Center Service) のサービス・キャラクタリスティックも見える** という点です。

![ancs_r1_c1.jpg](https://qiita-image-store.s3.amazonaws.com/0/3180/8b7551f4-e21b-698c-4143-c6a3365ef725.jpeg)

ANCSについてはまた別途記事を書こうと思いますが（というかそもそもそれを書こうとする中でこの記事が派生して生まれたわけですが）、**iOSからの電話着信やメール受信などの通知を外部デバイスで受け取るためのサービス**です。

で、この ANCS、iOS自体が提供するサービスなので、iOSデバイスはサービス利用側にはなれません（※1）。したがって、 **別のiOSデバイスからスキャンして接続しても、ANCSサービスは見つからない**ようになっています。

そんなわけで、iPhone に インストールした LightBlue や BLExplr からはこのサービスは見えないので（※2）、そこに Bluetooth Explorer を使って見てみると、「**おーANCSほんとにあった！**」となって嬉しい、ぐらいのメリットがあります。

- ※1: ただし、iOS 6 は ANCS の利用側にもなれたとのこと
- ※2: LightBlue の Mac 版では見えます。Android端末とかでも試してませんが当然見えるかと。

####ANCSの参考記事

- [Apple Notification Center Serviceの解説](http://reinforce-lab.github.io/blog/2013/10/28/ancs/)


###アドバタイズメントデータの中身の確認が捗る

iOS の Core Bluetooth では、実際に受信されているアドバタイズメントデータの中身を全部 didDiscoverPeripheral〜 の引数に渡してくれるわけではありません。

たとえば iBeacon の UUID や Major / Minor は、AD Type `FF` （Manufacturer のカスタム AD Type を示す）の AD Structure に格納されますが、

```
1A # Number of bytes that follow in second (and last) AD structure
FF # Manufacturer specific data AD type
4C 00 # Company identifier code (0x004C == Apple)
02 # Byte 0 of iBeacon advertisement indicator
15 # Byte 1 of iBeacon advertisement indicator
e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon proximity uuid
00 00 # major 
00 00 # minor 
c5 # The 2's complement of the calibrated Tx Power
```

(http://stackoverflow.com/questions/18906988/what-is-the-ibeacon-bluetooth-profile)


iOS の Core Bluetooth でスキャンした場合、当該ビーコンのアドバタイズを受信しても、**肝心の上記の Manufacturer Data が didDiscoverPeripheral〜 の引数には入ってこない**ため、Core Bluetooth を用いて直接これらの情報を取得し取り扱う、ということができません。

- 参考記事：[Eddystone と iOS - その1: iBeacon と比較したメリット・デメリット](http://qiita.com/shu223/items/9ff648211af6554ebaf0)


一方、Bluetooth Explorer を用いると、アドバタイズメントデータの内容が左下のビューに表示され、iBeacon の UUID 等も確認することができます。

![ibeacon4_.jpg](https://qiita-image-store.s3.amazonaws.com/0/3180/5423461a-58b4-dbbf-d1db-ca99e65b3ee0.jpeg)

ちなみにこれは UI 設計の問題で iOS や Core Bluetooth の制約によるものではありませんが、iOS の LightBlue ではアドバタイズメントデータの中身を見るためにはいったん接続を確立しないといけない （接続確立後の詳細画面で表示するUIになっている）、という点を鑑みても、**Bluetooth Explorer の方がアドバタイズメントデータの中身を確認するという用途には便利**です。


##Bluetooth Explorer インストール方法

Xcode のメニューの、

```
[Xcode] > [Open Developer Tool] > [More Developer Tools...]
```

を選択するとブラウザが起動し、Apple の開発用ツールのダウンロードページが開きます。

で、そこから「Hardware IO Tools」をダウンロードすると、その中に Bluetooth Explorer.app が含まれています。


##Low Energy Devices ウィンドウの起動方法

Bluetooth Explorer のメニューの、

```
[Devices] > [Low Energy Devices]
```

で起動します。


##（2015.3.23 追記）

konashi開発者の松村礼央さんと、iOSエンジニアの堤（私）とで、iOS × BLE の技術書を執筆させていただきました。

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4883379736/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51XxjzdT%2BKL._SL160_.jpg" alt="iOS×BLE Core Bluetoothプログラミング" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4883379736/22301-22/ref=nosim/" name="amazletlink" target="_blank">iOS×BLE Core Bluetoothプログラミング</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 15.03.23</div></div><div class="amazlet-detail">堤 修一 松村 礼央 <br />ソシム <br />売り上げランキング: 898<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4883379736/22301-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>

BLEを使ったiOSアプリ開発についてゼロから学べて、実案件レベルにも使える全480ページの大ボリューム本となっております。どうぞよろしくお願いします。

紹介記事：[技術書『iOS×BLE Core Bluetooth プログラミング』の紹介](http://qiita.com/shu223/items/e1c91f176a48475cd2ad)