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 は便利だけど、エラーが起きた時の情報がちょっと少なくて、予想外に時間がかかってしまうことがあるなぁと。