NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription игнорируется

Xcode 8.2 beta 8C30a, Swift 3, iPhone 5s.

Я пишу приложение погоды, которое хочет использовать местоположение iPhone. Чтобы получить авторизацию, я установил (все) следующие мои Info.plist:

<key>NSLocationAlwaysUsageDescription</key>
<string>Your current location is used to provide you with a local weather forecast.</string>
<key>NSLocationUsageDescription</key>
<string>Your current location is used to provide you with a local weather forecast.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your current location is used to provide you with a local weather forecast.</string>

Тем не менее, когда я вызываю LocationManager.requestWhenInUseAuthorization (), я получаю следующую ошибку:

This app has attempted to access privacy-sensitive data without a usage description.
The app's Info.plist must contain an NSLocationWhenInUseUsageDescription key
with a string value explaining to the user how the app uses this data

Ключ есть, но не видно. В приложении настроек телефона (а также в режиме конфиденциальности) нет записи для приложения. Несомненно, я пропустил что-то простое. Есть идеи?

swift3,cllocationmanager,xcode8,

2

Ответов: 1


2

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

Во всех случаях я локализую приложение, поэтому у меня есть несколько файлов Info.plist в моем проекте XCode (например, один для базового языка, который является английским, другой для французского и т. Д.).

Я всегда вручную редактирую файлы Info.plist (просматривая их как исходный код) и добавляю поля NSLocationWhenInUseUsageDescription).

Но в этом конкретном случае App я заметил, что XCode не показывал поле NSLocationWhenInUsageDescription, когда я выбрал Target Target в списке целевых объектов Project, а затем щелкнул на вкладке «Информация». Это странно, потому что, когда я проверяю вкладку «Информация» в других моих проектах XCode, здесь редактируются изменения, сделанные в файле Info.plist для базового языка. Поэтому я вручную добавил в этот пользовательский интерфейс «Info» поле NSLocationWhenInUseUsageDescription, и неожиданно мое новое приложение работало правильно, запрашивая у пользователя разрешение на доступ к службам местоположения при использовании.

Я бы рекомендовал проверить, что все поля, которые вы добавили в ваш файл Info.plist, отражаются на экране Target / Info. Если это не так, у вас может возникнуть аналогичная проблема, и в этом случае одно и то же исправление может работать на вас.

Я предполагаю, что основной причиной проблемы является ошибка в процессе локализации. Я помню, что после выбора файла Info.plist как одного из моих локализованных файлов, я получил сообщение об ошибке XCode во время сборки, жалуясь, что ему не хватает файла Info.plist (он переместил Info.plist из папки base.lproj to en.lproj, когда он «локализовал» файл). Я восстановил файл, который XCode переместил из папки base.lproj в папку en.lproj, и, похоже, снова сделал XCode счастливым. Но я думаю, что как-то он потерял способность обновляться, поэтому последующие дополнения к файлам Info.plist не применяются повсеместно, когда они должны быть).

swift3, cllocationmanager, xcode8,
Похожие вопросы