I wish to add location icon on/off in control center, like wifi icon or bluetooth icon it will be more easier and save the battery
Maps & Location
RSS for tagLearn how to integrate MapKit and Core Location to unlock the power of location-based features in your app.
Post
Replies
Boosts
Views
Activity
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?
I have a UIKit app with an MKMapview.
In that mapview, I show icons on the location of Airfields.
When zooming out to Europe (or USA for that matter), the whole map is covered with the annotations, so I want to only show these annotations when zoomed in beyond some level.
How can that be achieved?
I did find a way like this:
class MapViewController: UIViewController {
var isAtBigZoom = true {
didSet {
guard oldValue != isAtBigZoom else {
return
}
for case let annot in mapView.annotations {
mapView.view(for: annot)?.alpha = isAtBigZoom ? 1 : 0
}
}
}
}
extension MapViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
isAtBigZoom = mapView.region.span.latitudeDelta < self.airportThreshold
}
}
But I have 2 problems with that:
Seems like a lot of processing power
It only takes effect after a pan. So I zoom beyond the limit, alpha has the 'old' value. Only after I pan, the alpha is suddenly represented in the MapView.
Does anybody know a better solution?
Has anyone found a thread-safe pattern that can extract results from completerDidUpdateResults(MKLocalSearchCompleter) in the MKLocalSearchCompleterDelegate ?
I've downloaded the code sample from Interacting with nearby points of interest and notice the conformance throws multiple errors in Xcode 16 Beta 5 with Swift 6:
extension SearchDataSource: MKLocalSearchCompleterDelegate {
nonisolated func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
Task {
let suggestedCompletions = completer.results
await resultStreamContinuation?.yield(suggestedCompletions)
}
}
Error: Task-isolated value of type '() async -> ()' passed as a strongly transferred parameter; later accesses could race
and
Error: Sending 'suggestedCompletions' risks causing data races
Is there another technique I can use to share state of suggestedCompletions outside of the delegate in the code sample?
Hello,
It’s unclear to me if there is a limit of requests when using MKLocalSearch from MapKit.
Let’s say I have a very large user base and will use 1000 requests per minute at peak times. Will MapKit support this?
But if there is a limit, is it by user or by developer account? Also, if there is a limit, is it per day?
Here is an example of the request we use.
let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = myQueryStringHere
localSearch?.cancel() // cancel the previous call if it exists
localSearch = MKLocalSearch(request: searchRequest)
localSearch?.start { (response, error) in
guard error == nil else {
completion(.failure(.myError))
return
}
let mapSearchLocations = response?.mapItems
completion(.success(mapSearchLocations))
}
}
Hi! I was wondering what the expected behavior of CLServiceSession(authorization: .always) after a device restart was?
What I am observing right now is that, after a device restart, location access from the background is denied until the app enters the foreground for the first time (CLServiceSession.Diagnostic says insufficientlyInUse: true; CLLocationUpdate additionally says serviceSessionRequired: true).
Is this the expected behavior?
If it is, then this seems like a somewhat suboptimal user experience to me, at least for my use case - the user's intention regarding the background location access won't have changed just because the device was rebooted.
(In case this is relevant, my use case is transmitting the current location to connected Bluetooth devices, e.g. digital cameras. As such my app is setting UIBackgroundModes of ["bluetooth-central”]).
There is no more way to change location name in Find My, or change what device the Find My location should be on in iOS18.
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
}
In order to check for issues related to positioning,I go to https://developer.apple.com/bug-reporting/profiles-and-logs/ and follow the instructions for Location Services for iOS to install a logging profile on my device.But I can't view the gpsd.log.lz4 file.
I have created an MKLocalSearch request as follows:
let reqVenue = MKLocalSearch.Request()
reqVenue.naturalLanguageQuery = "Music Venue"
reqVenue.resultTypes = .pointOfInterest
reqVenue.region = .init(center: mockCoord, latitudinalMeters: 150, longitudinalMeters: 150)
I have made sure mockCoord is the exact location coordinate of the example music venue I want to get back in the response. I have noticed that all Music Venues I can find on Apple Maps do not come back as results in MKLocalSearch. I would love an explanation as to why and what I can do to make them appear in MKLocalSearch results please!
best,
nick
The delegate method :
locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion)
is giving no values in beacons for iOS 18 beta iPhone device in XCode 16 beta while the same code works and gives correct beacons on same peripheral and central devices in iOS 17. Has something changed in iOS 18 beta or is it iOS 18 beta bug related to beacons?
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?
Saved location is not functional ion CarPlay since upgrade to iOS 18 public beta 2. was working fine in beta 1.
I'm a bit unsure about whether there’s a limit on the number of requests when using MKLocalSearch from MapKit. For example, if I have a large user base and need to make 200 requests per minute at peak times, will MapKit be able to handle this? Will the user be throttled after a number of requests?
If there is a limit, is it based on the user or developer account?
Additionally, if there is a limit, is it per day? Can you clarify?
Just to give you an idea, here is an example of the request we make:
let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = myQueryStringHere
localSearch?.cancel() // cancel the previous call if it exists
localSearch = MKLocalSearch(request: searchRequest)
localSearch?.start { (response, error) in
guard error == nil else {
completion(.failure(.myError))
return
}
let mapSearchLocations = response?.mapItems
completion(.success(mapSearchLocations))
}
}
I appreciate your help in advance.
Non of my maps are working like they supposed to be. Before the update everything was working fine in CarPlay but for some reason after updating I can’t click on anything on the car screen.
My car was working perfectly fine but I updated to 18 beta since then Google maps keeps going blank and i have to keep Google map on on my mobile screen if i need to use on car play and also not able to click on any thing on car play’s screen
Wondering if anyone has had any luck with getting the geo-location while viewing a web page in mobile Safari on Watch OS? I've updated my phone and watch to the latest versions.
The code I'm using is standard Javascript for geolocation such as
navigator.geolocation.getCurrentPosition(showPosition, showPositionError);
Works fine when I run it in Safari on my laptop, but when I try to run the same thing on apple watch in embedded web browser, get an "Access Denied" error, which would imply that I have some permission set wrong either on the watch or the paired iPhone. I've messed with many of those settings and nothing seems to be working.
Wondering if it's stated somewhere that it simply won't work so I don't continue chasing my tail on something that was designed not to work.
The problem is that the second level in the apps cannot be operated via CarPlay.
I have the CarPlay Entitlement "Driving Task" and two of my apps use it.
Now, in both apps, I have implemented Navigation. I requested the Navigation CarPlay Entitlement when the feature was mature and builds were available in Test Flight, since I wanted to release the new versions of the apps with navigation available both on the iPhone and in CarPlay.
I got no answer to my request, so I decided to release the apps with only navigation in the iPhone and the Driving Task functionality in CarPlay, thinking that maybe being live with navigation in the App Store was a requirement. I have asked permission again, and so far, the request is being ignored again.
What are the requirements to get the Navigation CarPlay Entitlement?
If the app is approved for navigation, is there something else the app must do to get the entitlement?
Requirements for CarPlay Entitlements seem quite obscure, are they listed anywhere?
Is there a technical problem to move from an existing CarPlay Entitlement to another? Can that be the reason the entitlement has not been granted?
Some of my competitors have the CarPlay Navigation entitlement. My use case is the same (in a better app in my opinion, of course). But I am only getting bad reviews because "the app does not include the map in CarPlay" after the big investment in implementing navigation in the apps.
Any help or insight would be appreciated.