在 SpringBoard 中使用 CLLocationManager,但出现错误:依赖于旧版按需授权,新应用程序不支持



我在SpringBoard或imagent中使用CLLocationManager,但是当我分配CLLocationManager时,我得到了错误with:depending on legacy on-demand authorization, which is not supported for new apps。即使在定位过程中,我也遇到了同样的情况......

%hook SpringBoard
-(void)applicationDidFinishLaunching: (id)application {
    CLLocationManager *locationMgr = [[CLLocationManager alloc] init];
    %orig;
}
%end

问题是我如何在这样的过程中获取位置信息?或者,我是否可以更改应用程序的权利?

这一切都是由于iOS 8的变化。在以前的iOS版本上,至少有locationd具有com.apple.locationd.preauthorized权利,该权利可以在未经用户许可的情况下访问位置。现在连locationd都没有。与SpringBoardimagent相同.当然,locationd它可以通过自己的API访问位置 - locationd是位置守护进程,可以处理从授权到过滤和处理来自各种来源的原始位置数据的所有内容。

您可以更改他们的Info.plist但它不会做太多事情 - 这些应用程序仍然不会被授权。使用SpringBoard,您必须显示默认警报以允许其访问位置。有了locationdimagent你可能什么都做不了——它们是守护进程。守护程序没有 UI,因此它们无法显示任何警报来请求权限。为了解决这个问题,守护程序使用权利在没有用户许可的情况下访问某些内容(如个人信息)。

现在,除了请求用户的权限之外,如何解决它SpringBoard

  • 编写使用com.apple.locationd.preauthorized授权签名的您自己的守护进程。这样,您可以在没有任何权限的情况下访问位置。默认情况下,您的守护程序将始终被授权这样做。
  • 使用 com.apple.locationd.preauthorized 重新签名系统应用程序。这是一种黑客,在这种情况下,我个人反对,因为编写守护进程可以解决所有问题。如果您仍然想这样做,请在此处阅读我的答案

相关内容

最新更新