Службы определения местоположения не работает в iOS 11


Я только что перестроил свое приложение с iOS 11 SDK в попытке удалить blue banner Это теперь всегда появляется. Я подумал - "блестяще, что сработало", только чтобы обнаружить, что службы определения местоположения теперь не работают вообще.

приложение, используемое для работы с iOS 10 - кто-нибудь слышал что-нибудь?

7 70

7 ответов:

похоже, что apple добавила еще одну функцию конфиденциальности. Теперь пользователь может переопределить наш requestAlwaysAuthorization и понизить его до requestWhenInUseAuthorization - что означает, что в качестве разработчика мы теперь должны предоставить оба описания в Info.plist

я обнаружил, что они добавили новый ключ NSLocationAlwaysAndWhenInUseUsageDescription

/*
*      Either the NSLocationAlwaysAndWhenInUseUsageDescription key or both the
*      NSLocationAlwaysUsageDescription and NSLocationWhenInUseUsageDescription
*      keys must be specified in your Info.plist; otherwise, this method will do
*      nothing, as your app will be assumed not to support Always authorization.
*/

однако, при использовании этого нового ключа - служба определения местоположения все еще не работала, при дальнейшем поиске я нашел этот драгоценный камень, смешанный со всей дополнительной отладкой информация:

это приложение попыталось получить доступ к конфиденциальным данным без описания использования. Информация о приложении.plist должен содержать ключи NSLocationAlwaysAndWhenInUseUsagedescription и nslocationwheninuseusagedescription со строковыми значениями, объясняющими пользователю, как приложение использует эти данные

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

хорошие новости, если вы следуйте советам консоли отладки, т. е. добавьте оба новых ключа NSLocationAlwaysAndWhenInUseUsageDescription и один из старых ключей NSLocationWhenInUseUsageDescription, службы определения местоположения снова начнут работать.

просто чтобы добавить шаги по исправлению этого:

2 способа сделать это:

A) легкий путь: Выберите свою информацию.файл plist, добавить свойства, заметим, что они начинают с никаких вместо местоположения... поэтому точные имена этих переменных начинаются с "Privacy-Location"... "и т. д., Добавьте каждый здесь и опишите, как пользователь будет видеть это в предупреждении.

B) жесткий / интересный / программный способ (мне нравится этот способ больше):

право нажмите на свою информацию.plist для вашего приложения, а затем выберите "Просмотр исходного кода", Вы должны увидеть все это в XML,

следуйте за другим ...... отформатируйте и добавьте эти свойства следующим образом:

<key>NSLocationAlwaysUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app uses your Microphone to allow Voice over IP communication with the Program Admin system</string>

сохранить, а затем щелкните правой кнопкой мыши На "информация".plist файл, а затем выберите список свойств, это должно просмотреть файл обратно в представление по умолчанию.

EDIT:

другой участник попросил код, вот он:

1) на вашем .H-файл , добавить:

@property (strong, nonatomic) CLLocationManager *LocationManager;

2) на ваш .M Файл Добавить под ViewDidAppear () функция:

_LocationManager = [[CLLocationManager alloc] init];
[_LocationManager setDelegate:self];
_LocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_LocationManager.pausesLocationUpdatesAutomatically = NO;
[_LocationManager requestAlwaysAuthorization];

_LocationManager.headingFilter = 5;
_LocationManager.distanceFilter = 0;

[_LocationManager startUpdatingLocation];
[_LocationManager startUpdatingHeading];

Это то, что отлично работает для меня, надеюсь, код будет работать для вас тоже.

в отношении

Heider

работая под iOS11 я обнаружил, что информация.plist файл должен как минимум NSLocationAlwaysAndWhenInUseUsagedescription в инфо.файл plist:

enter image description here

работа в Swift 4.0.3

   <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
   <string>Description</string>

   <key>NSLocationAlwaysUsageDescription</key>
   <string>Will you allow this app to always know your location?</string>

   <key>NSLocationWhenInUseUsageDescription</key>
   <string>Do you allow this app to know your current location?</string>  

выполните следующие действия:

я столкнулся с той же проблемой с приложением, которое нуждалось в "Всегда авторизации", и решил ее, выполнив следующие действия:

1.добавитьNSLocationWhenInUseUsageDescription ключ Info.plist

2.добавитьNSLocationAlwaysAndWhenInUseUsageDescription до Info.plist

3.добавитьNSLocationAlwaysUsageDescription до Info.plist (для поддержки

4. вызовrequestWhenInUseAuthorization()доrequestAlwaysAuthorization()

вы не можете выполнить requestAlwaysAuthorization () перед requestWhenInUseAuthorization (). Вы должны перейти на этот уровень разрешений. Как только я внес эти изменения, обновления местоположения снова начали работать правильно.

лучше перебдеть, чем недобдеть .. В iOS 11: добавьте ниже, и Вы хороши.

<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>

Swift: 3 я столкнулся с той же проблемой. я был полностью испорчен, найдя решение. вот как я исправил эту проблему.

Шаг 1 : файл проекта > возможности > фоновые режимы > выберите Обновить Местоположение

Шаг 2 : Добавьте ключи nslocationwheninuseusagedescription, NSLocationAlwaysAndWhenInUseUsagedescription в информация.файл plist

Шаг 3 :

manager.pausesLocationUpdatesAutomatically = false
manager.allowsBackgroundLocationUpdates = true