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 }()