[iOS11][swift] アプリから自分の設定ページを開く方法

2019年7月7日追記:
iOS12、swift5に対応した方法を次の記事に書きました。
[iOS12][swift5] アプリから自分の設定ページを開く方法

追記終わり。
——————————

ユーザによって位置情報の取得が許可されていない場合、アプリで検知して設定画面に誘導する処理を作ることがあります。iOS10までは次のような実装で動作していました。

url = URL(string: "App-Prefs:root=Privacy&path=LOCATION")
UIApplication.shared.open(url, options: [:], completionHandler: nil)

iOS11からは上記方法で位置情報ページに移動することができなくなっていたので調査しました。
どうやら、位置情報詳細ページには移動する方法は無さそうで、また、移動するスキームも変更になっているようです。
スキーム App-Prefs は、 app-settings に変更することでiOS11でも動作します。

例えば、ルナスコープのアプリ(com.gekkado.lunascope)の詳細ページへの移動は次のコードで実現できます。

url = URL(string: "app-settings:root=General&path=com.gekkado.lunascope")
UIApplication.shared.open(url, options: [:], completionHandler: nil)

ルナスコープのアプリは位置情報をユーザに許可してもらわないと動作出来ないので、この設定を開くという動作が重要に感じています。

Appleさんには、設定画面を開く方法を仕様として定義してほしいと思いました。

参考: iOS 11 URL Scheme for specific Settings section stopped working