【问题标题】:How to open Location Services from iOS application for iOS 11 beta?如何从 iOS 应用程序为 iOS 11 beta 打开定位服务?
【发布时间】:2017-08-07 09:47:29
【问题描述】:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)
{
     NSURL *URL = [NSURL URLWithString:@"App-prefs:root=Privacy&path=LOCATION"];
    [[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];           
}

此代码适用于 iOS 10.0 到 10.3.3 但是当我为 iOS 11(beta) 运行此代码时,应用程序进入后台,但设置页面没有打开。

【问题讨论】:

  • “应用程序进入后台”你的意思是应用程序崩溃了?
  • 检查我的答案
  • 应用程序没有崩溃,我已经检查了你的答案。请查找评论

标签: ios objective-c


【解决方案1】:

应用程序进入后台,但设置页面没有打开。

这是 Settings.app 的崩溃。从 iOS 11 Beta 7 开始,该崩溃已得到修复。但它仍然无法使用 @"App-Prefs:root=Privacy&path=LOCATION" 之类的方案打开特定路径。

我试图深入研究 Settings.app 的反编译代码(实际上是 Preferences.app)。似乎它仍然使用我们尝试使用的上述方案,因为我在反编译代码中发现了相同形式的方案字符串。

并且可能会在 SpringBoard 中添加某种权限控制,以管理哪个进程可以正确打开设置中的特定路径。

无论如何,目前我只能在 iOS 11 中使用

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

打开设置。

【讨论】:

  • @ShrikantPhadke 可能不会。据 Launcher 应用开发者的blog 称,Apple 有意为第三方开发者禁用此“私有”功能。
【解决方案2】:

您应该检查 iOS 是否可以打开您尝试调用的 URL。您可以使用if([UIApplication sharedApplication] canOpenURL:URL]]){...} 执行此操作。如果 iOS 11 无法做到这一点,您应该添加 else 语句来检查 iOS 11 并设计新的解决方案。

【讨论】:

  • 这意味着您的 URL 在 iOS 11 中将无法使用,因此您将不得不寻找另一种方式。在另一个 SO 问题中,我发现您可以使用 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; 打开设置应用程序。 link
  • NSURL *URL = [NSURL URLWithString:@"App-Prefs:root=Privacy&path=LOCATION"]; if ([[UIApplication sharedApplication] canOpenURL:URL]) { NSLog(@"可以打开"); } else{ NSLog(@"打不开"); } 返回“可以打开”。应用仍然无法导航到设置。
  • 你没有读懂我在说什么:你需要用另一种解决方案替换[NSURL URLWithString:@"App-Prefs:root=Privacy&path=LOCATION"],因为显然它不再起作用了。正确的 NSURL 是什么,我不知道,你必须对其进行逆向工程。
【解决方案3】:

所有线索都指向开发人员尚未收到通知的 iOS 错误或更改。它是 beta 10,这仍然不起作用。最好的猜测,向苹果提交错误报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多