web-dev-qa-db-ja.com

`startMonitoringSignificantLocationChanges`の場所の変更をシミュレートする

私はiPhoneアプリを作成し、位置情報サービスを使用しています。 startMonitoringSignificantLocationChangesCLLocationManagerメソッドを使用しています。 (私が理解しているように、これは低電力、低精度の位置情報サービス用です。)iOSシミュレーターでアプリをビルドして起動すると、位置情報が正常になります。ただし、最初の修正を超えた場所への更新をシミュレートしたいと思います。

私はこれらの2つのオプションに気づきました:

  • iOSシミュレーター:デバッグ>ロケーションメニュー
  • Xcode 4:製品>デバッグ>ロケーションのシミュレーションメニュー

これらは両方とも、初期修正をシミュレートするために問題なく機能します。 (たとえば、前者から「Apple」を選択するか、後者から「Moscow」を選択します。)ただし、これらのいずれかを後で変更しても、シミュレートされたアプリで別の場所の更新はトリガーされません。

startMonitoringSignificantLocationChangesを使用しているときに、シミュレートされた場所が変更されたときに通知を受け取ることを望んでいます。 (iOSシミュレーターdoes代わりにstartUpdatingLocationを使用すると、一連の更新が生成されます。)これにより、デバイスを現場に持ち出すことなく、ロケーション対応アプリケーションのテストがはるかに簡単になります。

2つの質問:

  • これら2つの違いは何ですか?
  • IOSシミュレータやXcode4を使用して、一連の場所の変更をシミュレートするにはどうすればよいですか?

乾杯。

26
ocarlsen

トラックを作成する場合は、次のようなウェイポイントを使用してGPXファイルを作成できます。

<?xml version="1.0" encoding="UTF-8"?>
<gpx>
    <wpt lat="52.373" lon="4.871"></wpt>
    <wpt lat="52.374" lon="4.872"></wpt>
    <wpt lat="52.375" lon="4.871"></wpt>
</gpx>

Track.gpxとして保存します。最初に空白がないように注意してください。

ビルドして実行すると、Xcodeの下部に場所の矢印が付いたツールバーがあります(iPhoneのツールバーと同様)。 「場所のシミュレーション」用です。そこをクリックして、GPXファイルをロードします。アプリがシミュレーターで実行されている場合、青い点が動き回るはずです。タイミングを制御する方法はないと思うので、0.5秒ごとに位置を更新します。

シミュレータメニューで確認できる違いは、カスタムトラックを作成することはできず、カスタムポイントのみを作成できることです。メニューオプションが異なる理由はわかりません。おそらく、ある時点でシミュレータにカスタムトラックのオプションが追加されるでしょう。

36
nevan king

FWIW、重要な場所の変更の監視は、セルタワーの三角測量とハンドオフにほぼ独占的に結びついています。これがシミュレータで処理される方法は、おそらくデバイス上での処理とは大きく異なります。地域の監視でさえ、より頻繁な更新を取得するために位置情報を使用するWifiやその他のアプリの追加ボーナスを取得します。

これは、非常に離れた場所を渡して論理的にトリガーする必要がある場合でも、シミュレーターがどのように機能するかを推測しています。これは、更新の処理方法ではありません。シミュレータにはセルタワーのハンドオフがないため、重要な変更を実際にテストする方法はありません。

9
Bill Burgess

startMonitoringSignificantLocationChangesを使用したときに更新がない理由について@ Nevan-kingの回答をフォローアップする

Apple func startMonitoringSignificantLocationChanges()に関する注記を参照してください。

アプリは、デバイスが以前の通知から500メートル以上移動するとすぐに通知を期待できます。 5分に1回よりも頻繁に通知を期待するべきではありません。デバイスがネットワークからデータを取得できる場合、ロケーションマネージャはタイムリーに通知を配信する可能性がはるかに高くなります。

0
Oded Regev