swiftでは、coreLocationというフレームワークを使って位置情報を取得することができます。
このフレームワークを使って今いる場所の緯度経度を出力するところまで実装して
お見せできればと考えています。
実行環境は以下の通りです。
xcode:13.4.1
デバイスのiosバージョン:15.5
cocoapodsのバージョン:1.13.1
まず、viewControllerのimport UIKitの下にimport CoreLocationと書きます。
import CoreLocation
import UIKit
このアプリでは、位置情報の管理をするCLLocationManagerクラスの機能を
viewControllerが委譲して実行するのでデリゲートの委譲処理を以下のように書きます。
class ViewController: UIViewController, CLLocationManagerDelegate{
var locationManager: CLLocationManager?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
locationManager = CLLocationManager()
locationManager!.delegate = self;
locationManager!.requestWhenInUseAuthorization()
}
次に、位置情報が使える場合は、位置情報を取得するための各プロパティを設定します。locationManager!.requestWhenInUseAuthorization()の下に以下のように記述します。
if CLLocationManager.locationServicesEnabled() {
locationManager!.desiredAccuracy = kCLLocationAccuracyBest // 測位精度
locationManager!.distanceFilter = 10 // 位置情報取得間隔
locationManager!.activityType = .fitness // ユーザーアクティビティの設定
locationManager!.startUpdatingLocation() // 位置情報の取得開始
}
これを書かないと、後々のメソッド内で位置情報の取得をしようとしても取得することができません。
エラーが出ないのでわかりにくいかもしれませんが兎にも角にもプロパティ設定は必須ですね。
ここまで基本的なことは実装できましたが、位置情報取得までにやることはまだ二つあります。
一つ目は、info.plistに位置情報を取得するのに必要なkey/valueを追加すること。
keyに以下の項目を選んで追加します。swiftで位置情報を使う場合は、位置情報を
使う理由が必要になります。
Privacy - Location Always and When In Use Usage Description
Privacy - Location When In Use Usage Description
上から、常時位置情報を取得する理由。使用中の位置情報の用途です。
valueには何でもいいので何か理由を書いておきましょう。
二つ目は、Build PhasesのLink Binay With Libariesの中にCoreLocationフレームワークを
いれることです。
importはできても、ここでフレームワークを指定しないと位置情報を取得することは
できません。
場所は、TARGET->Build Phases->Link Binay With Libariesの+をクリックすると
その中にCoreLocationが入っているので見つけて追加します。
これでビルドをすれば位置情報を取得することができるようになります。
以上で位置情報を取得するアプリの説明は終了です。自分は新しめの環境ですが、別に
これ以前の環境でも同じように動作できると思うので、興味がある方は試してみてくださいね。