Свернуть все

Итак, мы создаем приложение iOS, которое при нажатии кнопки открывает приложение настроек устройства. Я видел, что метод немного изменился с помощью iOS 10 и Swift 3, поэтому я использую условное выражение для проверки версии iOS, на которой пользователь находится перед выполнением кода.

if let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) {

    if #available(iOS 10.0, *) {

        // iOS 10.0.

        UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)

    } else {

        // Fallback on earlier versions.

        UIApplication.shared.openURL(settingsUrl)
    }
}

Это отлично работает на устройстве iOS 9, но не на iOS 10. Проблема в том, что, пока приложение отправит пользователя в приложение настроек в iOS 10, оно немедленно сработает без журналов сбоев. Если я использую тот же метод для открытия веб-сайта, такого как Google, он отлично работает как на iOS 9, так и на 10. Я провел много исследований и, похоже, они изменили некоторые вещи с помощью схем URL, но не могут найти исправления/обходные пути.

Ответ 1

Я нашел способ открыть приложение настроек в iOS, добавив в мой проект набор параметров и используя этот код:

    let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
    UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)

Похоже, что это единственный способ, который вы можете использовать, чтобы открыть приложение с собственными настройками, если ваше приложение не имеет пользовательской клавиатуры.

Ответ 2

Пользовательская схема URL официально не документирована Apple. Он больше не будет работать в iOS 10. Приложению разрешено приносить пользователям только страницы Настройки вашего приложения. Ваше приложение выйдет из строя, если у него нет страницы настроек в iOS 10.

Вы можете попытаться открыть страницу настроек по API-интерфейсу "серая область" следующим образом. Но я не преуспел в Свифте. Удачи!

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

Ответ 3

Ваш код верный, не беспокойтесь об этом. Это происходит только потому, что в настройках вашего приложения ничего нет (например, любые разрешения, такие как разрешение доступа к фотокамере или разрешение доступа к фотографиям и т.д.). все, что вам нужно сделать, это запросить любое разрешение перед перенаправлением на страницу настроек ваших приложений, тогда он будет работать отлично.

ПРИМЕЧАНИЕ.. Ваше приложение не разбивается, оно просто переходит на задний план из-за того, что показывать нечего. (Настройки вашего приложения содержат только ваше разрешение и информацию о доступе.)