iOS 10打开设置崩溃问题

10

所以我们正在创建一个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中,尽管应用程序将用户发送到设置应用程序,但它立即崩溃,没有任何崩溃日志。如果我使用相同的方法打开像谷歌这样的网站,则在iOS 9和10上都可以正常工作。我已经进行了大量的研究,发现他们已经改变了一些URL方案,但找不到任何修复/解决方法。


这是为定制键盘扩展设计的,因此在容器应用程序中,我们只是显示一个按钮,当用户单击该按钮时,直接发送到设置应用程序,而无需自己导航。它在用户有机会在设置应用程序中执行任何操作之前崩溃。这主要是UI体验问题,但我们认为非常重要。 - BenSDConway
我刚试了一下,问题还是一样。我认为这与Swift 3无关,而是与iOS 10有关。 - BenSDConway
@BenSDConway,你解决了这个问题吗? - Sunil Targe
不好意思,我们必须把按钮移除。 - BenSDConway
已在iOS 10.2中修复。 - Mesbah
显示剩余4条评论
3个回答

5
自定义URL方案未被Apple官方文档记录。在iOS 10中将不再起作用。 应用程序只允许将用户带到您的应用程序自己的设置页面。 如果您的应用程序在iOS 10中没有设置页面,它将崩溃。
您可以尝试使用“灰色区域”API打开设置页面,如下所示。但我在Swift中尝试失败。祝好运! The "prefs" URL Scheme not woring in iOS 10 (Beta 1 & 2)

你能指出你所提到的“苹果文档”吗? - Mesbah
抱歉,是我的错。我想说的是在他们的文档中我没有找到自定义URL scheme。 - DàChún

5

我找到了一种在iOS中打开设置应用程序的方法,通过将设置束添加到我的项目中并使用以下代码:

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

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


1
这与任何键盘设置无关。此代码片段无法防止iOS 10上的设置应用程序崩溃。从任何应用程序打开设置时,无论是模拟器还是真实设备,设置都会崩溃。我创建了一个带有单个按钮的新项目,只是为了打开设置。在iOS 10中从应用程序打开设置会导致崩溃。仅供参考,相关线程:https://dev59.com/Cpvga4cB1Zd3GeqPvgZs - Mesbah

0

打开UIApplicationOpenSettingsURLString会导致应用程序崩溃。

我正在使用“App-Prefs:root=WIFI” URL,它运行良好。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接