Схема URL-адресов "prefs" не работает в iOS 10 (бета-версия 1 и 2)

Я не могу заставить URL-схему "prefs" работать в iOS 10 (бета-версия 1).
Он настроен правильно, поскольку одно и то же приложение отлично работает на iOS 9.

Это ошибка или она переименована/удалена?

код:

let settingsUrl = NSURL(string: "prefs:root=SOMETHING")
if let url = settingsUrl {
    UIApplication.sharedApplication().openURL(url)
}

Обновление: (бета-версия 2)
Все еще не работает в бета-версии 2.
Это швы, чтобы быть ошибкой. Например, если вы хотите пригласить кого-то с помощью GameCenter в iOS 10, и вы не вошли в iMessage, вы получите всплывающее окно с просьбой войти в систему. Но кнопка "Настройки" ничего не делает.

Ответ 1

Просто замените prefs на App-Prefs для iOS 10

Ниже код работает для iOS 8,9,10

Swift 3.0 и Xcode >= 8.1

if #available(iOS 10.0, *)
{
       UIApplication.shared.openURL(URL(string: "App-Prefs:root=SOMETHING")!)
}
else
{
       UIApplication.shared.openURL(URL(string: "prefs:root=SOMETHING")!)
}

Swift 2.2

if #available(iOS 10.0, *)
{
      UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=SOMETHING")!)
}
else
{        
    UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=SOMETHING")!)
}

Работает для меня.

Счастливое кодирование 😊

Ответ 2

Вы можете использовать Prefs:root=SOMETHING

обновленная схема URL-адресов iOS 10 для настроек, вам нужно выставить "p".

Ссылка: https://github.com/cyanzhong/app-tutorials/blob/master/schemes.md

УВЕДОМЛЕНИЕ: Он работает только с виджетами, а не работает в приложениях. (iOS 10.0.2)

Решение @Saumil Shah работает в приложении, более полезно.

Ответ 3

Для записи для служб местоположения App-Prefs:root=Privacy&path=LOCATION работал у меня. Когда я тестировал устройство, а не симулятор.

Я не буду перечислять то, что я пробовал, который не работал, это длинный список.

Пример использования, предполагающий, что службы определения местоположения отключены или разрешение отклонено или не определено:

if !CLLocationManager.locationServicesEnabled() {
    if let url = URL(string: "App-Prefs:root=Privacy&path=LOCATION") {
        // If general location settings are disabled then open general location settings
        UIApplication.shared.openURL(url)
    }
} else {
    if let url = URL(string: UIApplicationOpenSettingsURLString) {
        // If general location settings are enabled then open location settings for the app
        UIApplication.shared.openURL(url)
    }
}

Ответ 4

Вы можете использовать UIApplicationOpenSettingsURLString, чтобы открыть свои собственные настройки приложения (это было доступно с iOS 8), но любой другой prefs: URL теперь считается частным API, и использование приведет к отклонению приложения.

Ответ 5

Если кто-то интересуется API-интерфейсом "серой области", вы можете использовать:

//url = "prefs:root=SOMETHING"
[[LSApplicationWorkspace defaultWorkspace] openSensitiveURL:url withOptions:nil];

Это даст вам то, что вы хотите. Скрыть его хорошо, и он работает в iOS 10.

Ответ 6

Это не доступно на iOS 11, мы можем просто открыть такие настройки, как:

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