Skip to content

Cordova 3.6 + Geolocation plugin in iOS 8

Cordova 3.6 + Geolocation plugin in iOS 8 published on Cordova 3.6 + Geolocation plugin in iOS 8 へのコメントはまだありません

Cordova + Geolocation Plugin で iOSアプリを作ってる

Cordova で iOS アプリを初めて作ってる。JavaScript は比較的得意なので、HTML + JS で簡単にアプリが作れて便利。

スマホアプリの場合、位置情報機能を使ったものが多くて、その場合には Cordova の Geolocation plugin というものが使えるんだけど、2点ほどつっかえたところがあったのでメモ。

環境

  • Apache Cordova 3.6.3
  • Geolocation plugin 0.3.11
  • (多分あまり関係ないけど)Xcode 6.1.1

対象プラットフォームは、今の所 iOS のみ。

インストールとか

通常通り plugin をインストールすればいいので、省略。

使ってみたら、エラーが2つほど

1. plist に何か必要らしいが・・・

一つ目のエラーは、以下の様なログ。

[Warning] No NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription key is
 defined in the Info.plist file.

ググってみると、SOにこんなのが。 Info.plist に記述を追加する必要があるらしい?

でも、この辺や、オフィシャルの情報(これこれ)見るとpluginがiOSに対応したって書いてあって、ドキュメントにも特にplistを直接いじるような事も書いてない。

結論から言うと、最新のプラグインを使っていれば問題ない。

自分の場合は、plist を手動でゴニョゴニョ修正するhookを使っていたので、それが原因だった。

2. getCurrentPosition が失敗

ようやくプラグインが動作したと思ったら、以下の様なエラーが。

1行目はプラグインが直接コンソールに出力した(?)ログで、2行目と3行目は、navigator.geolocation.getCurrentPosition の第2引数のコールバック(エラー時に呼ばれる)関数の中で、受け取ったエラーコードとエラーメッセージを表示させたもの。

locationManager::didFailWithError (null)
code: 2
message: The operation couldn<E2><80><99>t be completed. (kCLErrorDomain error 0.)

これは、どうやらiPhone Simulator のみで起こる問題っぽい。SOのこれを見て、ダメ元でDebug -> Location で “Custom Location” 以外を選択したら問題が解消した。その後、再度 Custom Location を選択しても問題なし。

まとめ

Cordova + Geolocation plugin は便利だけど、エラーが起きた時の情報がちょっと少なくて、予想外に時間がかかってしまうことがあるなぁと。