requestWhenInUseAuthorization() not Work in iOS 8 With NSLocationWhenInUseUsageDescription Key in Info.plist
Problem solved. My manager
was declared as local var inside viewDidLoad()
method, but it should've been a class level property.
After I moved manager
declaration out of viewDidLoad()
, my app worked.
Not sure how exactly manager.requestWhenInUseAuthorization()
work behind the scene and why exactly manager
defined within viewDidLoad()
not work. Hope someone who knows this detail enlighten me.
Location Services not working in iOS 8
I ended up solving my own problem.
Apparently in iOS 8 SDK, requestAlwaysAuthorization
(for background location) or requestWhenInUseAuthorization
(location only when foreground) call on CLLocationManager
is needed before starting location updates.
There also needs to be NSLocationAlwaysUsageDescription
or NSLocationWhenInUseUsageDescription
key in Info.plist
with a message to be displayed in the prompt. Adding these solved my problem.
For more extensive information, have a look at: Core-Location-Manager-Changes-in-ios-8
NSLocationWhenInUseUsageDescription warning, but I have already added it
I was requesting authorisation in
viewDidLoad
as follows:
self.locationManager.requestWhenInUseAuthorization()
when I removed this line the error disappeared.
Location Services not working in iOS 11
It would appear that apple have added yet another privacy feature. The user is now able to override our requestAlwaysAuthorization
and downgrade it to requestWhenInUseAuthorization
- Which means as a developer we now have to supply both descriptions in the Info.plist
I found that they have added a new key 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.
*/
However, upon using this new key - the location service still didn't work, upon further searching I found this gem mixed in with all the extra debugging information:
This app has attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain both NSLocationAlwaysAndWhenInUseUsageDescription and NSLocationWhenInUseUsageDescription keys with string values explaining to the user how the app uses this data
Which directly contradicts the the comment that I found in the updated CLLocationManager.h
file. So I've created a radar.
Good news, if you follow the advice of the debugging console, IE. add both the new key NSLocationAlwaysAndWhenInUseUsageDescription
and one of the old keys NSLocationWhenInUseUsageDescription
, locations services will start to work again.
Related Topics
Generatesdecimalnumbers for Numberformatter Does Not Work
Open a Filedialog in Swiftui on MACos
How to Loop Through an Array from the Second Element in Elegant Way Using Swift
Toggle Selection in a List - Swiftui
Get Bogus Value When Execute Break Point in a Variable
Using Scenekit in Swift Playground
How to Get Multiple Lines of Stdin Swift Hackerrank
Continuously Train Coreml Model After Shipping
Declaring and Using Custom Attributes in Swift
Why Does Swift Not Allow Stored Properties in Extensions
Uipickerview Selectrow Doesn't Works
Alamofire Type 'Parameterencoding' Has No Member 'Url' Swift 3
Adding Swift 3 Packages to Xcode 8 Using the Swift Package Manager