NSLocationWhenInUseUsageDesciption Отсутствует в Info.plist - PullRequest
0 голосов
/ 30 октября 2018

Добрый день, в течение прошлых нескольких недель я столкнулся с проблемой в Xcode, которая говорит:

Это приложение попыталось получить доступ к конфиденциальным данным без описания использования. Info.plist приложения должен содержать ключи «NSLocationAlwaysAndWhenInUseUsageDescription» и «NSLocationWhenInUseUsageDescription» со строковыми значениями, объясняющими пользователю, как приложение использует эти данные

В моем информационном листе реализованы оба этих описания использования. Я попытался удалить приложение с телефона (я использую свой iPhone в качестве симулятора). Я попытался реорганизовать свой код, я попытался закомментировать определенные линии, чтобы увидеть, исчезнет ли сообщение и позволит ли я увидеть мое местоположение. Я попытался удалить и переустановить блоки Google Maps, но ничего. Я попытался прочитать об этой проблеме на StackOverflow, medium и GitHub, чтобы попытаться выяснить, могу ли я использовать предыдущие советы для решения своей проблемы. Я даже написал здесь, чтобы посмотреть, смогу ли я получить немного понимания по этому вопросу.

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

import UIKit
import GoogleMaps
import GooglePlaces
import CoreLocation

class mainViewController: UIViewController, CLLocationManagerDelegate, GMSMapViewDelegate, GMSAutocompleteViewControllerDelegate, UITextFieldDelegate {

    let currentLocationMarker = GMSMarker()
    var locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.navigationBar.prefersLargeTitles = false

        navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white, NSAttributedStringKey.font: UIFont.systemFont(ofSize: 25)]


        myMapView.delegate=self
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestAlwaysAuthorization()
        locationManager.startMonitoringSignificantLocationChanges()
        locationManager.startUpdatingLocation()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestAlwaysAuthorization()
        setupViews()
        initGoogleMaps()
        txtFieldSearch.delegate=self

    func initGoogleMaps() {
        let camera = GMSCameraPosition.camera(withLatitude: 40.014281, longitude: -83.030914, zoom: 17.0)
    self.myMapView.camera = camera
        self.myMapView.delegate = self
        self.myMapView.isMyLocationEnabled = true
    }
    func getLocation() {

        let status  = CLLocationManager.authorizationStatus()

        if status == .notDetermined {
            locationManager.requestWhenInUseAuthorization()
            return
        }

        if status == .denied || status == .restricted {
            let alert = UIAlertController(title: "Location Services Disabled", message: "Please enable Location Services in Settings", preferredStyle: .alert)

            let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
            alert.addAction(okAction)

            present(alert, animated: true, completion: nil)
            return
        }
    }



    @objc func btnMyLocationAction() {
        let location: CLLocation? = myMapView.myLocation
        if location != nil {
            myMapView.animate(toLocation: (location?.coordinate)!)
        }
    }

    let myMapView: GMSMapView = {
        let v=GMSMapView()
        v.translatesAutoresizingMaskIntoConstraints=false
        return v
    }()


    let btnMyLocation: UIButton = {
        let btn=UIButton()
        btn.backgroundColor = UIColor.white
        btn.setImage(#imageLiteral(resourceName: "my_location-1"), for: .normal)
        btn.layer.cornerRadius = 25
        btn.clipsToBounds=true
        btn.tintColor = UIColor.gray
        btn.imageView?.tintColor=UIColor.gray
        btn.addTarget(self, action: #selector(btnMyLocationAction), for: .touchUpInside)
        btn.translatesAutoresizingMaskIntoConstraints=false
        return btn
    }()
}

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вся причина в том, что вам нужно добавить описание, чтобы запросить у пользователя разрешения на местоположение. И для этого нам нужно перейти и отредактировать список свойств:

Под Вашей папкой Вспомогательных файлов в XCode, мы собираемся добавить два новых ключа в ваш Info.plist («Конфиденциальность-Местоположение Всегда и Когда Используется Описание Использования» и «Конфиденциальность-Местоположение, Когда Используется Описание Использования») .

Чтобы сделать это, вы переходите к той части, где написано «Список свойств информации», и нажимаете эту маленькую кнопку добавления (+). И если вы удалите «Категория приложения» и начнете вводить «Конфиденциальность» (с большой буквы), вы увидите всплывающие подсказки.

После нахождения и выбора «Конфиденциальность-местоположение всегда и при использовании описания использования» и «Конфиденциальность-местоположение при использовании описания использования», следующее, что вам нужно сделать, это дать каждому из них значение. В столбце «Значение» просто напишите это описание «Нам нужно ваше местоположение для…» (возможно, чтобы узнать текущие погодные условия).

Теперь у вас есть два новых ключа, и каждый из них имеет значение типа данных String.

0 голосов
/ 30 октября 2018

Перейдите в настройках сборки целевого приложения для «info.plist» и внимательно изучите полный путь. Убедитесь, что вы добавили ключи в правильный список info.plist, который фактически используется официально в качестве info.plist для сборки вашего приложения. Вы также можете нажать на вкладку «Информация» рядом с «Параметры сборки», чтобы проверить наличие двух записей.

Вот как это должно выглядеть (обязательно указывайте значение ОБА из них): enter image description here

...