0

我在 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

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

4

1 回答 1

1

这一切都归功于 iOS 8 的变化。在以前的 iOS 版本中,至少locationd具有com.apple.locationd.preauthorized无需用户许可即可访问位置的权利。现在连locationd它都没有了。与SpringBoard和相同imagent。当然,locationd它可以通过自己的 API 访问位置 -locationd是一个位置守护进程,它处理从授权到过滤和处理来自各种来源的原始位置数据的所有事情。

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

现在,除了向用户请求许可之外,您如何解决它SpringBoard

  • 编写您自己的带有com.apple.locationd.preauthorized权利签名的守护程序。这样您就可以在没有任何权限的情况下访问位置。默认情况下,您的守护程序将始终被授权这样做。
  • 使用 .退出系统应用程序com.apple.locationd.preauthorized。这是一种 hack,在这种情况下我个人反对,因为编写守护程序可以解决所有问题。如果您仍然想这样做,请在此处阅读我的答案
于 2014-12-31T11:38:43.717 回答