初心者をググれカスと突き放すのは割と酷なのではないかという話 というエントリがあった。
https://teratail.com/questions/127346 にある、
毎回同じ段階でつまづいてアプリを完成させることができません。
例えば、位置情報を使ったアプリの場合1. 「GPSで位置情報を取得して、目的地に近づいたら指定した音楽を鳴らしたい!」
2. 現在地の位置情報を取得して変数に代入
3. 目的の位置情報を取得して変数に代入
4. 現在値の変数 - 目的地の変数が指定した値より小さくなった場合、音楽を再生
5. ロジックが決まって、いざ作ろうとしても位置情報の取得方法がわからない! ⇐詰む
6. このアプリ作るのムリ
7. 他のアプリを作ろうこれの繰り返しです。
について5.の部分をどうするかという話だった。
ベストアンサーには、
とりあえず「swift 現在地の位置情報を取得して変数に代入」でググってみます。
ポイントは「ios」ではなく「swift」というキーワードを添えること。
とあったが、なんでそんな微妙なキーワードでググるのかわからなかった。
そんなわけで自分だったらどうするだろうか。おもむろに「corelocation ios」で検索してみると、「ユーザの位置の取得」というAppleのページ
https://developer.apple.com/jp/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW11
が出てきた。このページで、iOSの位置情報取得機能に、
- 標準位置情報サービス
- 領域観測
- 大幅変更位置情報サービス
の3種類があることがわかった。
2分くらいでこのページを斜め読みして、下記の記述を見つけて完了であった。
標準位置情報サービスを使用するには、CLLocationManagerクラスのインスタンスを作成し、そのdesiredAccuracyプロパティおよびdistanceFilterプロパティを設定します。位置情報通知の受け取りを開始するには、そのオブジェクトにデリゲートを割り当て、startUpdatingLocationメソッドを呼び出します。位置データが利用可能になると、この位置情報マネージャは割り当てられているデリゲートオブジェクトに通知をします。位置情報の更新がすでに送信されていれば、次のイベントの送信を待たずに、最新の位置データをCLLocationManagerオブジェクトから直接取得することもできます。位置情報更新の送信を停止するには、位置情報マネージャオブジェクトのstopUpdatingLocationメソッドを呼び出します。
ただ、CLLocationManagerへのリンクはリンク切れになっていたが。
「CoreLocationってのを知ってたから検索できるんじゃん」という話であるが、普通にiPhoneに興味を持って生活していたら聞いたことくらいあるはずだ。なくても、iOSでアプリを作るなら、
iOSテクノロジーの概要 - Apple Developer
https://developer.apple.com/jp/documentation/iOSTechOverview.pdf
に目を通すくらいはしていてもおかしくないのではないか。
別にCoreLocationというキーワードを知らなくても「iOS 位置の取得 API」でググっても上記のページは3番目に出てくる。1番目と2番目のエントリはクラスメソッド株式会社のブログで、それはそれでいいのかもしれないけど、Appleの解説ページには下記のような解説もちゃんとあり、今回の作りたいアプリには有用な情報のはずだ。
iOSアプリケーションが、バックグラウンド状態であっても位置情報を監視し続けなければならないのであれば、標準位置情報サービスを使い、UIBackgroundModesキーにlocationという値を指定して、位置の更新情報を受け取れるようにしてください(この場合、電池の消耗を抑えるため、位置情報マネージャのpausesLocationUpdatesAutomaticallyプロパティをYESとすることも必要)。このような位置更新情報を要するものとして、フィットネスや道案内のアプリケーションが考えられます。
Androidの場合はさらに簡単で、https://developer.android.com/guide/ の左の目次に「ユーザーの現在地」というのが見つかるのでググる必要もないのだ。
僕はこのような質問をされたときに「ググれカス」とは言わずに「CoreLocationでググれば出てくるんじゃないか?」と言うようにしている。しかしそれを教えたとしても、イケてるやつはちゃんとAppleのページを読むが、イケてない奴はAppleのページを避けてよくわからんブログに行って、基本的なことを把握せずにコピペで動かそうとし、失敗する。なぜ一番信頼できるはずの一次情報をわざわざ避けていくのかは謎である。