application (_: didFinishLaunchingWithOptions :) Параметры запуска пусты - PullRequest
0 голосов
/ 20 февраля 2020

В настоящее время я занимаюсь разработкой приложения, и мне нужно получить значительные изменения местоположения.

Я пытаюсь получить фоновые обновления местоположения и фактически зарегистрирован для него. Использование Xcode «Ожидание запуска исполняемого файла» для схемы и отладка на симуляторе с поддельными данными «Freeway Drive».

Приложение запускается, но launchOptions всегда nil. Я пытаюсь проверить, открыто ли приложение из-за обновления местоположения, но ничего не удалось вернуть.

Почему словарь launchOptions пуст?

Это мой фрагмент кода для application(_:didFinishLaunchingWithOptions:):

if let _ = launchOptions?[.location] {
    locationManager = LocationManager()
    locationManager?.delegate = self
    locationManager?.getCurrentLocation()
    return true
}

Также это мой LocationManager класс:

final class LocationManager: NSObject, Locatable {
    weak var delegate: LocatableOutputProtocol?

    var locationManager: CLLocationManager

    override init() {
        locationManager = CLLocationManager()
        super.init()

        let authStatus = CLLocationManager.authorizationStatus()
        if CLLocationManager.locationServicesEnabled() {
            if (authStatus == .authorizedAlways || authStatus == .authorizedWhenInUse) {
                locationManager.delegate = self
                locationManager.startUpdatingLocation()
                locationManager.startMonitoringSignificantLocationChanges()
                locationManager.allowsBackgroundLocationUpdates = true
                locationManager.desiredAccuracy = kCLLocationAccuracyBest

            } else {
                locationManager.requestAlwaysAuthorization()
                print("we dont have permission")
            }
        } else {

        }
    }

    func getCurrentLocation() {
        locationManager.startUpdatingLocation()
    }
}

extension LocationManager: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let coordinates = locations.first?.coordinate {
            locationManager.stopUpdatingLocation()
            self.delegate?.didGetCurrentLocation(latitude: coordinates.latitude, longitude: coordinates.longitude)
        }
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        self.delegate?.failedGetCurrentLocation(error: error)
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        print("status changed")
        if (status == .authorizedAlways || status == .authorizedWhenInUse) {
            print("we got permission")
        } else {
            print("nope")
        }
    }
}

...