diff options
author | Jason Wray <friedbunny@users.noreply.github.com> | 2019-09-09 17:25:42 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-09 17:25:42 -0700 |
commit | 45140af7cb7f485008905a645e043480615109bc (patch) | |
tree | 7939edc1d46b348fca74a1e2f226911f486bdae8 /platform | |
parent | 8ccf15069dc4b22d19939f0bc85a69204d6d0e09 (diff) | |
download | qtlocation-mapboxgl-45140af7cb7f485008905a645e043480615109bc.tar.gz |
[ios] Refactor way location permissions are requested
Diffstat (limited to 'platform')
-rw-r--r-- | platform/ios/src/MGLMapView.mm | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index 2e96931a63..62b943fd3d 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -5303,35 +5303,29 @@ public: if (shouldEnableLocationServices) { - if (self.locationManager.authorizationStatus == kCLAuthorizationStatusNotDetermined) - { - BOOL requiresWhenInUseUsageDescription = [NSProcessInfo.processInfo isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){11,0,0}]; + if (self.locationManager.authorizationStatus == kCLAuthorizationStatusNotDetermined) { BOOL hasWhenInUseUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]; - BOOL hasAlwaysUsageDescription; - if (requiresWhenInUseUsageDescription) - { - hasAlwaysUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysAndWhenInUseUsageDescription"] && hasWhenInUseUsageDescription; - } - else - { - hasAlwaysUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]; - } - if (hasAlwaysUsageDescription) - { - [self.locationManager requestAlwaysAuthorization]; - } - else if (hasWhenInUseUsageDescription) - { - [self.locationManager requestWhenInUseAuthorization]; - } - else - { - NSString *suggestedUsageKeys = requiresWhenInUseUsageDescription ? - @"NSLocationWhenInUseUsageDescription and (optionally) NSLocationAlwaysAndWhenInUseUsageDescription" : - @"NSLocationWhenInUseUsageDescription and/or NSLocationAlwaysUsageDescription"; - [NSException raise:MGLMissingLocationServicesUsageDescriptionException - format:@"This app must have a value for %@ in its Info.plist.", suggestedUsageKeys]; + if (@available(iOS 11.0, *)) { + // A WhenInUse string is required in iOS 11+ and the map never has any need for Always, so it's enough to just ask for WhenInUse. + if (hasWhenInUseUsageDescription) { + [self.locationManager requestWhenInUseAuthorization]; + } else { + [NSException raise:MGLMissingLocationServicesUsageDescriptionException + format:@"To use location services this app must have a NSLocationWhenInUseUsageDescription string in its Info.plist."]; + } + } else { + // We might have to ask for Always if the app does not provide a WhenInUse string. + BOOL hasAlwaysUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]; + + if (hasWhenInUseUsageDescription) { + [self.locationManager requestWhenInUseAuthorization]; + } else if (hasAlwaysUsageDescription) { + [self.locationManager requestAlwaysAuthorization]; + } else { + [NSException raise:MGLMissingLocationServicesUsageDescriptionException + format:@"To use location services this app must have a NSLocationWhenInUseUsageDescription and/or NSLocationAlwaysUsageDescription string in its Info.plist."]; + } } } |