前書き
iOS14では、CoreLocationの仕組みが一部変更された。それにより、authorizationStatus()がDeprecatedになった。
今回は、iOS14環境で位置情報を取得する方法を記載します。
プログラム
ViewController.swift
import UIKit
import CoreLocation
class ViewController: UIViewController {
var locationManager: CLLocationManager?
override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager!.delegate = self
locationManager!.requestWhenInUseAuthorization() // ユーザーの使用許可を確認
// デバイスの位置情報が有効の場合
if CLLocationManager.locationServicesEnabled() {
locationManager!.desiredAccuracy = kCLLocationAccuracyBest // 測位精度(最高に設定)
locationManager!.distanceFilter = 10 // 位置情報取得間隔
locationManager!.activityType = .fitness // ユーザーアクティビティ(フィットネス)の設定
locationManager!.startUpdatingLocation() // 位置情報の取得開始
}
}
}
// MARK:-- GPS
extension ViewController: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let newLocation = locations.last else { return }
let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude)
print("緯度: ", location.latitude, "経度: ", location.longitude)
}
}
測位精度
- kCLLocationAccuracyBestForNavigation
- ナビゲーションアプリのための高い精度と追加のセンサーも使用する
- kCLLocationAccuracyBest
- 最高レベルの精度
- kCLLocationAccuracyNearestTenMeters
- 10メートル以内の精度
- kCLLocationAccuracyHundredMeters
- 100メートル以内の精度
- kCLLocationAccuracyKilometer
- キロメートルでの精度
- kCLLocationAccuracyThreeKilometers
- 3キロメートルでの精度
frameworkの設定
「BuildPhases」 → 「Link Binary With Libraies」 → 「+」 → 「CoreLocation.framework」
の手順でCoreLocation.frameworkを追加する。
info.plistの編集
直接編集
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>NSLocationWhenInUseUsageDescription</key>
<string>App uses Loacation data</string>
...
</dict>
</plist>
動作確認
- Simulatorを起動
- デバッグエリアの「Simulate Location」の矢印を選択
- ロケーションを選択したら対応した位置情報を取得
参考文献