From 6fb962c055a19fef5437e9fba2bc935bdefa56a5 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom <maurits@baseflow.com> Date: Wed, 27 Dec 2023 22:37:21 +0200 Subject: [PATCH] Ensures [CLLocationManager locationServicesEnabled] is called on background thread (#1399) * Call locationServiceEnabled on separate thread * Update version number * Remove redundant empty lines --- geolocator_apple/CHANGELOG.md | 5 +++++ .../Handlers/LocationServiceStreamHandler.m | 15 ++++++++++----- geolocator_apple/pubspec.yaml | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/geolocator_apple/CHANGELOG.md b/geolocator_apple/CHANGELOG.md index 7ba7387e5..b915352b9 100644 --- a/geolocator_apple/CHANGELOG.md +++ b/geolocator_apple/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.3.3 + +* Ensures the `[CLLocationManager locationServicesEnabled]` message is called +on a background thread when listening for service updates. + ## 2.3.2 * Fixes build error and warnings regarding unused variables and unavailable APIs on macOS. diff --git a/geolocator_apple/ios/Classes/Handlers/LocationServiceStreamHandler.m b/geolocator_apple/ios/Classes/Handlers/LocationServiceStreamHandler.m index 31fac8baf..ac6e8ff4c 100644 --- a/geolocator_apple/ios/Classes/Handlers/LocationServiceStreamHandler.m +++ b/geolocator_apple/ios/Classes/Handlers/LocationServiceStreamHandler.m @@ -34,11 +34,16 @@ - (FlutterError * _Nullable)onListenWithArguments:(id _Nullable)arguments eventS } - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{ - if ([CLLocationManager locationServicesEnabled]) { - _eventSink([NSNumber numberWithInt:(ServiceStatus)enabled]); - } else { - _eventSink([NSNumber numberWithInt:(ServiceStatus)disabled]); - } + dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + BOOL isEnabled = [CLLocationManager locationServicesEnabled]; + dispatch_async(dispatch_get_main_queue(), ^(void) { + if (isEnabled) { + self->_eventSink([NSNumber numberWithInt:(ServiceStatus)enabled]); + } else { + self->_eventSink([NSNumber numberWithInt:(ServiceStatus)disabled]); + } + }); + }); } @end diff --git a/geolocator_apple/pubspec.yaml b/geolocator_apple/pubspec.yaml index 529aea4d8..d44528774 100644 --- a/geolocator_apple/pubspec.yaml +++ b/geolocator_apple/pubspec.yaml @@ -2,7 +2,7 @@ name: geolocator_apple description: Geolocation Apple plugin for Flutter. This plugin provides the Apple implementation for the geolocator. repository: https://github.com/baseflow/flutter-geolocator/tree/main/geolocator_apple issue_tracker: https://github.com/baseflow/flutter-geolocator/issues?q=is%3Aissue+is%3Aopen -version: 2.3.2 +version: 2.3.3 environment: sdk: ">=2.15.0 <4.0.0"