AirTagの位置測位データは取り出せる！① ~ダンプ編~

## 本記事のゴール
+ AirTagの位置情報を含む生データを吐かせます！
    + <img width="500px" alt="demo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611618/cea12fc8-b70c-89ff-3c5c-96b43c531ec0.gif">
+ 次回の記事まで読み進めれば，最終的に以下のようなデータを得ることができます
    +
    |timestamp  |distance  |azimuth  |elevation  |
    |---|---|---|---|
    |16466.153469| 1.526608| -90.042649| -8.601441|
    |16466.273513| 1.543757| -90.120226| -1.454071|
    |16466.395865| 1.551355| -89.938739| 9.001518|
    |16466.553616| 1.547471| -89.873304| 15.544009|
    |16466.673660| 1.547786| -88.254214| 15.305837|
    |16466.793704| 1.542401| -88.072648| 8.913718|
    |16466.913749| 1.529785| -89.061435| -3.331561|
    |16467.033793| 1.533102| -90.601608| -17.429219|
    |16467.173845| 1.525131| -93.156616| -31.547601|
    |16467.293889| 1.537368| -96.305077| -43.633401|
    |...|...|...|...|

## 背景
+ Ultra Wide Band (UWB) を用いることで，iPhoneからAirTagの位置を高精度に測位できるようになった
+ iPhoneのFind Myというアプリを通じてAirTagの位置を知ることができる
+ その位置測位データを抜き取ることは一般に難しい
+ 全2回の記事でそのデータを抽出するための方法を紹介
+ AirTagの位置測位データを研究者や開発者が活用できますように...

## 今回の準備物
+ Mac mini
+ iPhone 12 Pro
+ AirTag (iPhoneとのペアリング済)
+ USB-Lightningケーブル

## 共通の手順
+ iPhone上で[Apple公式サイト](https://developer.apple.com/bug-reporting/profiles-and-logs/)からAirTagプロファイルをダウンロード
    + Apple Developer未登録の場合はアカウントを作成 (無料)
    + AirTags for iOSのProfileを選択してダウンロード
    + これがないとデータが暗号化されたままで見れない
+ 以下の手順でiPhoneにプロファイルをインストール
    + ホーム画面から「設定」>「VPNとデバイス管理」を開く
    + AirTags Logging Profileを選択してインストール
+ Macのターミナルを開く
+ Homebrewをインストールしていない場合はインストールする
    + [こちら](https://qiita.com/zaburo/items/29fe23c1ceb6056109fd)を参考にすると良い
+ コマンド```brew install libimobiledevice```を実行してlibimobiledeviceをインストール
    + このライブラリがiOSのシステムログを出力してくれる
+ iPhoneをUSBケーブルでMacに接続
    + 「このコンピュータを信頼しますか?」が出てきたら「信頼する」を押す
    + 出てこない場合は一旦気にしなくてOK

## 有線接続時の手順
+ iPhoneのロックを解除して画面をつけたままにする
+ ターミナルでコマンド```idevicepair pair```を実行してiPhoneをMacとペアリング
    + Errorが出た場合
        + iPhone画面上に「このコンピュータを信頼しますか?」が出ていたら「信頼する」を押す
        + 上記コマンドを再実行
+ コマンド```idevice_id```を実行してiPhoneが有線で認識されているかチェック
    + <8桁-16桁のUDID> (USB) と表示されたらOK
    + 表示されない場合はケーブルを再接続するかデバイスの再起動を図る
+ コマンド```idevicesyslog -u <UDID> | grep nearbyd```を実行してAirTagデータを受信
    + nearbydというプロセスがiPhoneのFind Myアプリに相当
    + grepを用いてそのプロセスのシステムログのみを抽出
+ iPhoneでFind Myアプリを起動してAirTagを探す
    + 画面上に生データが勢いよく流れる!!

## 無線接続時の手順
+ iPhoneのロックを解除して画面をつけたままにする
+ iPhoneとMacを同じWi-Fiネットワークに接続
+ MacのFinderを開いて左側のバーからiPhoneを選択
    + 最近のMacOSにはiTunesが入っていない
    + いくつかのアプリにiTunesの機能が分割されてFinderが同期機能を担っている
+ 一般から「Wi-FiがONになっているときにこのiPhoneを表示」にチェックを入れる
    + これで無線データ抽出が可能になる
+ iPhoneのケーブルをMacから外す
+ コマンド```idevice_id```を実行してiPhoneが無線で認識されているかチェック
    + <8桁-16桁のUDID> (Network) と表示されたらOK
    + 表示されない場合はWi-Fiを繋ぎなおすなど
+ コマンド```idevicesyslog -n -u <UDID> | grep nearbyd```を実行してAirTagデータを受信
    + 有線と違って無線接続のオプションである-nをコマンドに追加
+ iPhoneでFind Myアプリを起動してAirTagを探す
    + 画面上に生データが勢いよく流れる!!

## 補足
+ Windowsでも同様の手順を踏めば実現可能と思われる
+ Ubuntuは個人的に非推奨
    + iTunesを使ってiPhoneの無線同期をONにする必要がある
    + iTunesはUbuntuに対応していない
    + Wineを使って仮想的にiTunesをインストールならありかもだが面倒

## おわりに
+ 有線・無線によらずデータを垂れ流せた方，ひとまずお疲れ様です！
+ ただこのままだと雑多すぎて何がどのデータかさっぱり分からないと思います
+ 位置に関するデータだけを抽出する方法については，[続編](https://qiita.com/MtGuchi/items/fb96aef841bbe912414b)をご覧ください!!