iOS 10打开设置崩溃

时间:2016-09-30 13:29:55

标签: ios swift swift3 ios10 openurl

因此,我们正在创建一个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方案改变了一些东西,但是不能找到任何修复/解决方法。

3 个答案:

答案 0 :(得分:5)

我找到了一种在iOS中打开设置应用的方法,方法是在我的项目中添加设置包并使用以下代码:

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

如果您的应用程序没有自定义键盘,看起来这是您可以使用的唯一方法来打开本机设置应用程序。

答案 1 :(得分:5)

Apple未正式记录自定义URL方案。它不再适用于iOS 10。该应用仅允许用户访问您应用自己的设置页面。 如果iOS 10中没有设置页面,您的应用程序将崩溃。

您可以尝试按“灰色区域”API打开“设置”页面,如下所示。但我没有在Swift中取得成功。祝你好运!

The "prefs" URL Scheme not woring in iOS 10 (Beta 1 & 2)

答案 2 :(得分:0)

打开UIApplicationOpenSettingsURLString会崩溃应用程序。

我正在使用" App-Prefs:root = WIFI"网址,它工作正常。

let settingsUrl = URL(string: "App-Prefs:root=WIFI")
        if UIApplication.shared.canOpenURL(settingsUrl!) {
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(settingsUrl!, options: [:], completionHandler: {(success) in debugPrint("Successfully opened settings")})
            } else {
                UIApplication.shared.openURL(settingsUrl!)
            }
    }