読者です 読者をやめる 読者になる 読者になる

iPhoneシミュレータで、Core Locationを使う場合に気をつけること

iPhoneシミュレータには、GPS機能はないので、Core Locationが実機と同等に使えないのは当然ですが、知らないとハマることもあるので、メモを兼ねて、書いておこうと思います。

iPhoneシミュレータの制約

常に、同じ位置情報が返ってくる。

その値は、北緯37.33168900、西経122.03073100です。
ほぼ想像がつくかもしれませんが、これが示している実際の場所を知りたい方は、以下のリンクをクリックしてみてください。
37.33168900,-122.03073100 - Google マップ

以下のドキュメントに、このことが説明されていますね。
http://developer.apple.com/iPhone/library/documentation/Xcode/Conceptual/iphone_development/125-Using_iPhone_Simulator/iphone_simulator_application.html#//apple_ref/doc/uid/TP40007959-CH9-SW10

実機とシミュレータで、動きが違うところ

シミュレータでは位置情報利用を確認するAlertViewが表示されない

実機だと、アプリケーションが最初にCore Locationを使う時に、以下のようなAlertViewが表示されます。

私がやってみたところでは、シミュレータでは表示されませんでした。

-[CLLocationManager stopUpdatingLocation]メソッドを呼び出した時の挙動が違う。

目的の位置情報が取れたら、-[CLLocationManager stopUpdatingLocation]メソッドを呼び出して、情報の取得を中断できます。ところが、なぜかそのタイミングでも、delegateメソッド(locationManager:didUpdateToLocation:fromLocation:)が呼ばれるようです。ここで渡されるのは、その直前に取得した位置情報なので、無視するなどの考慮が必要です。
これは、実機だけの挙動で、シミュレータでは起こりません。
最初からわかっていれば、どうということはないと思いますが、実機で動かした時にいきなり遭遇したので、ちょっと混乱しました。

まあ、デバイスに依存する機能なので、実機でテストするのが基本ですね。