Периодически и поздно Значительные события изменения местоположения в приложениях, созданных с помощью Xcode 9 для устройств iOS 11

Я уже зарегистрировал радар, но мне хотелось узнать, есть ли у кого-то еще такая проблема.

Похоже, что существенные изменения местоположения (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. Просто чтобы убедиться, что это понятно:

  • Устройство iOS 10 + приложение, построенное на Xcode 9: работает как раньше
  • Устройство iOS 10 + приложение, построенное на Xcode 8: работает как раньше
  • Устройство iOS 11 + приложение, построенное на Xcode 8: работает как раньше
  • iOS 11 device + приложение, построенное на Xcode 9: проблема существует

В большинстве случаев (но не всегда) SLC на сборке iOS 11 + Xcode 9 происходят значительно позже SLC на устройствах управления (iOS 10).

Сравнивая файлы журналов из вышеуказанного приложения, устройства iOS 10 получают SLC более чем за 2 минуты до устройств iOS 11. Иногда за 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

Промежутки между тем, когда был SLC в iOS 10 и iOS 11, выглядят неприемлемо разными.

Кто-нибудь еще видит это ухудшенное поведение SLC?

Ответ 1

Если вы используете только доступ "Доступ к местоположению", насколько я понимаю, для вас ничего не меняется.

Если вы используете доступ "Всегда", хотя и не предоставляете резервную копию "While Using", как вы должны были.

Ниже информация может быть полезна для iOS 11,

Как говорит Брэд Дженсен в разговоре WWDC, о котором я упоминал, Apple решила, что заставить пользователя предоставлять доступ к местоположению "Всегда" плохой пользовательский интерфейс:

Теперь, вторая причина, по которой многие разработчики предпочитают требовать Всегда авторизация - это просто попытка дать своим пользователям наилучший опыт (...), но это делает очень плохого пользователя опыт для пользователей, которые не хотят предоставлять приложение всегда авторизации. Они вынуждены выбирать между предоставлением приложения Всегда, что больше, чем хотелось бы в этом примере, или Предоставление этого Никогда, а это означает, что они не получают выгоду от любого из приложения на основе местоположения. И их окончательный вариант заключается в предоставлении он всегда и затем отменяет это разрешение после того, как они сделали приложение. В любом случае пользователь не имеет большого времени с этим приложение.

Более подробную информацию вы можете прочитать ниже в блоге, это может быть более полезно,

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