Как открыть приложение в настройках iOS 11

Похоже, что Apple переместила множество конфигураций приложений в путь приложения с помощью iOS 11, как программно открыть приложение в настройках? Я пробовал "App-Prefs:root=\(Bundle.main.bundleIdentifier!)", но это не работает.

Обратите внимание, что мой вопрос специфичен для: Как открыть путь к приложению в настройках: НЕ, как открыть настройки

Ответ 1

Вот код, который вы ищете, я думаю:

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

Ответ 2

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()

Но будьте осторожны, чтобы НЕ использовать "непубличную схему URL", например: prefs:root= или App-Prefs:root, потому что в противном случае ваше приложение будет отклонено. Это случилось со мной недавно, так как я пытался получить ссылку в разделе Wi-Fi в настройках.

Ответ 3

И если вы хотите, чтобы он работал как для старых, так и для новых версий 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)
        }
    }
}

Ответ 4

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)")
        })
    }
}