iOS シミュレーター内の SQLite にあるテーブルのデータを確認する方法

デバッグするために、iOS のシミュレーター内で使っている SQLite に格納されているデータを確認したり、操作したいケースはあると思います。

どうやったら iOS のシミュレーターにある SQLite のデータに到達できるのかを説明する記事です。

結論、 ~/Library/Developer/CoreSimulator/Devices/<デバイスID>/data/Containers/Data/Application/<アプリケーションID>/Documents にたどり着くまでの冒険です。

シミュレーターのIDを取得する

shell
$ xcrun simctl list | grep Booted
    iPhone SE (3rd generation) (6EE728ED-5826-469A-B12E-C2AEB4FF5D33) (Booted) 

simctl とは、 Xcodeに含まれる標準CLIツールで、主にシミュレータの管理を行うための機能を備えています。

以下のように1行で device_id を取得すれば捗ると思います。

shell
device_id=`xcrun simctl list | grep Booted | sed -nE 's/.*\(([^()]*)\).*Booted.*/\1/p'`
echo $device_id
cd ~/Library/Developer/CoreSimulator/Devices/${device_id}/data/Containers/Data/Application/

アプリケーションIDを取得する

~/Library/Developer/CoreSimulator/Devices/${device_id}/data/Containers/Data/Application のディレクトリ配下には様々なアプリケーションのIDが並びます。

今、開発中のアプリケーションIDを特定して、そのアプリケーションのテーブルのデータを確認したいのですが、アプリケーションIDを取得するには、原始的な方法を使うしかしかなさそうです。

まずシミュレーターを開きます。

Device > Erace all contents and settings... でコンテンツと設定を初期化します。

Expo のプロジェクトに移り、以下のコマンドでアプリケーションを起動します。

shell
npx expo start --clear --tunnel

Expo サーバーを立ち上げたあと、ターミナルに i (open iOS simulator)を打ち込むと、Expo Go がダウンロードされます。新たに Expo Go がインストールされるので、「最後にインストールされたアプリケーションが目的のアプリケーションである」と特定できるのです。

Application ディレクトリ内で ls -ltr コマンドを実行します。

shell
cd ~/Library/Developer/CoreSimulator/Devices/${device_id}/data/Containers/Data/Application/
ls -ltr

1番下にできたフォルダが Application のフォルダです。

shell
drwxr-xr-x@ 7 peayon  staff  224  6 25 13:44 8F29387C-F239-40FE-96AF-BACC5F89C484

以下のように application_id を取得すると捗ります。

shell
application_id=`ls -ltr | tail -n 1 | awk '{print $NF}'`
echo $application_id

省略/Application/$application_id/Documents/ExponentExperienceData まで移動すると、 %40anonymous%2Fアプリ名-id のようなディレクトリがあります。

その下に SQLite ディレクトリがあります。この SQLite ディレクトリの下に、 SQLite のデータベース情報があります。

上記の手順を簡単にする方法は以下のとおりです。

shell
device_id=`xcrun simctl list | grep Booted | sed -nE 's/.*\(([^()]*)\).*Booted.*/\1/p'`
echo $device_id
cd ~/Library/Developer/CoreSimulator/Devices/${device_id}/data/Containers/Data/Application/

application_id=`ls -ltr | tail -n 1 | awk '{print $NF}'`
cd ~/Library/Developer/CoreSimulator/Devices/${device_id}/data/Containers/Data/Application/${application_id}/Documents/ExponentExperienceData

ls -ltr

最後の ls%40pieyon%2Fsuccess-timeline みたいなアプリケーション名のディレクトリが表示されるので、そこに移動しましょう。

%40pieyon%2Fsuccess-timeline/SQLite に移動すると、テーブルファイルが見つかります。

Open . で Finder を開いて確認しましょう。

SQLite 内にあるファイルを開けば、テーブルの内容を確認できます。テーブルの確認には、 DB Browser for SQLite などがよく使われるようです。

自分が使っている DataGrip では、左側側にあるデータベースエクスプローラーにファイルをドラッグ・アンド・ドロップするだけでテーブルを開くことができました。