diff --git a/README.md b/README.md index 6a470789..f5699e46 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ SwiftLocation.gpsLocation().then { } ``` +**Remember**: Before using SwiftLocation you should set the appropriate keys in your Info.plist (`NSLocationAlwaysAndWhenInUseUsageDescription` or `NSLocationWhenInUseUsageDescription` and `NSLocationTemporaryUsageDescriptionDictionary` if you are using reduced location in iOS 14+). + If you need more customization you can fine-tune your request by configuring each of the available parameters. This is a more complex example: ```swift @@ -438,9 +440,9 @@ func application(_ application: UIApplication, didFinishLaunchingWithOptions lau If you want to disable automatic requests save you can set the `SwiftLocation.automaticRequestSave = false`. - + -- [Precise & Reduced Location in iOS 14+](#precisereducedlocation) +## Precise & Reduced Location in iOS 14+ Location data are very sensitive; since iOS 14 Apple introduced a further layer of privacy to Core Location Manager: **users can choose whether to give precise or approximate location access**. Since 5.0.1 SwiftLocation supports this options and it's transparent to old iOS versions. diff --git a/Sources/SwiftLocation/Extensions/CLLocationManager+Extension.swift b/Sources/SwiftLocation/Extensions/CLLocationManager+Extension.swift index 61597dd0..02b3b339 100644 --- a/Sources/SwiftLocation/Extensions/CLLocationManager+Extension.swift +++ b/Sources/SwiftLocation/Extensions/CLLocationManager+Extension.swift @@ -146,6 +146,15 @@ extension CLAuthorizationStatus: CustomStringConvertible { return false } } + + internal var isRejected: Bool { + switch self { + case .denied, .restricted: + return true + default: + return false + } + } public var description: String { switch self { diff --git a/Sources/SwiftLocation/SwiftLocation.swift b/Sources/SwiftLocation/SwiftLocation.swift index d3457d37..cdab8932 100644 --- a/Sources/SwiftLocation/SwiftLocation.swift +++ b/Sources/SwiftLocation/SwiftLocation.swift @@ -551,7 +551,7 @@ public class LocationManager: LocationManagerDelegate, CustomStringConvertible { } private func failWeakAuthorizationRequests() { - guard authorizationStatus.isAuthorized == false else { + guard authorizationStatus.isRejected == true else { // If we have already the authorization even request with `avoidRequestAuthorization = true` // may receive notifications of locations. return diff --git a/SwiftLocationPlayground/SwiftLocationPlayground/View Controllers/Features/Location by GPS/GPSController.swift b/SwiftLocationPlayground/SwiftLocationPlayground/View Controllers/Features/Location by GPS/GPSController.swift index 368a2b64..f1e87e3e 100644 --- a/SwiftLocationPlayground/SwiftLocationPlayground/View Controllers/Features/Location by GPS/GPSController.swift +++ b/SwiftLocationPlayground/SwiftLocationPlayground/View Controllers/Features/Location by GPS/GPSController.swift @@ -232,6 +232,7 @@ class GPSController: UIViewController, UITableViewDelegate, UITableViewDataSourc let request = SwiftLocation.gpsLocationWith(serviceOptions) serviceOptions = GPSLocationOptions() + serviceOptions.avoidRequestAuthorization = true reloadData() AppDelegate.attachSubscribersToGPS([request])