【发布时间】:2017-02-09 02:30:07
【问题描述】:
因此,我们正在创建一个 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 方案改变了一些东西,但找不到任何东西修复/解决方法。
【问题讨论】:
-
我已经在设备上独立测试了该应用程序,但它没有通过 Xcode 运行,如果这就是你的意思吗?我仍然得到相同的行为。
-
它用于自定义键盘扩展,因此在容器应用程序中,我们只是显示一个按钮,单击该按钮时将它们直接发送到设置应用程序,而不必自己导航。它在用户有机会在设置应用程序中执行任何操作之前崩溃。这主要是一个 UX 的事情,但我们相信它非常重要。
-
如果您的应用仍然支持 iOS 9,为什么不使用旧的
openURL方法而不考虑 iOS 版本呢?这是完全有效和安全的。 -
我刚刚试了一下,又遇到了同样的问题。我认为这与 iOS 10 而不是 swift 3 有关。
-
在这里讨论过stackoverflow.com/q/8246070/1040347 在答案/cmets 中人们说在 iOS 10 上它不起作用。
标签: ios swift swift3 ios10 openurl