web-dev-qa-db-ja.com

iPhoneシミュレーターでの位置情報更新のシミュレーション

ユーザーがGUIを介してiPhoneシミュレーターにGPS情報を設定できるようにしたいと思います。

しかし、私はこれをアーカイブする方法がわかりません-iSimulateと呼ばれるこのツールは 独自のSDKをインストールする によって何らかの形でこれを行うようです。しかし、それによってシミュレータがどのように「オーバーライド」/「ハッキング」されるのか理解できません。

ありがとう!

22
stephanos

私の知る限り、iSimulateはハックを採用していません。これは、シミュレータ上のアプリ内で実行されるコードであり、ネットワークを介してデバイスと通信します。デバイスからメッセージ(タッチ、GPS、加速)を受信すると、システムがトリガーしたかのようにアプリのコードを呼び出して、これらのイベントをシミュレートします。

たとえば、GPS位置の更新を受信するには、CLLocationManagerのインスタンスを作成してから、クラスの1つをデリゲートとして構成する必要があります。ええと、iPhoneシミュレータでは、代わりに偽のメッセージをデリゲートに送信するコードを開始できます。次のようにデリゲートのメソッドを呼び出すだけの場合:

[delegate locationManager:nil didUpdateToLocation:newLocation fromLocation:oldLocation];

コードは、位置情報の更新が偽であることを認識する必要はありません。凝ったものにしたい場合は、CLLocationManagerのすべてのパブリックメソッドを実装するが、代わりに偽のメッセージを送信する新しいクラスを作成できます。 (Objective-Cは動的に型指定されるため、送信するすべてのメッセージに応答する限り、サブクラスである必要はありません。)

補足として、これらのコンパイラマクロを使用して、コードシミュレータのみを保持できます。

#if TARGET_IPHONE_SIMULATOR
   locationManager = (id)[[MyFakeLocationManager alloc] init];
#else
   locationManager = [[CLLocationManager alloc] init];
#endif
11
benzado

Xcodeに統合された機能(≥4.2)があるため、2番目の回答を追加しました。場所の更新をシミュレートするには、2つの方法があります。

  • IOSシミュレーターの[デバッグ/場所]で、一定の緯度/経度を指定したり、「シティラン」や「フリーウェイドライブ」などのいくつかの定義済みプロファイルを選択したりできます。
  • Xcodeでは、デバッガーの[ステップアウト]ボタンのすぐ横に新しい場所のアイコンがあります。世界中のいくつかのハードコードされた都市を選択し、カスタムGPXファイルをプロジェクトに追加できます。 Xcodeでのロケーションシミュレーションのいいところは、デバイスでも機能することです(もう一度オフにすることを忘れないでください。そうしないと、自動タイムゾーンが間違ってしまいます!)。カスタムGPXファイルもいいですが、GPXファイルが認識されない場合、Xcodeがクラッシュすることがあります。 <wpt>タグのみを使用してください:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
  <wpt lat="47.52789018096815" lon="7.385249894876031"></wpt>
  <wpt lat="47.52720984945248" lon="7.382647784661411"></wpt>
  ...
</gpx>
47
Ortwin Gentz

IOSシミュレータには、完全な位置シミュレーションが組み込まれています。[デバッグ]メニューから、さまざまな位置オプションを探索できます。


NDA中に投稿された元の回答

このページ の右下のエントリを確認してください。私はNDAの下にいるので、かなりのガス代を節約できた以外は何も言えません。:)

1: http://developer.Apple.com/technologies/ios5/

12
wjl

http://github.com/futuretap/FTLocationSimulator で私のFTLocationSimulatorをチェックしたいかもしれません

Google Earthによって生成されたKMLファイルを読み取り、継続的な位置情報の更新を提供します。また、シミュレートされた位置更新でMKMapViewの青いuserLocationドットを更新します。

7
Ortwin Gentz

Xcode 4.2では、シミュレートできます。 (アプリを実行している間)デバッグ領域に場所のシンボルがあります。事前定義された場所がいくつかあります。また、 add 新しいGPXファイルもできます

4
Mohammed Afsul
0
100grams

ハイステファノス

GPSの情報は変更できません。これは保護されており、iSimulateで変更できるとは思いません。

私の知る限り、iSimulateは、加速度計、タッチ、向きなど、現在のGPS位置を含むコマンドをデバイスからiPhoneシミュレーターに送信するためのツールです。

ISimulateのSDKはアプリで動作します。アプリをデバイスにインストールし、SDKをプロジェクトに追加する必要があるため、通常どおりにアプリを実行してデバイスで実行する必要はありません。

乾杯、
VFN

0
vfn

@Ortwin Gentzの回答を拡張するだけです:

Gpxファイル内のすべてのgpsポイントの追加の構成が必要な場合。このページを見てください:

http://www.topografix.com/gpx_manual.asp

特定のポイントの速度や高さなどの詳細を提供する方法を正確に示します。

0
rubybeginner