【问题标题】:iOS 11 updating Location Services from "While Using" to "Always"iOS 11 将定位服务从“使用时”更新为“始终”
【发布时间】:2018-06-18 13:48:48
【问题描述】:

我最近正在更新应用程序以在后台添加位置服务。

应用目前支持“使用应用时”定位服务,我想支持“始终允许”。

我谨记此功能应涵盖两种情况。

  1. 尚未下载应用的新用户。

  2. 当前用户,已授予该应用在使用该应用时接收设备位置的权限。

场景 1 运行良好,但场景 2 发生了一些奇怪的事情。

当我启动应用程序时,在初始屏幕之后,iOS 会提示用户通过两个选项提升应用程序的授权级别,“仅在使用应用程序时”和“始终允许”。

我想稍后再升级,而不是在启动画面之后。

有人知道为什么会这样吗?

【问题讨论】:

  • 什么时候初始化位置管理器/请求授权?您似乎无法真正控制何时显示此更新的授权警报,但它可能是在您重新启动应用后首次尝试使用位置服务时触发的。
  • 在特定的 View Controller 中处理所有位置。我可以在其中处理升级身份验证级别。但是这个警报出现了,这个 VC 甚至没有被实例化。
  • The documentation 似乎并没有说应该立即显示此警报(似乎它只会在您请求新授权时显示)。因此,我首先要绝对确保您在发布时/比您预期的时间更早地请求授权或任何东西。
  • 这是我过去 3 天的做法。我没有选择了。 =/
  • 嗨@shim,经过深度调试,我发现了发生了什么。我的依赖项之一是检查可用的背景模式和应用 plist 文件中的位置键。真的很难找到,因为 Xcode 搜索在项目的框架内找不到任何东西。即使它存在框架代码。我发现在整个 CoreLocation 库上有一个符号断点。

标签: ios swift location cllocationmanager


【解决方案1】:

这个问题是通过在所有 CoreLocation 库上的符号断点解决的。

怎么做?

1 - 在 didFinishLaunchingWithOptions 的第一行放一个断点

2 - 启动您的应用

3 - 在控制台面板上,插入此命令以中断 CoreLocation 库的每个方法

lldb: break set -r CoreLocation

4 - 恢复您的应用

现在调试将在从 CoreLocation 库调用的每个函数处停止

问题是一个依赖项在我没有意识到的情况下检查后台模式,所以这触发了警报。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多