Hello,
I'm trying to receive location updates on background mode but it only lasts about 10 minutes then it stops when API detected the "isStationary" is true.
Is there any way to continue receiving updates even when the device is stationary?
Btw app is not terminated by the user.
I'm using CLLocationUpdate.liveUpdates(.otherNavigation) API.
CLBackgroundActivitySession is created before calling the liveUpdates.
CLLocationManager:
let manager: CLLocationManager = {
let manager = CLLocationManager()
manager.distanceFilter = kCLDistanceFilterNone
manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
manager.pausesLocationUpdatesAutomatically = false
manager.activityType = .other
manager.showsBackgroundLocationIndicator = true
manager.allowsBackgroundLocationUpdates = true
return manager
}()
Thank you!
Post
Replies
Boosts
Views
Activity
Hi fellow developers,
I'm encountering an issue when using MKLocalSearch to search for cities. Here's my setup:
I'm using MKLocalSearch with an MKLocalSearch.Request object.
I've set the resultTypes to .address to focus on address results.
The problem:
When I receive the search response, it includes the locations as expected. However, these locations don't have an identity or alternative identities.
Questions:
Is this the expected behavior when searching for cities?
Without an identity, how can I uniquely identify and store these city results in my database?
Would it be appropriate to store the city name, country, and coordinates instead?
Thanks in advance!
I've started getting reports of this today and I am able to replicate it on my end but looking to see if anyone else can verify or if it's possibly regional to me (Canada).
In Apple Maps (iOS or macOS), if you search a latitude and longitude -- for example: "49.110,-112.110" and search, it centers on the location as it always has and shows the "Directions" button. When you tap the directions button, I get "A route can't be shown because of a problem connecting to the server.".
Alternatively, if you pass the coordinate in via Apple Maps URL (https://maps.apple.com/?daddr=49.110,-112.110) it will route but the route is no longer to those specific coordinates, Apple Maps alters them to some nearest known entity (in this case, the RM of Warner County). If you compare the suggested route end destination with the search results for specifically entering the coordinates, you will see they are different locations and mapping routes are not actually taking you to the coordinates anymore.
In the last photo attached, the arrow points to where "49.110,-112.110" is actually located which tapping the "Directions" button cannot figure out a route because of a server issue. If you pass it in via URL, it changes the destination coordinates and begins a route quite a ways away from the intended coordinate.
The problem started happening either this morning or last night.
Can anyone else confirm this happens to them?
Thanks,
Mike
Hello everyone,
I’m experiencing an issue with App Clips Advanced Experiences and Apple Maps/Siri Suggestions. We have already contacted Apple Support before, but they are investigating the cause of this issue and it has not been resolved til date.
The App Clip is bundled with the main app and has been already available on the App Store for several months. The business running the app has several physical shops and wants to offer the App Clip to show up in Apple Maps and Siri Suggestions at each location.
The App Clip is correctly exposed in the AASA file, and it's also validated correctly by the AASA APIs available at https://app-site-association.cdn-apple.com/a/v1.
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.bundleid",
"paths": []
}
]
},
"appclips": {
"apps": [
"TEAMID.bundleid.Clip"
]
}
}
(with TEAMID and bundleid being the team and bundle identifiers of the app)
The App Clip is displayed correctly when loading the website and when scanning a QR code or App Clip code, but doesn't appear in the Maps app or in Siri suggestions.
We have set up the App Clip Advanced Experiences on the App Store Connect page of the app, and each URL has been linked to a physical shop. All URLs are in the "Received" state, so they should appear correctly on Maps.
Unfortunately, I don't see any "Order" button in Apple Maps at any location card. We tried with both iOS 17 and 16. According to feedbacks from people in the shops, they don't see the app suggested in the Siri Suggestions.
I have just submitted a Custom Action Link on Apple Business Connect for one of the shops, but without success: the App Clip doesn't appear.
Any idea why is this happening?
I'm making an app for iOS 13+ devices. My project has both app delegate and scene delegate files. I'm using core location for significant location changes. I was able to detect significant location changes and system waking up my app in simulator using SignificantlyChanged app’s scheme. But when the launch options dictionary has 0 elements and the value for the key UIApplication.LaunchOptionsKey.location is always nil.
Here is my AppDelegate.swift where the system will launch the app in background state when a significant location change is detected and execute the location fetch code. And location manager class. I want to know if the app is launched my the system or if it is launched by the user so I want to check if UIApplication.LaunchOptionsKey.location key has a value. But it is always nil and there is no alternative to it in SceneDelegate. When and how can I find a solution to this long due issue.
import CoreLocation
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if launchOptions != nil{
if launchOptions![UIApplication.LaunchOptionsKey.location] != nil{
print("Called from background location fetch")
}
}
LocationService.shared.askForPermission()
LocationService.shared.delegate = self
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
}
extension AppDelegate: LocationMangerDelegate{
func didFetchLocation(coordinate: CLLocationCoordinate2D) {
print(coordinate)
}
func didFailToFetchLocation(error: Error?, message: String) {
print(message)
}
}```
import Foundation
import CoreLocation
protocol LocationMangerDelegate: AnyObject{
func didFetchLocation(coordinate: CLLocationCoordinate2D)
func didFailToFetchLocation(error: Error?,message: String)
}
class LocationService: NSObject{
private override init() {
}
weak var delegate: LocationMangerDelegate?
static var shared = LocationService()
lazy var locationManager: CLLocationManager = {
var manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.allowsBackgroundLocationUpdates = true
manager.pausesLocationUpdatesAutomatically = false
manager.delegate = self
return manager
}()
func askForPermission(){
print("INSIDE")
locationManager.requestWhenInUseAuthorization()
}
func startLocationUpdates(){
self.locationManager.startUpdatingLocation()
}
func stopLocationUpdates(){
self.locationManager.stopUpdatingLocation()
}
}
extension LocationService: CLLocationManagerDelegate{
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
let status = manager.authorizationStatus
switch status {
case .notDetermined:
self.askForPermission()
case .restricted:
self.delegate?.didFailToFetchLocation(error: nil, message: "Location permission is restricted by the user")
case .denied:
self.delegate?.didFailToFetchLocation(error: nil, message: "Location permission is denied by the user")
case .authorizedWhenInUse:
self.locationManager.requestAlwaysAuthorization()
case .authorizedAlways:
self.locationManager.startMonitoringSignificantLocationChanges()
@unknown default:
break
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first{
print(location)
self.delegate?.didFetchLocation(coordinate: location.coordinate)
self.stopLocationUpdates()
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print(error)
self.delegate?.didFailToFetchLocation(error: error, message: error.localizedDescription)
}
}
I've seen a lot of posts around the internet about getting coordinates from an address, but none about how to do the opposite.
What I would like to do is allow a person to drop a pin and then programmatically look up the address closest to the pin. Like if I drop a pin inside a mall on the map I would like to capture the address to the mall.
Does anyone know how this could be done?
Hello! Back on April 4th our team requested the push location service entitlement. Our app requires very similar background tracking as Find my or Life 360 where users agree to share locations and another user might want to prompt for an update.
Since submitting on April 4th, we have received no response or update from our request.
I've called and emailed with developer support 20+ separate times (They've escalated it at least 10 times at this point) with no response either.
I've also submitted new requests in case our original got lost.
Is there anyone else we can contact or talk with to get any progress? The developer support team is even at a loss for how long this is taking now.
We are just completely lost on what our next step could be
I am trying to use GNSS data to track the location of a mobile phone with high precision. I understand that using Fused Location provided by iOS can improve accuracy, but it is not perfect.
To inform the user when the current GNSS location is somewhat inaccurate (with meter-level error), which data fields should I rely on? (e.g., horizontal accuracy, vertical accuracy)
Additionally, I am curious if iOS currently supports dual-band GNSS calculations (e.g., SBAS, BeiDou-3, etc.). If supported, which API can be used to determine this status?
Hello, I'm somewhat new to CarPlay integration and am having an issue. I have ready through Apple's CarPlay Programming Guide, reviewed their code samples and have exhausted my searches online to help find a solution to my problem.
I have been unable to get a basic map to display on my CarPlay map utilizing the following:
import CarPlay
class CarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate {
var interfaceController: CPInterfaceController?
var window: CPWindow?
func templateApplicationScene(_ templateApplicationScene: CPTemplateApplicationScene, didConnect interfaceController: CPInterfaceController) {
self.interfaceController = interfaceController
let mapTemplate = CPMapTemplate()
mapTemplate.mapDelegate = self
interfaceController.setRootTemplate(mapTemplate, animated: true, completion: { success, error in
if let error = error {
debugPrint("Error: \(error)")
} else {
print("CarPlay Map Should Be Displayed")
}
})
let trip = CPTrip(origin: MKMapItem(placemark: .init(coordinate: CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0))), destination: MKMapItem(placemark: .init(coordinate: CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0))), routeChoices: [])
mapTemplate.startNavigationSession(for: trip)
}
}
extension CarPlaySceneDelegate: CPMapTemplateDelegate {
func mapTemplate(_ mapTemplate: CPMapTemplate, panWith direction: CPMapTemplate.PanDirection) {
// Handle panning
}
func mapTemplate(_ mapTemplate: CPMapTemplate, startedTrip trip: CPTrip, using routeChoice: CPRouteChoice) {
// Handle trip start
}
}
I have my CarPlay Entitlements setup, I have my CarPlay Navigation App set in my signing and capabilities and my app icon displays properly on CarPlay (both in simulator and inside of my vehicle). However, as mentioned I only get a white screen.
Now, if I utilize the following code, I will get my map to display, however I lose functionality such as panning the map. I'm sure that I am missing something simple on the above example and appreciate any guidance that you may have.
func createMapTemplate(destination: TripDetails?, destinationBL: BucketListItems?, route: MKRoute, window: UIWindow) -> CPMapTemplate {
mapTemplate = CPMapTemplate()
mapTemplate.mapDelegate = self
trip = nil
let startLocation = CLLocation(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let startMapItem = MKMapItem(placemark: MKPlacemark(coordinate: startLocation.coordinate))
startMapItem.name = "Starting Location"
let endMapItem = MKMapItem(placemark: MKPlacemark(coordinate: route.polyline.points()[route.polyline.pointCount - 1].coordinate))
endMapItem.name = destination?.campgroundName != nil ? destination!.campgroundName : destinationBL!.name
// Create the hosting controller for the SwiftUI view
let mapViewController = UIHostingController(rootView: CarPlayMapView(templateManager: self))
window.rootViewController = mapViewController
window.makeKeyAndVisible()
let routeChoice = createCPRouteChoice(from: route)
trip = CPTrip(origin: startMapItem, destination: endMapItem, routeChoices: [routeChoice])
mapTemplate(mapTemplate, selectedPreviewFor: trip!, using: routeChoice)
mapTemplate.showTripPreviews([trip!], textConfiguration: nil)
return mapTemplate
}
I read in March that Apple will enable in ios18, due to EU ruling, the function to set the default navigation app, like browser and mail standard apps. I installed ios18b5 and live in EU, but does not see this option.
Any idea if this will come in final version?
I'm an iOS mobile developer working on handling location permissions. I've observed that some apps, even recent ones available on the App Store, can automatically navigate to the settings path: Settings -> Privacy & Security -> Location Services when the device's location services are turned off. However, most examples and best practices recommend using UIApplication.openSettingsURLString, which does not meet my requirements. This function only opens the app's specific location permissions, not the device-wide location services toggle.
I'm looking for a way to programmatically open the Privacy & Security -> Location Services settings page directly. Any insights or solutions for achieving this functionality in a compliant and sustainable manner would be greatly appreciated.
Thank you in advance for your help!
Hey guys. I'm building a cross-platform app using Flutter, which uses the Geolocator package to see how far the user has travelled from their starting point, aviation related. I do allow the user to select their own distance filter value from a set of pre-defined options, which could be as low as a metre, since the app is designed for use over relatively small distances, from say 200m to 1km. Therefore, having a large distance filter value wouldn't make much sense.
However, the issue I am having is that with iOS, I can't seem to control the actual sample rate of the user's location. From what I gather, iOS measures the user's location approximately once every second, give or take a bit, but that value cannot be changed. That's quite different to Android, where I can specify this measurement interval to be whatever I want it to be.
This lack of ability to control the measurement interval tends to cause quite a lag. When someone first starts to move, they aren't travelling fast enough to cause a noticeable lag. However, when someone's speed picks up, they could be travelling at around 70mph/32m/s (ish). If you're only measuring the user's location once every second, then it's likely they will have travelled over 30m before the next location update, which means the lag distance could potentially be huge relative to the maximum distance they will measure using the app.
I do fully appreciate that this is native functionality to iOS but my question really is, is there perhaps a way around this? Is there any way to increase the frequency with which the user's location is retrieved, so that I can reduce this lag?
If there isn't, that's no problem at all. I just thought I would ask the question, incase someone has come across this before and found a solution that works.
These are the Apple-related settings that I have been able to control with Flutter, for the Geolocator package.
Thank you in advance!
locationSettings = AppleSettings(
accuracy: LocationAccuracy.bestForNavigation,
activityType: ActivityType.otherNavigation,
distanceFilter: distanceFilterValue,
pauseLocationUpdatesAutomatically: false,
showBackgroundLocationIndicator: false,
);
We are developing a solution, in which we need to send user's current location to server and connect to socket. It will be a continuous process when app is in kill mode.We achieved to get the user location when app is in kill mode, but Can we hit the API continuously when app is in kill mode?
const lookup = new mapkit.PlaceLookup()
lookup.getPlace(input?.id, (error, place) => {
console.log("place", place)
...
gives me for example
{
"id": "I65A54A72CE9E45D6",
"alternateIds": [
"IB86C41DA005E0D9B"
],
"muid": "7324342225941186006",
"_styleAttributes": "4:226,6:16,10:0,82:12,85:12,89:1,164:1,193:1",
"name": "The Museum of Modern Art",
"region": {
"center": {
"latitude": 40.7612829,
"longitude": -73.9768677
},
"span": {
"latitudeDelta": 0.008983199999995861,
"longitudeDelta": 0.01186000000001286
}
},
"coordinate": {
"latitude": 40.7617238,
"longitude": -73.9777654
},
"formattedAddress": "11 W 53rd St, New York, NY 10019, United States",
"countryCode": "US",
"telephone": "+12127089400",
"urls": [
"http://www.moma.org"
],
"country": "United States",
"administrativeArea": "New York",
"administrativeAreaCode": "NY",
"locality": "New York",
"postCode": "10019",
"subLocality": "Manhattan",
"thoroughfare": "W 53rd St",
"subThoroughfare": "11",
"fullThoroughfare": "11 W 53rd St",
"areasOfInterest": [
"Manhattan"
],
"dependentLocalities": [
"Midtown Center",
"Midtown East",
"Midtown Manhattan",
"Midtown",
"North Hudson"
],
"timezone": "America/New_York",
"timezoneSecondsFromGmt": -14400
}
Note there is no pointOfInterestCategory. but
const place_search = new mapkit.Search()
place_search.search(
input,
(error, result) => {
console.log("result_places_0", result?.places?.[0])
...
i get
{
"id": "I65A54A72CE9E45D6",
"alternateIds": [
"IB86C41DA005E0D9B"
],
"muid": "7324342225941186006",
"_wpURL": "https://maps.apple.com/place?q=The%20Museum%20of%20Modern%20Art&auid=7324342225941186006&address=11%20W%2053rd%20St,%20New%20York,%20NY%20%2010019,%20United%20States&ll=40.7617238,-73.9777654",
"_styleAttributes": "4:226,6:16,10:0,82:12,85:12,89:1,164:1,193:1",
"pointOfInterestCategory": "Museum",
"name": "The Museum of Modern Art",
"region": {
"center": {
"latitude": 40.7612829,
"longitude": -73.9768677
},
"span": {
"latitudeDelta": 0.008983199999995861,
"longitudeDelta": 0.01186000000001286
}
},
"coordinate": {
"latitude": 40.7617238,
"longitude": -73.9777654
},
"formattedAddress": "11 W 53rd St, New York, NY 10019, United States",
"countryCode": "US",
"telephone": "+12127089400",
"urls": [
"http://www.moma.org"
],
"country": "United States",
"administrativeArea": "New York",
"administrativeAreaCode": "NY",
"locality": "New York",
"postCode": "10019",
"subLocality": "Manhattan",
"thoroughfare": "W 53rd St",
"subThoroughfare": "11",
"fullThoroughfare": "11 W 53rd St",
"areasOfInterest": [
"Manhattan"
],
"dependentLocalities": [
"Midtown Center",
"Midtown East",
"Midtown Manhattan",
"Midtown",
"North Hudson"
],
"timezone": "America/New_York",
"timezoneSecondsFromGmt": -14400
}
which gives me "pointOfInterestCategory": "Museum"
I think pointOfInterestCategory should also be returned in the placeLookup and might be a mapkit error that its not
it would also be cool if search autocomplete gave me the poi so i could tag the search result previews (mapbox does this).
Unrelated from this topic but coming from mapbox where everything had a mapbox_id i feel like some things like localities like "columbus, Ohio" should still have a place id but maybe the muid serves that purpose idk and just something i should account for.
Lastly on my mind is how to manage rate limiting since im just giving the same mapbox js token to all the clients. Of course for server api I can manage my own system for rate limiting logged in users a bit easier but not sure about mapkit js though I can only dream my project is big enough i need to even worry about that lol.
Unable to get locations when app is killed/suspended even if background modes with Location Updates and Background fetch are enabled. My use case was to get device location irrespective of App State for every 10 Mins.
I am working with an app for tracking driving activity. Currently, I have code that combines CLLocationManager location updates with motion data from CMMotionActivityManager.
My codebase is not straightforward and requires manual starts/stops, etc. After watching the WWDC session about CLLocationUpdate.liveUpdates (https://developer.apple.com/wwdc23/10180) with the specific LiveConfiguration.automotiveNavigation, I thought it was exactly what I needed. Moreover, the presenter mentioned that it could simplify code and remove the dependency on CMMotionActivityManager.
I downloaded the demo project from here https://developer.apple.com/documentation/corelocation/adopting-live-updates-in-core-location, adapted it for iOS 17, and changed CLLocationUpdate.liveUpdates() to CLLocationUpdate.liveUpdates(.automotiveNavigation). However, the result was not what I expected. I received location updates after waking from a stationary state by lightly touching the device, which is not "automotive." Additionally, the changes to LiveConfiguration do not seem to affect the behavior.
What did I do wrong? Or what is the point of LiveConfiguration that I missed?
Thanks,
I recently bought an insta360 flow gimbal. when recording video with the instaflow app, I cannot see the location in apple photos app and all other apple apps. However I can see the location in windows photos app once I downloaded the videos into my windows PC. The location is also visible in android app once I share it through google account.
With an exif app, I can see the location meta data in exif table as well, but again not shown as location.
exiftool in my pc can also see the meta data including location as in attached screenshot.
Compared to video shot with built-in camera app, I cannot find any difference in terms of location meta data.
What could be wrong? I contacted insta360 app support, they do not seem to understand what's going on, just asking for very simple questions again and again like do you enable GPS location access, are you shooting video?
I also contacted apple support, they are just saying it's thirdparty issue and refusing to help further. If it's really thirdparty issue how come the location data is actually embeded as meta data, and windows pc and android device can see the location? BTW, I air drop this video to all my apple devices like iPhone 15 ultra and ipad air, and very old iPhone, all of them cannot see the location.
Hello - I am trying to add a more descriptive Location Purpose String for submitting my app to the store. I previously had a placeholder, generic string for testing.
I have updated my info.plist file, but the old string is still appearing.
I have 1) deleted the app from simulator device and rebuilt 2) tried pushing the version to TestFlight 3) Deleted and replaced the values in the info.plist, none of which have resolved this issue. What am I missing here?
I want to reset the permission state of location services to "notDetermined" (CLAuthorizationStatus) while developing.
But using the command below gives me this error:
$ tccutil reset CoreLocation
tccutil: Failed to reset CoreLocation
same goes for
$ tccutil reset [my bundleId]
tccutil: Failed to reset CoreLocation approval status for [my bunldeId
Anyone know the reason for this?
Hello everyone,
I'm working on a SwiftUI app that requires location services, and I've implemented a LocationManager class to handle location updates and permissions. However, I'm facing an issue where the location permission popup does not appear when the app is launched.
Here is my current implementation:
LocationManager.swift:
import CoreLocation
import SwiftUI
class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
private let locationManager = CLLocationManager()
@Published var userLocation: CLLocation?
@Published var isAuthorized = false
@Published var authorizationStatus: CLAuthorizationStatus = .notDetermined
override init() {
super.init()
locationManager.delegate = self
checkAuthorizationStatus()
}
func startLocationUpdates() {
locationManager.startUpdatingLocation()
}
func stopLocationUpdates() {
locationManager.stopUpdatingLocation()
}
func requestLocationAuthorization() {
print("Requesting location authorization")
DispatchQueue.main.async {
self.locationManager.requestWhenInUseAuthorization()
}
}
private func checkAuthorizationStatus() {
print("Checking authorization status")
authorizationStatus = locationManager.authorizationStatus
print("Initial authorization status: \(authorizationStatus.rawValue)")
handleAuthorizationStatus(authorizationStatus)
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
print("Authorization status changed")
authorizationStatus = manager.authorizationStatus
print("New authorization status: \(authorizationStatus.rawValue)")
handleAuthorizationStatus(authorizationStatus)
}
private func handleAuthorizationStatus(_ status: CLAuthorizationStatus) {
switch status {
case .authorizedAlways, .authorizedWhenInUse:
DispatchQueue.main.async {
self.isAuthorized = true
self.startLocationUpdates()
}
case .notDetermined:
requestLocationAuthorization()
case .denied, .restricted:
DispatchQueue.main.async {
self.isAuthorized = false
self.stopLocationUpdates()
print("Location access denied or restricted")
}
@unknown default:
DispatchQueue.main.async {
self.isAuthorized = false
self.stopLocationUpdates()
}
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
DispatchQueue.main.async {
self.userLocation = locations.last
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location manager error: \(error.localizedDescription)")
}
}
MapzinApp.swift:
@main
struct MapzinApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
@StateObject private var locationManager = LocationManager()
var body: some Scene {
WindowGroup {
Group {
if locationManager.authorizationStatus == .notDetermined {
Text("Determining location authorization status...")
} else if locationManager.isAuthorized {
CoordinatorView()
.environmentObject(locationManager)
} else {
Text("Location access is required to use this app. Please enable it in Settings.")
}
}
}
}
}
Log input:
Checking authorization status
Initial authorization status: 0
Requesting location authorization
Authorization status changed
New authorization status: 0
Requesting location authorization
Despite calling requestWhenInUseAuthorization() when the authorization status is .notDetermined, the permission popup never appears. Here are the specific steps I have taken:
Checked the Info.plist to ensure the necessary keys for location usage are present:
NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
NSLocationAlwaysAndWhenInUseUsageDescription
Verified that the app's target settings include location services capabilities.
Tested on a real device to ensure it's not a simulator issue.
I'm not sure what I might be missing. Any advice or suggestions to resolve this issue would be greatly appreciated. Thank you!