CLLocationManager autorizzazione problema di iOS 8

Sto lavorando su un pezzo di codice Swift per iOS 8. Sto cercando di fare qualcosa che coinvolge la posizione, e così ho implementato il seguente nella mia swift controller di visualizzazione del file:

let locationManger:CLLocationManager = CLLocationManager()

var speedReceived:Double = 0

override func viewDidLoad() {
    super.viewDidLoad()
    locationManger.delegate = self
    locationManger.desiredAccuracy = kCLLocationAccuracyBest
    let authstate = CLLocationManager.authorizationStatus()
    if(authstate == CLAuthorizationStatus.NotDetermined){
       println("Not Authorised")  
      locationManger.requestWhenInUseAuthorization()
    }
    //Do any additional setup after loading the view, typically from a nib.
}

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){
    var location:CLLocation = locations[locations.count - 1] as CLLocation
    if(location.horizontalAccuracy > 0){
        self.speedReceived = location.speed
        println(self.speedReceived)
    }
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
   println("Couldn't get your location")
}

Tuttavia, non riesco a ottenere questo codice funziona. Non salva la mia preferenza per l’utilizzo della posizione. non mi spingo a dare il permesso di accesso. Ho cercato di aggiornare il mio informazioni.plist. Ma non funziona. Btw, se mi seleziona sempre nelle impostazioni per la privacy all’interno del simulatore, funziona se passo indietro per l’applicazione immediatamente. qualcuno può aiutarmi? Sono sicuro che è questo il problema perché io Non Autorizzato sulla mia console.

Qualsiasi aiuto?

  • Tu dici che hai aggiornato il tuo info.plist – hai ricontrollato la tua voce? “NSLocationWhenInUseUsageDescription” deve essere presente con una stringa che descrive l’utilizzo della posizione. Un semplice errore di battitura impedirà la vostra app per la richiesta di accesso alla posizione. Inoltre, si dovrebbe sempre chiamare locationManager.requestWhenInUseAuthorization(), non solo quando lo stato non è autorizzato
InformationsquelleAutor brisi123 | 2014-07-10

 

6 Replies
  1. 28

    È un iOS 8 relative al problema. Devi mettere NSLocationAlwaysUsageDescription o NSLocationWhenInUseUsageDescription chiavi nel tuo .plist file (valore può essere un ulteriore messaggio, che sarà presentata in posizione di allerta). Queste sono necessarie chiavi in iOS 8.

    Come si dice in Apple linee guida:

    Questa chiave è necessaria quando si utilizza il requestAlwaysAuthorization
    metodo di CLLocationManager classe per la richiesta di autorizzazione per
    servizi di localizzazione. Se questa chiave non è presente e si chiama il
    requestAlwaysAuthorization metodo, il sistema ignora la richiesta e
    impedisce l’applicazione utilizza i servizi di localizzazione.

  2. 7

    Mi aveva lottato con un problema simile, che si è mantenuta anche dopo l’aggiunta del NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription chiavi plist.

    Alla fine, ho aggiunto la “Privacy – Posizione di Utilizzo Descrizione” la chiave per il plist (in aggiunta ai nuovi tasti) e voilà, ha funzionato! Dopo ha funzionato una volta sono stato in grado di rimuovere la “Privacy – Localizzazione Descrizione di Utilizzo” in una chiave di plist e continuare con successo la richiesta di autorizzazione.

  3. 4

    iOS 8 ha cambiato posizione strategia di autorizzazione. Soluzione per la compatibilità all’indietro:

    SEL requestSelector = NSSelectorFromString(@"requestWhenInUseAuthorization");
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &&
        [self.locationManager respondsToSelector:requestSelector]) {
        [self.locationManager performSelector:requestSelector withObject:NULL];
    } else {
        [self.locationManager startUpdatingLocation];
    }

    Promemoria: installazione NSLocationWhenInUseUsageDescription chiave nella vostra Info.plist

  4. 2

    Ho avuto la stessa problema.

    Per la cronaca, questa non è la risposta ufficiale. La prima risposta è quella corretta. Volevo solo aggiungere un link a FOSS (Objective-C) progetto che illustra la correzione.

    Come notato, ho dovuto aggiungere la chiave. La mia app non ha bisogno di essere eseguito in background, così ho aggiunto il NSLocationWhenInUseUsageDescription chiave della mia info.plist.

    Se si aggiunge una stringa come valore di questa chiave (facoltativo-l’esistenza della chiave è sufficiente per impostare il bar), quindi che la stringa verrà visualizzata nell’autorizzazione popup.

    Quindi ho aggiunto il seguente codice prima di tutto il mio [CLLocationManager startUpdating] chiamate:

    if ( [locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)] )
    {
        [locationManager requestWhenInUseAuthorization];
    }

    Il respondsToSelector è importante, come la chiamata è disponibile solo in iOS 8.

    La prima volta che questo viene chiamata, avviso viene mostrato. Dopo di che, si cade attraverso.

    Nota che io chiamo requestWhenInUseAuthorization

    Deve corrispondere il valore che ho messo nel plist. Credo che si potrebbe mettere entrambi, ma non so. Non ho bisogno di.

    Il progetto è qui. La maggior parte del lavoro (non più di tanto) è in BMLTAppDelegate.m file.

    Questa è una brutta sorpresa. Un sacco di persone non hanno idea che le loro app smette di funzionare in iOS 8. Faranno la stessa cosa che ho inizialmente fatto: Dare una corsa veloce nel simulatore, nota il blocco, e gesso fino a una beta bug.

    Ora, io ho un problema diverso: Tutte le mie app sono fissi, ma Xcode si blocca quando cerco di caricare le applicazioni per l’App Store. Ho un RADAR aperto su di esso.

    Xcode 6 è un pò scricchiolante. Mi aspetto una patch a venire fuori abbastanza rapidamente.

  5. 2

    Dal momento che non mi piace modificare il plist direttamente, ho sempre concedere l’autorizzazione utilizzando l’interfaccia utente.

    CLLocationManager autorizzazione problema di iOS 8

    Olandese testi “Toegang è nodig” e “Toegang è noodzakelijk” vengono visualizzati nella finestra PopUp in cui si concede l’accesso. È possibile modificare questi per qualsiasi testo che ti piace.

    Devi semplicemente aggiungere plist origine,

    <key>NSLocationAlwaysUsageDescription</key>
    <string>To get location</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>To get location</string>
  6. 1

    Per Swift 2 ho sostituito la respondsToSelector() verificare con una versione iOS di controllo. Non è elegante, ma è necessario per la Xcode 7 a 0 errori, 0 avvisi

    if #available(iOS 8.0, *) {
        locationManager.requestWhenInUseAuthorization()
    } else {
        locationManager.startUpdatingLocation()
    }

Lascia un commento