From 582b928d0afebdf297e91d015c6fd575a4579516 Mon Sep 17 00:00:00 2001 From: Tom Daniel Date: Wed, 5 Jun 2019 15:58:10 -0600 Subject: [PATCH 1/2] Fixed bug where 'haveCoreMotionPermission' returns true despite Core Motion permissions being denied. --- LocoKit/Base/LocomotionManager.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/LocoKit/Base/LocomotionManager.swift b/LocoKit/Base/LocomotionManager.swift index 350fcdaf..ddd87726 100644 --- a/LocoKit/Base/LocomotionManager.swift +++ b/LocoKit/Base/LocomotionManager.swift @@ -762,7 +762,6 @@ import LocoKitCore os_log("error: %@", String(describing: error)) } else if let motion = motion { - self.coreMotionPermission = true ActivityBrain.highlander.add(deviceMotion: motion) } } From 652ea8714caf88ad7beb42892bff39ee23d115dd Mon Sep 17 00:00:00 2001 From: Tom Daniel Date: Wed, 12 Jun 2019 15:06:21 -0600 Subject: [PATCH 2/2] Added guarantee that CLLocationManager is created on the main thread. --- LocoKit/Base/Helpers/MiscTools.swift | 5 +++-- LocoKit/Base/LocomotionManager.swift | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/LocoKit/Base/Helpers/MiscTools.swift b/LocoKit/Base/Helpers/MiscTools.swift index 5625946d..135cc419 100644 --- a/LocoKit/Base/Helpers/MiscTools.swift +++ b/LocoKit/Base/Helpers/MiscTools.swift @@ -8,11 +8,12 @@ import Foundation -public func onMain(_ closure: @escaping () -> ()) { +public func onMain(sync: Bool = false, _ closure: @escaping () -> ()) { if Thread.isMainThread { closure() } else { - DispatchQueue.main.async(execute: closure) + sync ? DispatchQueue.main.sync(execute: closure) + : DispatchQueue.main.async(execute: closure) } } diff --git a/LocoKit/Base/LocomotionManager.swift b/LocoKit/Base/LocomotionManager.swift index 350fcdaf..77841774 100644 --- a/LocoKit/Base/LocomotionManager.swift +++ b/LocoKit/Base/LocomotionManager.swift @@ -467,12 +467,19 @@ import LocoKitCore untimely deaths of small cute animals in Madagascar. */ @objc public private(set) lazy var locationManager: CLLocationManager = { - let manager = CLLocationManager() - manager.distanceFilter = kCLDistanceFilterNone - manager.desiredAccuracy = self.maximumDesiredLocationAccuracy - manager.pausesLocationUpdatesAutomatically = false - - manager.delegate = self + var manager: CLLocationManager! + + // Problems may occur if CLLocationManager is not created on the main thread + onMain(sync: true) { + manager = CLLocationManager() + manager.distanceFilter = kCLDistanceFilterNone + manager.desiredAccuracy = self.maximumDesiredLocationAccuracy + manager.pausesLocationUpdatesAutomatically = false + + manager.delegate = self + + } + return manager }()