Службы определения местоположения не работает в iOS 11
Я только что перестроил свое приложение с iOS 11 SDK в попытке удалить blue banner
Это теперь всегда появляется. Я подумал - "блестяще, что сработало", только чтобы обнаружить, что службы определения местоположения теперь не работают вообще.
приложение, используемое для работы с iOS 10 - кто-нибудь слышал что-нибудь?
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
работа в 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