概要
アプリは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.) が発生する。



