Hello,
I'm working on an application that requires the use of significant location changes and visits, in addition to region monitoring and standard continuous location delivery (foreground and background).
iOS 17 and iOS 18 introduced changes to how we can monitor distinct regions of interest (with CLMonitor) as well as receive location updates (with CLLocationUpdate).
But I couldn't find any information regarding how to work with
Significant location changes. Do we still need to create a location manager and call startMonitoringSignificantLocationChanges()? Where are the updates received in this case, in the locationManager(_:didUpdateLocations:) or in the liveUpdates async sequence?
Visits. Same question here, for visit monitoring to work, do we still have to create a location manager then call startMonitoringVisits()? Where are the visits being notified? Still in locationManager(_:didVisit:) or in the liveUpdates asynchronous sequence?
I just want to be sure I understand correctly how to use the updates, and if some features of Core Location still need to use a location manager and the delegate to receive the events.
Maybe additional CLCondition will be added to cover both of these technologies as it seems highly related to monitoring conditions (significant location change, and visit).
Thank you,
Axel
Maps & Location
RSS for tagLearn how to integrate MapKit and Core Location to unlock the power of location-based features in your app.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I'm making an app that can have locations and links shared to it. I have gotten the share intent working for text and urls with:
NSExtensionActivationSupportsWebURLWithMaxCount: 1
NSExtensionActivationSupportsWebPageWithMaxCount: 1
NSExtensionActivationSupportsText: true
in Info.plist of the share extension. I am able to share Google Maps locations and safari websites. However, my app does not appear when I share a location on Apple Maps.
I also tried the other options in the docs (https://developer.apple.com/documentation/bundleresources/information-property-list/nsextension/nsextensionattributes/nsextensionactivationrule) as well without success. When I share a location (i.e. a shop) in Apple Maps, it looks like a link but perhaps its something else?
Does anyone know how to get an app to come up in the share menu of an Apple Maps location?
Thanks!
Our Indoor Map for shopping center has been stuck at "Occupants Data in Review" for a few weeks. Can someone on that team assist? Thank you.
Topic:
App & System Services
SubTopic:
Maps & Location
Hi, I'm using the Apple Maps Server API (/v1/geocode) to retrieve geocoding results for Japanese addresses.
Until recently, requests like the one below returned correct results:
GET https://maps-api.apple.com/v1/geocode?q=東京都千代田区千代田1-1&lang=ja-JP
Authorization: Bearer <valid JWT>
But now, the response is always:
{ "results": [] }
However, when I use the same address with lang: en-US, it returns valid coordinates:
GET https://maps-api.apple.com/v1/geocode?q=1-1 Chiyoda, Chiyoda-ku, Tokyo=en-US
"東京都千代田区千代田1-1" is a Japanese address, and "1-1 Chiyoda, Chiyoda-ku, Tokyo" is the same address written in English.
My Questions:
Has there been a recent change to the geocoding behavior for Japanese addresses when lang: ja-JP is used?
Does the lang parameter affect not only the response language but also the internal parsing logic?
Is this a known issue or limitation?
The access token is valid and I'm getting a 200 OK response, but results is always empty with lang: ja-JP.
Thanks for your help!
Hi- I've never posted on here before! But ChatGPT hasn't been helpful with this.
I have a call using MKLocalSearch (i have a waddled down version below)
let region = MKCoordinateRegion(
center: location, // the user's location
span: MKCoordinateSpan(
latitudeDelta: 0.005,
longitudeDelta: 0.005
)
)
let req = MKLocalPointsOfInterestRequest(coordinateRegion: region)
req.pointOfInterestFilter = MKPointOfInterestFilter(including: [.nightlife])
let search = MKLocalSearch(request: req)
I made the latitude and longitude the lowest they can possibly be without throwing an error. Sometimes (and unreliably) when the user's location is at say, a bar, this list will give me like 10 bars that are not even within the region, and exclude the bar that the user is actually present in. How can i make this not the case?
In other words, I just want this to return what I expect: a list of POIs with the category .nightLife within the defined region.
Any help would be appreciated!
Hey everyone,
I’m using MapKit JS in a web app and wanted to ask if anyone has experience optimizing its loading performance.
Initially, I was using the core version of MapKit JS, but some users reported issues—certain modules weren’t immediately available, and they had to wait quite a while before the map became usable.
Switching to the full version helped somewhat, but I’m still seeing delays. In some cases, MapKit JS isn’t fully ready even after 10 seconds.
To reduce these delays, I’m considering bundling MapKit JS directly into my site’s JavaScript bundle (rather than loading it externally). My hope is that this could improve load times and reduce dependency on external script loading.
Before I try this, I want to make sure this doesn’t go against Apple’s usage policies for MapKit JS.
Has anyone tried this approach? Is bundling MapKit JS allowed? Or are there better ways to improve the loading experience?
Thanks in advance!
I have just a thin blue line as the route polyline and it is quite different not to think that this ist just a small river? Does anyone have an idea how to change the color and the strike width (line width) of the polyline (between Essen and Dortmund). The solution by Gemini and ChatGPT is not working...
Thanks for your help, Markus
<script src='https://cdn.apple-mapkit.com/mk/5.x.x/mapkit.core.js'
crossorigin async data-callback='initMapKit' data-libraries='full-map,services,overlays,annotations' data-token='TOKEN></script>
<script type='module'>
const setupMapKitJs = async() => {
if (!window.mapkit || window.mapkit.loadedLibraries.length === 0) {await new Promise(resolve => { window.initMapKit = resolve }); delete window.initMapKit;}};
const main = async() => {
await setupMapKitJs();
var map = new mapkit.Map('map-container', {
center: new mapkit.Coordinate(51.5, 6.9),
showsZoomControl: true,
colorScheme: 'light',
showsMapTypeControl: true,
});
map.cameraDistance = 30000;

const directions = new mapkit.Directions();
directions.route({
origin: 'Essen',
destination: 'Dortmund'
}, (error, response) => {
if (error) {
console.error(error);
return;
}
const route = response.routes[0];
const routePolyline = route.polyline;
routePolyline.lineWidth = 20;
map.addOverlay(routePolyline);
});
};
main();
</script>
Topic:
App & System Services
SubTopic:
Maps & Location
Hi,
Apple recently announced DL-TDoA (Downlink TDoA) support on iOS26. This API is currently marked as Beta. We are working on integrating this functionality into our app, already added the APIs and tried to configure a new DL-TDoA session using NIDLTDOAConfiguration (the only parameter it takes is networkIdentifer). The session is configured but automatically invalidated by the OS.
When is DL-TDoA expected to be fully supported by phones? Can we expect a detailed documentation or specification explaining how to arrange the session with the DT-Anchors (channel, ranging duration, ...)? Do we need Bluetooth LE connection with the anchors while running DL-TDoA?
We already have the 4 DT-Anchors (1 initiator and 3 responders) ready, looking forward to be able to test this new exciting feature and get DL-TDoA measurements to trilaterate the phone position within a map.
Regards.
Apple recently announced DL-TDoA (Downlink TDoA) support on iOS 26, and the API is currently marked Beta. Using two iPhones (16 Pro and 13) on iOS 26.0 Beta, I’m starting a Nearby Interaction session and need to read NITLDOA parameters (address, carrier frequency offset, signal strength/RSSI), but I can’t find a supported way. I’m also seeing asymmetry: iPhone 13 reports distance+direction, while 16 Pro reports distance only. Is there a supported workflow/API to access those parameters, and any known device/OS constraints that would cause direction to be unavailable on 16 Pro?
I am having a problem with the following scenario.
The user opens the Maps app, then selects a location like a store or restaurant, then taps on share and then on my app.
On iOS 26, my app stopped showing as an option to receive the location altogether. After changing the NSExtensionActivationRule to TRUEPREDICATE to accept all, I see this difference between the OS versions.
iOS 18.5
(lldb) po extensionContext?.inputItems
▿ Optional<Array<Any>>
▿ some : 1 element
- 0 : <NSExtensionItem: 0x60000000c5d0> - userInfo: {
NSExtensionItemAttachmentsKey = (
"<NSItemProvider: 0x600002930d20> {types = (\n \"public.plain-text\"\n)}",
"<NSItemProvider: 0x600002930c40> {types = (\n \"com.apple.mapkit.map-item\"\n)}",
"<NSItemProvider: 0x600002930bd0> {types = (\n \"public.url\"\n)}"
);
NSExtensionItemAttributedContentTextKey = {length = 329, bytes = 0x7b5c7274 66315c61 6e73695c 616e7369 ... 656e7472 61616c7d };
"com.apple.UIKit.NSExtensionItemUserInfoIsContentManagedKey" = 0;
}
iOS 26
(lldb) po extensionContext?.inputItems
▿ Optional<Array<Any>>
▿ some : 1 element
- 0 : <NSExtensionItem: 0x60000000cbd0> - userInfo: {
NSExtensionItemAttachmentsKey = (
"<NSItemProvider: 0x60000293afb0> {types = (\n \"public.url\"\n)}",
"<NSItemProvider: 0x60000293bf70> {types = (\n \"public.plain-text\"\n)}"
);
"com.apple.UIKit.NSExtensionItemUserInfoIsContentManagedKey" = 0;
}
Please notice how iOS 26 stopped sending com.apple.mapkit.map-item
Is it no longer possible to get a MKMapItem item out of the extension contents from the Maps app?
I would appreciate any pointers on how to extract the info of the shared location from the Maps app.
Topic:
App & System Services
SubTopic:
Maps & Location
I am having a problem with the following scenario.
The user opens the Maps app, then selects a location like a store or restaurant, then tap on share and then on my app.
On iOS 26, my app stopped showing altogether. After changing the NSExtensionActivationRule to TRUEPREDICATE to accept all, I see this difference between the OS versions.
iOS 18.5
(lldb) po extensionContext?.inputItems
▿ Optional<Array<Any>>
▿ some : 1 element
- 0 : <NSExtensionItem: 0x60000000c5d0> - userInfo: {
NSExtensionItemAttachmentsKey = (
"<NSItemProvider: 0x600002930d20> {types = (\n \"public.plain-text\"\n)}",
"<NSItemProvider: 0x600002930c40> {types = (\n \"com.apple.mapkit.map-item\"\n)}",
"<NSItemProvider: 0x600002930bd0> {types = (\n \"public.url\"\n)}"
);
NSExtensionItemAttributedContentTextKey = {length = 329, bytes = 0x7b5c7274 66315c61 6e73695c 616e7369 ... 656e7472 61616c7d };
"com.apple.UIKit.NSExtensionItemUserInfoIsContentManagedKey" = 0;
}
iOS 26
(lldb) po extensionContext?.inputItems
▿ Optional<Array<Any>>
▿ some : 1 element
- 0 : <NSExtensionItem: 0x60000000cbd0> - userInfo: {
NSExtensionItemAttachmentsKey = (
"<NSItemProvider: 0x60000293afb0> {types = (\n \"public.url\"\n)}",
"<NSItemProvider: 0x60000293bf70> {types = (\n \"public.plain-text\"\n)}"
);
"com.apple.UIKit.NSExtensionItemUserInfoIsContentManagedKey" = 0;
}
Please notice how iOS 26 is no longer sending com.apple.mapkit.map-item.
Is there an alternative way to read the info from the map location shared to my app?
Reported as FB20357097
In SwiftUI, an empty .safeAreaInset modifier attached to a Map causes the map to become zoomed out to planet level.
Minimal reproduction:
import SwiftUI
import MapKit
@main
struct map_region_safe_area_inset_bugApp: App {
var body: some Scene {
WindowGroup {
Map {
// Any Map content
MapCircle(center: .init(latitude: 35.6895, longitude: 139.6917), radius: 1000)
}
.safeAreaInset(edge: .top) {
// No content, `EmptyView()`, `Color.clear`
}
}
}
}
Note: ZStack { } inside the safeAreaInset prevents the bug.
Empty safeAreaInset (bug)
Non-empty
I am using Xcode 16 to test ARGeoTracking in India with a recorded session from the U.S. (where ARGeotracking is supported), the app remains stuck at "Attaching to App" on my iPad. I've tried two different methods to include the AR session video: placing it in the project folder and adding it to the Shared folder, but neither has resolved the issue.
I am the developer of the Progressive Web App (PWA) FindMeSAR which displays the user’s coordinates in several different formats. https://findmesar.com
When this PWA is not installed on my iPhone 17 Pro then I can use Safari to open this webpage and give permission for it to use my location. FindMeSAR works fine and displays my coordinates as latitude longitude in decimal degrees.
I can also use Safari to open Google maps and geolocation there also works fine.
But if I install FindMeSAR for use offline as a PWA then I get an error message saying location is denied.
My iPhone has the latest iOS 26.0.1
I should add that I recently traded in an iPhone 13 Pro with iOS 17. FindMeSAR worked fine on that device as a PWA including the geolocation feature.
Has anyone else with iOS 26 tried a PWA that does geolocation? Results?
Topic:
App & System Services
SubTopic:
Maps & Location
I am currently using Core location to get user's current location and few surrounding coordinates to draw annotations in Augmented reality. It works best on Cellular network and on Wifi network few times it is working ok and sometimes orientation is completely changed when device is connected to WiFi. Checked on Apple map as well, there itself it was giving wrong orientation and even after user is at same location, current location on map got fluctuating. On WiFi only models GPS accuracy is not good.
I'm trying to simulate GPS in the iOS Simulator, but Debug → Simulate Location is greyed out even though I'm:
Running the iOS scheme
On an iPhone simulator only (no watch paired)
Build configuration = Debug
allowLocationSimulation="YES" in the scheme
Topic:
App & System Services
SubTopic:
Maps & Location
Hello,
I’d like to ask about best practices for handling interactive snippet intents when working with the user’s location.
My use case is:
1. Get the user’s location
2. Fetch nearby data
3. Display it
My current flow is: try to show the snippet view in "loading" state while waiting for Core Location Manager, then fetch data and reload() the view.
BUT I’m running into an issue where I sometimes receive Core Location error 1 (not authorized), even though the main app has “While In Use” authorization.
It seems that in some cases, especially when the app has been force-closed, App Intents are unable to start location updates, even though I’m using supportedModes = .foreground(.dynamic).
Any guidance would be appreciated.
Cheers,
Ondrej
Topic:
App & System Services
SubTopic:
Maps & Location
Tags:
Core Location
Maps and Location
Intents
App Intents
I am new to Find My network development and i am going to use Nordic solution for my FMN application.
I have asked the MFi representative to enable the "Find My network" in our MFi portal. But there are just a sets of PDF in the "Find My network" under "Technology" in MFi Portal.
Is there any Find My network Supplementary Agreement in MFi portal? Is it a PDF or where can i find it?
Because I need to sign this document back to Nordic solution representative. But it seems there are no such
FMN Supplementary Agreement.
Does DL-TDoA ranging in the Nearby Interaction framework support building a traditional RTLS-style TDoA localization system, where a device’s absolute position is computed from time-difference measurements across multiple deployed anchors, or is DL-TDoA strictly limited to system-managed, relative ranging and direction estimation (distance/direction) between nearby devices?
If DL-TDoA ranging in Nearby Interaction is not intended to support traditional RTLS-style TDoA localization, is there any public documentation or reference material that describes the intended DL-TDoA architecture, such as the expected system setup, device roles, and deployment constraints (for example, how ranging is expected to be performed between an iPhone and nearby accessories), beyond the high-level API documentation?
Regards.
I’m hitting a specific edge case with background execution that I can’t figure out. I'm using Flutter for the UI, but all the logic handles are in Swift using CoreBluetooth and CoreLocation.
I need the app to wake up from a suspended state when it detects my specific BLE peripheral (OBD sensor), connect to it, and immediately start continuous location tracking for the duration of the drive.
If I start this process while the app is in the foreground, or very shortly after going to BG, it works perfectly. The app stays alive for the whole trip.
The issue only happens when the sequence starts from the background:
The app is suspended. scanForPeripherals wakes the app when the sensor is found.
In didDiscover, I immediately call locationManager.startUpdatingLocation().
locationd actually delivers updates successfully.
However, 5-15 minutes later, iOS suspends the app again.
Crucially, I never see the blue "Location In Use" pill on the status bar, even though I have showsBackgroundLocationIndicator = true set. Also, distance filter is set to None.
Logs for reference (around suspending)
locationd: {"msg":"Sending location to client","Client":"[appName]:","desiredAccuracy":"-1.000000"}
runningboardd: Invalidating assertion ... from originator \\\[osservice<com.apple.bluetoothd>:...\\\]
runningboardd: Removed last relative-start-date-defining assertion for process app<[appName]...>
runningboardd: Calculated state ... running-suspended
runningboardd: Suspending task
locationd: Client [appName]: disconnected
bluetoothd: State of application "[appName]" is now "suspended"
Questions
Why does invalidating the Bluetooth assertion cause an immediate suspend even though I called startUpdatingLocation() and am receiving updates?
Does the missing blue location pill imply that the OS never fully "accepted" the location session?
Is there a specific "handshake" required to transition from a BLE wake-up to a long-running location session? I'm wondering if I need to use a background task identifier to bridge the gap between the BLE wake and the location manager taking over.
More context:
Digging deeper in the comments, I just noticed the following patterns when the application is not suspended vs when it is recently suspended and got awaken by a BLE event.
Not suspended:
303948:Jan 23 20:59:35.640118 locationd[6491] <Debug>: {"msg":"Client is setting ContinuousBackgroundLocationRequested", "Client":"[appName]:", "ContinuousBackgroundLocationRequested":1}
303949:Jan 23 20:59:35.640155 locationd[6491] <Debug>: {"msg":"Allowing process assertion due to foreground-ish status", "ClientKeyPath":"[appName]:"}
Recently suspended and awaken by BLE:
564296:Jan 23 21:00:23.179125 locationd[6491] <Debug>: {"msg":"Client is setting ContinuousBackgroundLocationRequested", "Client":"[appName]:", "ContinuousBackgroundLocationRequested":1}
564298:Jan 23 21:00:23.179195 locationd[6491] <Notice>: {"msg":"#Warning Denying process assertion", "ClientKeyPath":"[appName]:"}
The assertion fails for the second case and that's why the app could not persist. Most importantly, following the logs in the second case, I see the following:
locationd[6491] <Notice>: {"msg":"computing freshAuthorizationContext", "Client":"[appName]:", "ClientDictionary":"{\n AlwaysServiceSession = 0;\n
I suspect that the flag AlwaysServiceSession being 0 has to do with process assertion being denied for location.
Topic:
App & System Services
SubTopic:
Maps & Location