От чего зависит наличие значка iPhone Location Services в строке состояния? - PullRequest
15 голосов
/ 11 декабря 2010

Вот моя ситуация. Я разрабатываю приложение для iPhone, которое использует Core Location для определения местоположения устройства. Существует значок: Значок служб определения местоположения, который отображается в строке состояния устройства. Я знаю достаточно, чтобы сказать, что цель значка - сообщить пользователю, что в настоящее время Службы определения местоположения чем-то используются. Для проницательного пользователя это означает сокращение срока службы батареи. По этой причине я хочу быть уверенным, что значок отображается только тогда, когда в моем приложении фактически используются службы определения местоположения.

Введите путаницу. Мы, как разработчики, не получаем доступ к строке состояния через официальный SDK. Это означает, что ОС будет отображать этот значок автоматически в зависимости от поведения приложения. Как ни старайся, я не могу найти четкого определения того, что именно вызывает этот значок.

В существующем виде значок появляется до того, как мой представитель приложения получает контроль, и остается видимым, пока приложение установлено, запущено или нет. Это явно худший возможный случай, и это заставило меня усомниться в моем использовании CLLocationManager. Я бы подробно остановился на своем использовании, но в крайнем случае я попытался удалить каркас CoreLocation (и каркас MapKit, который, как я подозреваю, также использует CoreLocation), и весь код, связанный с расположением. Приложение по-прежнему вызывало появление значка и оставалось до тех пор, пока я не удалил приложение. Затем я создал совершенно новое приложение и не внес никаких изменений, кроме как изменить идентификатор приложения в соответствии с идентификатором моего приложения. Значок все еще появился. Я изменил идентификатор, чтобы использовать идентификатор одного из моих приложений, которые не использовали местоположение, и значок не появился. Во время этого тестирования я обязательно перезагрузил устройство.

Эта проблема действительно убивает меня. Я не могу себе представить, как идентификатор приложения связан со значком Location Services, но не вижу другой причины для его сохранения. Кажется, что Красная Селедка скрывает реальную проблему, но я в недоумении относительно реальной проблемы.

Ответы [ 3 ]

22 голосов
/ 11 декабря 2010

Вот обновление и решение, к которому я пришел после некоторой возни. Поскольку моя проблема была явно связана с тем, что ОС установила какое-то соединение между идентификатором моего приложения и значком Location Services, я попытался сбросить предупреждения о местоположении устройства, чего я изначально не знал, что смогу сделать. Для любопытных это можно сделать через приложение «Настройки», затем «Основные»> «Сброс»> «Сбросить предупреждения о местоположении». После этого сброса и переустановки приложения оно снова запросило использование Location Services. Теперь значок появляется точно на startUpdatingLocation и исчезает точно на stopUpdatingLocation, именно так, как я изначально планировал.

Я понятия не имею, что изначально вызвало это состояние, и я не сомневаюсь, что само условие является ошибкой ОС, как указал Мэтью Фредерик, но, по крайней мере, в моем случае, условие излечимо.

5 голосов
/ 11 декабря 2010

Есть известная ошибка, которая вызывает эту проблему. Я сообщил об этом Apple несколько месяцев назад, и мне сообщили, что это была известная проблема. К сожалению, это, кажется, не было исправлено.

Я впервые обнаружил его, когда увидел, что появился символ (и мое приложение показало, что у него есть разрешение на использование информации о местоположении в приложении «Настройки»), просто установив мое приложение на устройство на котором больше не было установлено приложение, даже не запустив его.

По какой-либо причине устройство сохраняет ссылку на приложение, получившее разрешение на услуги определения местоположения.

Хуже того, если приложение действительно получало разрешение в прошлом, затем удаляется, затем устанавливается обновленная версия приложения, не только появляется значок, но и обновленное приложение больше не получает информацию о местоположении потому что приложение никогда не запрашивает у ОС разрешение на определение местоположения. Это фактически навсегда отрицается.

Очень расстраивает меня и небольшое количество моих пользователей.

1 голос
/ 11 декабря 2010

Вы не включили опцию местоположения в ключе UIBackgroundModes .plist вашего приложения, не так ли?

...