web-dev-qa-db-ja.com

設定iOS 11でアプリを開く方法

AppleはiOS 11で多くのアプリ設定をアプリパスに移動したようです。設定でアプリパスをプログラムで開く方法は?"App-Prefs:root=\(Bundle.main.bundleIdentifier!)"を試しましたが、動作しないようです。

私の質問は次のものに固有であることに注意してください:設定でアプリのパスを開く方法:[〜#〜] not [〜#〜]設定を開く方法

23
Tal Zion

探しているコードは次のとおりです。

if let url = URL(string: UIApplicationOpenSettingsURLString) {
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
}
43
Damien Bannerot

Swift 4.2、iOS 12

以下の機能を使用すると、設定のみを開くことができます。

_extension UIApplication {

    ...

    @discardableResult
    static func openAppSettings() -> Bool {
        guard
            let settingsURL = URL(string: UIApplication.openSettingsURLString),
            UIApplication.shared.canOpenURL(settingsURL)
            else {
                return false
        }

        UIApplication.shared.open(settingsURL)
        return true
    }
}
_

使用法:UIApplication.openAppSettings()

しかし、注意してください[〜#〜] not [〜#〜] use "non-public URL scheme"、例えば:_prefs:root=_または_App-Prefs:root_。そうしないと、アプリが拒否されます。これは最近、設定のwifiセクションへのディープリンクを作成しようとしていたときに起こりました。

13

また、古いiOSバージョンと新しいiOSバージョンの両方で機能させるには、次のようにします。

if let url = URL(string:UIApplicationOpenSettingsURLString) {
    if UIApplication.shared.canOpenURL(url) {
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url)
        }
    }
}
3
iKK

openURLはiOS 10以降廃止されているため、次の使用をお勧めします。

if let url = URL(string:UIApplicationOpenSettingsURLString) {
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: { success in
            log.debug("Open app settings success: \(success)")
        })
    }
}
2
skornos