idevicelocation を使用して iOS デバイスの位置情報を偽装する

Ingress や Pokemon GO のような本格的なロケーションベースのアプリのデバッグを行う際に iOS デバイスの GPS 位置情報を偽装すれば、開発者が街をさまよう必要は無くなります。Xcode には位置情報を偽装する機能がありますが、これはあまり使い勝手がよくありません。

オープンソースツールである idevicelocation を使用すると、Xcode を使わずにコマンドラインから iOS デバイスの GPS 位置情報を偽装することができます。

github.com

この記事では idevicelocation を mac に導入して、iOS デバイスの GPS 位置情報を偽装する方法について説明します。

idevicelocation をビルドする

1) 依存ライブラリのインストール

idevicelocation をビルドするために、依存しているライブラリを brew でインストールします これらのライブラリのインストールには少し時間がかかります。

brew install libimobiledevice --HEAD
brew install libtool automake libzip


2) ソースコードの取得

ライブラリをインストールしたら、idevicelocation のソースコードを github から取得します。

git clone https://github.com/JonGabilondoAngulo/idevicelocation.git
cd idevicelocation

2018年6月時点ではビルドの際に必要となるファイルがコミットされていないようです。 この問題を解決するために、libimobiledevice の git から as-compiler-flag.m4 ファイルを取得して /m4 ディレクトリへ保存します。

mkdir m4
curl -o ./m4/as-compiler-flag.m4 https://raw.githubusercontent.com/libimobiledevice/libimobiledevice/master/m4/as-compiler-flag.m4


3) ビルド

README の記述に従い、Open SSL のパスを設定します。

export PATH=/usr/local/opt/openssl/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$LD_LIBRARY_PATH
export CPATH=/usr/local/opt/openssl/include:$CPATH
export LIBRARY_PATH=/usr/local/opt/openssl/lib:$LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig

以下のコマンドを順に実行してビルドを行います。

./autogen.sh
make

ビルドが完了すると src ディレクトリに idevicelocation ファイルが出力されています。

idevicelocation をターミナルから呼び出せるように、PATH の通っているディレクトリへファイルをコピーします。

$ cp ./src/idevicelocation /usr/local/bin/idevicelocation

これで idevicelocation を使用できるようになりました。

使用方法

1) UDID を取得する

idevicelocation を使用する際には、iOS デバイスの UDID をパラメータとして渡します。

iOS デバイスを Lightning ケーブルで接続して、以下のコマンドを実行してください。 接続しているiOS デバイスの UDID が表示されるので値をメモします。

idevice_id -l


2) 位置情報を偽装する

緯度・経度と UDID をパラメータとして以下のコマンドを実行すると、iOS デバイスの GPS 位置情報が指定した座標に偽装されます。

idevicelocation <Latitude> <Longitude> -u <UDID>

UDID が "11aa2b33333c444dd5e6f7g891a22222bbb3c4dd" の iOS デバイスを東京スカイツリーの座標に偽装する場合、実行するコマンドは以下になります。

idevicelocation 35.7100144 139.810746 -u 11aa2b33333c444dd5e6f7g891a22222bbb3c4dd

コマンドを実行したら iOS のマップアプリを開いてみてください。 現在位置を示す青いアイコンががスカイツリーに移動していれば成功です。

f:id:watanabetoshinori:20180615155537p:plain

ここから別の座標に移動するには、先ほどのコマンドの緯度・軽度を変更して実行します。


3) 位置情報の偽装を終了する

位置情報の偽装を終了するには、以下のコマンドを実行します。

idevicelocation -s -u <UDID>

コマンドを実行後、数十秒程度で本来の GPS 座標に戻ります。 このコマンドを実行しないと iOS デバイスの GPS 座標が偽装されたままなので注意してください。