针对iOS 11设备使用Xcode 9构建的应用程序的间歇性和晚期重要位置更改事件

Omn*_*eel 11 core-location cllocationmanager ios ios11 xcode9

我已经对此提出了雷达,但我想知道是否有其他人有这个问题.

似乎重要的位置更改(SLC)在iOS 11上表现不同,但仅限于在Xcode 9上构建的应用程序.看起来好像SLC表现得更糟,并且与iOS 10相比延迟了.我可以支持这个使用来自多个设备的数据和易于重复的实验.我想尝试保持这篇文章的简短,所以如果有人想要更多关于如何更详细地重现问题的数据或说明,我很高兴能够分享我如何做到这一切.

使用这个简约的SLC缓存应用程序:https://github.com/Root-App/root-ios-slc-tester我能够从iOS 10和iOS 11设备获取数据.

问题仅存在于iOS 11设备上,其中接收SLC的应用程序已构建在Xcode 9上.只是为了确保这一点清楚:

  • 在Xcode 9上构建的iOS 10设备+应用程序:像以前一样工作
  • 在Xcode 8上构建的iOS 10设备+应用程序:像以前一样工作
  • 在Xcode 8上构建的iOS 11设备+应用程序:像以前一样工作
  • 在Xcode 9上构建的iOS 11设备+应用程序存在问题

大多数时候(但并非总是如此),iOS 11 + Xcode 9版本上的SLC发生的时间明显晚于控制(iOS 10)设备上的SLC.

比较来自上述应用程序的日志文件,iOS 10设备在iOS 11设备之前超过2分钟获得SLC.有时10-15分钟前!

样本删节数据,其中每一行是不同的行程,并表示第一次记录该行程的SLC(以HH:mm:ss):

 iOS 10  |  iOS 11
-------------------
20:41:08 | 20:44:45
07:21:25 | 07:27:48
18:54:57 | 19:07:36
07:48:17 | 07:51:03
17:29:44 | 17:38:18
Run Code Online (Sandbox Code Playgroud)

iOS 10与iOS 11中存在SLC之间的差距似乎有所不同.

是否有其他人看到这种降级的SLC行为?

Ash*_*ish 0

如果您仅使用 \xe2\x80\x9c,而使用 \xe2\x80\x9d 位置访问时,据我\xc2\xa0 所知,对您来说没有任何变化。

\n\n

如果您使用 \xe2\x80\x9cAlways\xe2\x80\x9d 访问,并且您没有\xe2\x80\x99t 提供 \xe2\x80\x9cWhileUsing\xe2\x80\x9d 回退,那么您应该有。

\n\n

以下信息可能对 iOS 11 有用,

\n\n

正如 Brad Jensen 在 \xc2\xa0WWDC 演讲 I\xc2\xa0 中所解释的那样,Apple 认为强制用户向应用程序提供 \xe2\x80\x9cAlways\xe2\x80\x9d 位置访问权限是一种糟糕的用户体验:

\n\n
\n

现在,我们认为许多开发人员选择要求\n始终授权的第二个原因是他们\xe2\x80\x99只是想为他们的用户提供\n最好的体验(\xe2\x80\xa6),但这使得对于不希望授予应用“始终”授权的用户来说,用户体验非常差。他们被迫在授予应用\n“始终”(这比他们在本示例中希望的更多)和\n“从不”授予应用程序之间进行选择,这意味着他们\n\xe2\x80\x99无法从任何\n中受益app\xe2\x80\x99s 基于位置的功能。他们的最终选择是始终授予该授权,然后在使用该应用程序后撤销该授权。无论如何,用户在使用这个应用时都不会感到愉快。\n

\n
\n\n

有关更多详细信息,您可以阅读下面的博客 it\xe2\x80\x99s 可能更有用,

\n\n

https://mackuba.eu/2017/07/13/changes-to-location-tracking-in-ios-11/

\n