位置情報サービス

概要

アプリはiOSの位置情報サービスから緯度、経度を取得できる。

ユーザーによる認可

アプリがiOSの位置情報サービスにアクセスするには、Authorization(ユーザーによる認可)が必要である。

アプリがiOSの位置情報サービスにアクセスしようとすると、iOSがユーザーに認可を求める。ユーザーが認可すると、アプリは位置情報サービスにアクセスできる。ユーザーは後から設定アプリで位置情報サービスに対する認可を変更できる。

iOSがユーザーに認可を求めている様子 (パターン1)

iOSがユーザーに認可を求めている様子 (パターン2)

iOSがユーザーに認可を求めている様子 (パターン3)

設定アプリで位置情報サービスに対する認可を変更する様子

When In UseとAlways

  • When In Use
  • Always

実装

Information Property List

名称 キー名 用途 サポートiOS
Privacy - Location When In Use Usage Description NSLocationWhenInUseUsageDescription アプリがフォアグラウンドで位置情報が必要なら使う iOS 11 以降
Privacy - Location Always and When In Use Usage Description NSLocationAlwaysAndWhenInUseUsageDescription アプリがバックグラウンドで位置情報が必要なら使う (NSLocationWhenInUseUsageDescriptionも必要) iOS 11 以降
Privacy - Location Default Accuracy Reduced NSLocationDefaultAccuracyReduced TBW iOS 14 以降
Privacy - Location Temporary Usage Description Dictionary NSLocationTemporaryUsageDescriptionDictionary TBW iOS 14 以降
Privacy - Location Always Usage Description NSLocationAlwaysUsageDescription 割愛 Deprecated
Privacy - Location Usage Description NSLocationUsageDescription 割愛 Deprecated

認可の定義

EnumのCLAuthorizationStatusに定義がある。

ステータス 説明 備考
notDetermined 認可の確認が必要である 0 iOS 2以降
restricted ペアレンタルコントロールで制限中である 1 iOS 2以降
denied 認可しない 2 iOS 2以降
authorizedAlways 常に取得して良い 3 iOS 8以降
authorizedWhenInUse アプリ利用中は取得して良い 4 iOS 8以降

設定アプリの位置情報サービスのアクセス許可設定とCLAuthorizationStatusの関係

設定アプリ > アプリ > {アプリ} > 位置情報 > 選択肢

設定アプリ (iOS 18) には以下の選択肢がある。

ステータス
しない
次回または共有時に確認
このアプリの使用中
常に

マッピング

設定アプリの選択肢 CLAuthorizationStatus 備考
次回または共有時に確認 notDetermined
(筆者、未確認) restricted
しない denied
常に authorizedAlways
このアプリの使用中 authorizedWhenInUse

アプリ利用時の位置情報サービスのアクセス許可設定とCLAuthorizationStatusの関係

アプリ実行時にiOSの位置情報サービスに取得要求を送ると、iOSはユーザーに許可の確認を求める。

選択肢 (iOS 18) には以下の選択肢がある。

選択肢
1度だけ許可
アプリの使用中は許可
許可しない

マッピング

選択肢 CLAuthorizationStatus 備考
1度だけ許可 authorizedWhenInUse アプリ終了時に CLAuthorizationStatus.notDetermined に遷移する
アプリの使用中は許可 authorizedWhenInUse
許可しない denied

フォアグラウンド

Xcodeプロジェクトで以下の設定をする。

  • Infoに Privacy - Location When In Use Usage Description を追加する

バックグラウンド

Xcodeプロジェクトで以下の設定をする。

  • Signing & CapabilitiesでBackground Modesを追加する
  • Background ModesのOptionsにあるLocation updatesを有効にする
  • Infoに Privacy - Location Always and When In Use Usage Description を追加する
    • そのほか Privacy - Location When In Use Usage Description が追加済みであること

上述の設定をしていない状態で、アプリがバックグラウンドに遷移すると locationManager(_:didFailWithError:)The operation couldn’t be completed. (kCLErrorDomain error 1.) が発生する。

参考資料