Posts

Post not yet marked as solved
7 Replies
5.1k Views
I am currently testing the background location mode in iOS 13, as I want to track the user´s location and motion (using the CMMotionManager) in the background. Therefore, i have my own (singleton) class handling the location tracking. I initialize the CLLocationManager in the following way: func initializeLocationManager() -> CLLocationManager { let manager = locationManager ?? CLLocationManager() manager.delegate = self manager.requestAlwaysAuthorization() manager.allowsBackgroundLocationUpdates = true manager.pausesLocationUpdatesAutomatically = false manager.distanceFilter = kCLDistanceFilterNone manager.desiredAccuracy = kCLLocationAccuracyBest manager.activityType = .other return manager } Then I start the following services: func startLocationServices() { ... locationManager.startUpdatingLocation() locationManager.startMonitoringVisits() locationManager.startMonitoringSignificantLocationChanges() ... }In addition, I implemented the CLLocationManagerDelegate-methods didChangeAuthorization(), didUpdateLocation().In the .plist-file I appended the following entries:<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>...</string> <key>NSLocationWhenInUseUsageDescription</key> <string>...</string> <key>UIBackgroundModes</key> <array> <string>location</string> </array>In my view controller, I call the startLocationServices. Currently, I set the app's authorization to track location data to ".authorizedAlways"The location updates stop after approximately 60 - 130 minutes.To solve the problem, I already added the didFinishLaunchingWithOptions-function, which triggers the location-updates again:nc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if let launchOptions = launchOptions, let isLocationKey = launchOptions[UIApplication.LaunchOptionsKey.location] as? Bool, isLocationKey { restartServices() } return true }When the app gets awoken using this function, I managed to get continuous data on some tests, but sometimes the app was suspended again after a few minutes.Last, I also tried a timer that restarts the location tracking every 5 minutes, but this does not seem to affect the update-duration at all.I tested the application on iOS 12 and it gets continuous updates in 5/5 tests. So I guess the problem is related to iOS 13.So my question is if there is a way of continuously receiving the location updates in the background in iOS13, or is there some option I am missing?Thanks in advance.
Posted
by mattll.
Last updated
.