iOSの位置情報デバッグ技法をご紹介します。

みなさん、こんにちは。
アイリッジ開発チームの梅元です。

今回は、iOSの位置情報デバッグ技法をご紹介します。

位置情報系の動作を実装する際、ネックとなるのはデバッグです。雨の日も風の日も腰痛の日も、デバッグの任務はやってきます。

そんな時、強い味方となるのが、Newton Japan Inc.からリリースされているGeoPlayer、GeoFakeです。

その導入の手順をご紹介します。

事前準備

  • iPhoneを2台準備する。以下、iPhone A、iPhone Bとする。
  • iPhone Aは、デバッグ用位置情報をiPhone_Bに対してBluetooth経由で送信する役割をする。
  • iPhone Bは、iPhone Aから発信された位置情報を受け取り、作成しているアプリをデバッグする役割となる。
  • iPhone_Aにおいて、App Storeから「GeoPlayer app」をダウンロードし、インストールする。これは、Bluetooth経由でiPhone Bにデバッグ用位置情報を送信するためのアプリである。
  • Newton Japan Inc.のホームページから「GeoFakeライブラリ」をダウンロードする。これは、iPhone Bでデバッグするアプリ用のフレームワークである。

導入手順

  1. Newton Japan Inc.のホームページから、位置情報を再現するGPXデータをダウンロードする。ホノルルマラソンやマウイマラソン、トンネル走行(新潟から富山)などの走行データを再現でき、興味深い。

    ダウンロードURL : http://newtonjapan.com/GeoPlayer/ja/gpx-library

  2. iPhone AをPCに接続し、(1)でダウンロードしたGPXデータをiTunes経由で GeoPlayer app に追加し、同期する。

    20150420_01

  3. Xcode上で、作成しているアプリのプロジェクトにおいて、GoeFakeフレームワークを追加する。

    20150420_02

  4. リンカフラグ「Other Linker Flags」に「-ObjC -all_load」を追加する。

    20150420_03

  5. 作成しているアプリのソースコード内で、位置情報を利用しているクラスに「#import <GeoFake/GeoFake.h>」を追記するとともに CLLocationManagerstartUpdatingLocation を記述している部分をコメントアウトし、以下に変える。

    [[GeoFake sharedFake] setLocationManager:self.clLocationManager mapView:nil];
    [[GeoFake sharedFake] startUpdatingLocation];
    
  6. 作成しているアプリをビルドし、iPhone Bにインストール、起動する。

  7. [iPhone A] GeoPlayer app を起動し、Playback の画面左下、菱形マークをタップする。

    20150420_04

  8. [iPhone A] (2)で追加したGPXファイルを選択する。

    20150420_05

  9. [iPhone A] Setting において、「GoePlay client」「Connect」スイッチをオンにする。

    20150420_06

  10. [iPhone B (6)で起動しているアプリにおいて、iPhone_AからのBluetooth接続を受け入れるかどうかダイアログが出てくるので、「Accept」をタップする。

    20150420_07

  11. [iPhone A] Playback に戻り画面下部中央のPlayボタンをタップする。

    20150420_08

  12. [iPhone B] アプリ内の CLLocationManagerDelgate locationManager:didUpdateLocations: がコールされ、位置情報が再現される。

ご注意

GeoPlayerのご利用は、自己責任でお願いします。

ライセンスはMITのようです(2015/04 現在)。

仲間募集中

アイリッジでは、開発作業を効率的に進める方法など、楽しく情報交換しながら働ける仲間を募集しています。詳しくは募集要項へ!

URL: https://iridge.jp/recruit/


本記事はアイリッジブログで公開していたものをエンジニアリングブログとして再構成したものとなります。記事の内容は、記事執筆当時のものと異なる可能性があります。