【问题标题】:Is an Xcode command line tool project allowed CoreLocation permissions?Xcode 命令行工具项目是否允许 CoreLocation 权限?
【发布时间】:2012-01-28 12:52:22
【问题描述】:

我有一个用 C++ 编写的 Xcode“命令行工具”项目。我最近添加了 CoreLocation 框架和相关代码来查找用户位置。

通常,当我实现 CoreLocation 框架时,OS X 会要求我授予应用程序的权限。我的命令行工具不会发生这种情况。是因为没有关联的窗口/菜单吗?

此外,如果我尝试在“安全”>“隐私”下的“系统偏好设置”窗格中手动启用权限,它会在我每次运行应用程序时自动被禁用 - 即使我已明确允许访问。

任何信息将不胜感激。

【问题讨论】:

  • 如果有人想亲身体验这个问题,我有一个示例 Xcode 项目。
  • 看起来应该可以;你试过code.google.com/p/corelocationcli 吗?
  • 谢谢菲尔,这正是我所需要的。我不明白为什么该项目要求位置许可,但我的却没有?是不是和 NSRunLoop 有关系?
  • 托比,你的问题解决了吗?你的主要有 NSRunLoop 吗?如果不是,那应该是问题。
  • 是的,NSRunLoop 允许框架请求权限。

标签: xcode command-line permissions core-location


【解决方案1】:

您是否也将 Foundation.h 导入到您的项目中?您应该检查以查看 CoreLocation 具有的所有依赖项,并确保它们已进入您的项目。 CoreLocation 也是用 Objective-C 编写的,因此某些调用可能不会被您的编译器 c++ 捕获。

【讨论】:

    【解决方案2】:

    Mac OS 下的某些东西需要连接到窗口服务器。 NSImage 就是一个例子,定位服务可能也需要这样的连接。

    但是,如果不调用NSApplicationMain,我不知道如何建立这样的连接。

    您可以做的是编写一个辅助应用程序,它不会出现在 Dock 中(如状态栏应用程序),但会调用 NSApplicationMain。然后,此应用将执行所有定位服务,并通过标准输出或套接字或类似的东西与调用进程(您的 CLI)进行通信。

    【讨论】:

    【解决方案3】:

    当 CoreLocation 询问位置数据时,Mac 会提示一个消息框,要求用户授予权限,如果您选中 Don't ask me again 并单击 OK,那么它将永远不会再次提示该消息,除非您“安全首选项窗格下的“重置警告”,但如果您将命令行应用程序移动到另一个目录,Mac 将再次请求权限。我相信此权限与应用程序的完整路径一起存储。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 2014-05-23
      • 2011-11-11
      • 2019-03-02
      相关资源
      最近更新 更多