MKMapViewに現在地を表示する


MapKitとCoreLocationライブラリをリンクして、StoryboardにMapViewを貼り付けて、MapViewの「User Location」にチェックを入れて、という手順までは、まあ素直に進むと思います。

そのまま起動すると以下のようなエラーが。

2016-08-05 22:25:41.739 MapTest[1844:443449] Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

言われるまま、request..メソッドを足します。

let lm = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()

    lm.requestWhenInUseAuthorization()
    lm.startUpdatingLocation()
}

が、これでも現在地が表示されません。そもそも、位置情報利用を許可するためのダイアログも出ません。もう一手間必要なんですね。Info.plistに以下のプロパティを足してやります。

NSLocationWhenInUseUsageDescription

値はなんでも良いのですが、ダイアログの下部に表示されます(添付画像の「Hello MapKit」の部分)。

これで晴れて現在地が表示されます!

参考