如何从iOS 11 beta版的iOS应用程序中打开位置服务?

如何从iOS 11 beta版的iOS应用程序中打开位置服务?,ios,objective-c,Ios,Objective C,此代码适用于iOS 10.0至10.3.3 但当我为iOS 11(beta版)运行此代码时,应用程序进入后台,但设置页面无法打开。您应该检查iOS是否可以打开您尝试调用的URL。如果([UIApplication sharedApplication]canOpenURL:URL]]){…},则可以使用执行此操作。如果iOS 11不能做到这一点,您应该添加一个else语句来检查iOS 11并设计一个新的解决方案 应用程序进入后台,但设置页面未打开 这是Settings.app的崩溃。从iOS 11

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

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


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

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

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

它可能会在SpringBoard中为manager添加某种权限控制,即哪个进程可以在设置中正确打开特定路径

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

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错误或更改。这是beta 10版,但仍然不起作用。最好的猜测是,向苹果提交一份错误报告。

“应用程序进入后台”你是说应用程序正在崩溃?请检查我的回答应用程序没有崩溃,我已经检查了你的答案。请查找评论,这意味着你的URL在iOS 11中无法工作,因此你必须找到其他方法。在另一个SO问题中,我发现您可以使用
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:uiapplicationopensetingsurlstring]]打开设置应用程序。NSURL*URL=[NSURL URLWithString:@“应用程序优先级:根=隐私&路径=位置”];if([[UIApplication sharedApplication]canOpenURL:URL]){NSLog(@“可以打开”);}else{NSLog(@“不能打开”);}返回“可以打开”。应用程序仍然无法导航到设置。您没有阅读我所说的内容:您需要用另一个解决方案替换
[NSURL URLWithString:@“app Prefs:root=Privacy&path=LOCATION”]
,因为它显然不再有效。“什么是正确的NSURL,我不知道,您将不得不对其进行反向工程。”ShrikantPhadke说,可能不会。根据Launcher apps开发者的说法,苹果故意为第三方开发者禁用了这个“私有”功能。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];