iOS 12まで
ジオフェンスなどで常に位置情報を取りたいときは以下のコードで常に許可を得るようにしていました。
var locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
上記コードで常に許可の選択肢をユーザーに押してもらえればOKです。
iOS 13から
iOS 13から上記コードでは
このような聞かれ方になって「常に許可」という選択肢がなくなっています。「1度だけという選択肢が増えています」
ちなみに「1度だけ許可」という状態は常に許可と近い状態になるようでジオフェンスも正常に働きました。もちろんしばらくすると使えなくなるのですが。
ここからユーザーに常に許可を得るにはまずは「Appの使用中は許可」を選択してもらいます。
それでジオフェンスなどのを動かして、実際に必要になる時が来るとOS側で勝手にユーザに常に許可のダイアログを出してくれます。
見てもらえればわかると思うのですが、アプリ内ではなくホーム画面にあるときにアラートが表示されます。この画像のように常に許可の選択肢が出て、ようやくここで常に許可を取得することができます。
環境はiOS 13 beta 6で試しています。
必要になった段階で確認が入るので便利かと思います。ただこの確認が遅れる可能性もあるのでそこは注意すべきとこかと思います。
動作確認のみして、特にコードの変更はなく済みました。
この辺の内容はWWDCのビデオ
の2分〜7分くらい見ればわかるので確認してみてください。日本語字幕も入っているのでわかるかと思います。
定期的な位置情報許可設定確認のダイアログ
2019/10/24 追記
常に位置情報を取得するよう許可を得た後も、上記画像が定期的に出現する。
ユーザーになんのために位置情報を取得しているか明示しておかないと、ここで拒否されてしまう可能性が高いため、運用方法には注意したい。