【Swift】端末の位置情報を利用するための準備。【Swift】端末の位置情報を利用するための準備。2020年6月16日GPSを内蔵している端末は位置情報を利用できるGPSを内蔵しているiPhoneやiPadがあれば、ソースコードで端末の位置情報を利用することができる。目的地以外でピンを刺したい場所といえば現在地だ。そこで、本記事では、端末の位置情報を利用するための準備について説明する。位置情報を利用するには、プロジェクト内で共通に使うプロパティリスト(info.plist)にプロパティを追加しておく必要がある。下図赤枠のinfo.plistをクリックしてプロパティ一覧を表示する。一覧にマウスカーソルを持っていくと下図黄緑枠の「+」ボタンが表示されるので押す(どこの行の「+」ボタンでも良い)。以下の2つのいずれか、または両方の設定を追加する。1つ目はアプリを使っているときのみ位置情報を利用する場合に設定し、2つ目はアプリがバックグラウンドの状態でも位置情報を利用し続ける場合に設定する。理由(例、端末の位置を常に地図に表示するために位置情報を利用します。理由(例、端末の位置を常に地図に表示するために位置情報を利用します。)位置情報サービスのON、OFFを確認するアプリが端末の位置情報を取得するには、位置情報サービスがONになっていて、かつ、位置情報の利用をユーザーに許可してもらう必要がある。位置情報サービスのON、OFFは、設定⇒「プライバシー」⇒「位置情報サービス」で確認できる。スイッチをONにすると位置情報サービスを利用すことになり、スイッチをOFFにするとすべてのアプリが位置情報を利用できなくなる。ソースコードから位置情報サービスのON、OFFを確認するには以下のメソッドを呼び出す。trueの場合は利用可能、falseの場合は利用不可。CLLocationManager.locationServicesEnabled()123//位置情報サービスが利用できるかを確認CLLocationManager.locationServicesEnabled()アプリインストール後の初回起動で、位置情報を使おうとしたときに位置情報サービスがOFFだった場合、下図のような、設定変更を促す画面が表示される。二回目以降は表示されない。位置情報の利用許可を確認するアプリ個別の位置情報の利用許可状況を確認するには、「設定」⇒「プライバシー」⇒「位置情報サービス」⇒アプリ名で確認する。先ほどinfo.plistに追加した項目がここに表示される。下図は「常に許可」に設定されている。ソースコードからこの設定を確認するには以下のメソッドを呼び出す。設定状況に応じで5つのステータスのいずれかが戻ってくる。SwiftCLLocationManager.authorizationStatus()12CLLocationManager.authorizationStatus()下表は5つのステータスと設定内容。位置情報サービスの利用が制限されている。「許可しない」に設定されている。「このAppの使用中のみ許可」に設定されている。「常に許可」に設定されている。ステータスがCLAuthorizationStatus.NotDetermined(未設定)のときに以下のメソッドを呼び出すと、設定を変更する画面をポップアップ表示することができる。(testManagerはCLLocationManagerクラスのインスタンス)Swift//「このAppの使用中のみ許可」に変更する画面をポップアップ表示する。testManager.requestAlwaysAuthorization()123456//「このAppの使用中のみ許可」に変更する画面をポップアップ表示する。testManager.requestWhenInUseAuthorization()//「常に許可」に変更する画面をポップアップ表示するtestManager.requestAlwaysAuthorization()下図はrequestWhenInUseAuthorizationメソッドを呼んだ結果。下図はrequestAlwaysAuthorizationメソッドを呼んだ結果。このメッセージを呼んだユーザーは、アプリが停止しても位置情報が取得され続けると誤解してしまいそうだ。ステータスがCLAuthorizationStatus.NotDetermined(未設定)以外のときに上記のメソッドを呼んでも何も表示されない。これは、設定したにも関わらずアプリを起動するたびに許可を促されるのを防止するためと考えられる。「許可しない」や「機能制限」で位置情報が取得できないままだとアプリとして成り立たない場合は、起動するたびに設定変更を促すしかない。そこで、位置情報サービスのON、OFFと利用許可のステータスに応じて、以下のコードのように処理を分けるのが良い。ちなみにViewDidLoadメソッドのプロセスからpresentViewControllerメソッドを呼び出すとエラーが発生するので、画面が表示された直後に呼び出されるviewDidAppearメソッドの中で処理を記述している。alertMessage("位置情報の利用が許可されていないため利用できません。//位置情報の取得を開始する。//位置情報の取得を開始する。alertMessage("位置情報サービスがONになっていないため利用できません。CLAuthorizationStatus.Denied:alertMessage("位置情報の利用が許可されていないため利用できません。CLAuthorizationStatus.AuthorizedWhenInUse://位置情報の取得を開始する。CLAuthorizationStatus.AuthorizedAlways://位置情報の取得を開始する。{//位置情報サービスがOFFの場合alertMessage("位置情報サービスがONになっていないため利用できません。completion:nil)}}次回記事は、位置情報サービスを利用して地図上の現在位置にピンを刺す方法を説明する。ピンの移動をアニメーションさせてリアル感を出す。...【Swift】MKLocalSearchの使い方。店名やキーワードで検索してピンを刺す。地図上のピンをドラッグ&ドロップで移動して直線を引く。...【Swift】MKMapViewDelegateの使い方。ピンの色や画像を変更する。目印として地図にピンを刺す。コメントをキャンセルメールアドレスが公開されることはありません。