Схема 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)
}
}