Hi,
I’m a member of the Apple Developer Program and I’m planning to use Apple Maps Server API together with MapKit JS for a production, customer-facing web service.
I have reviewed the Apple Developer Program License Agreement (including Schedule 6 – Apple Maps Services) and the documentation, but I still need clarification on several points to ensure that our usage fully complies with Apple’s policies.
Daily quota and additional capacity
From the documentation, I understand that there is a daily limit of 250,000 map views and 25,000 service calls per Apple Developer Program membership, shared between MapKit JS and Apple Maps Server API.
When the 25,000 service calls are exceeded, the API returns HTTP 429.
Should this limit be considered a hard limit for production use?
The wording “For additional capacity needs, contact us” is unclear.
Is there any official channel or program to request a higher quota,
or should we assume this is not practically available and design our system to always stay within the documented limit?
Caching of geocoding / reverse-geocoding results
Schedule 6 section 2.5 restricts caching, prefetching, or storing map data except when temporary and only as necessary for Apple Maps Services, and any cached data must be deleted after use.
To understand what “temporary” means in practice, I would like to confirm whether the following scenarios are acceptable:
(a) In-memory cache during a single page or tab session:
- Store geocoding results (latitude/longitude and normalized address) only in a JavaScript in-memory structure (e.g., a Map object) during the lifetime of the browser tab.
- Delete all cached results when the tab is closed or after a short TTL (for example, a few minutes).
(b) sessionStorage with a short TTL:
- Store geocoding results in window.sessionStorage on a per-tab basis.
- Apply a short TTL (for example, a few minutes), and delete the data when the TTL expires or the tab is closed.
Are both (a) and (b) considered acceptable forms of “temporary caching” under section 2.5,
or should we avoid sessionStorage and limit ourselves to purely in-memory (non-persistent) caching?
Use on a commercial customer-facing website
Our intended use case is a public website that:
Displays store locations on a map
Allows users to search for nearby stores
Optionally shows routing directions
We do not do fleet management, asset tracking, enterprise route optimization, or insurance risk scoring.
Is this type of consumer-facing store-locator use case permitted under the Apple Maps Services terms?
Any clarification from the Maps or MapKit teams would be greatly appreciated.
Thank you.
Best regards,
Naoto Omori
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
hello
I am Asmaa Atine
I would like to suggest an improvement for the Apple Maps app.
My idea is to allow users to draw the general path they would like to follow directly on the map with their finger, and then have the app automatically generate an optimized route that follows the drawn trajectory as closely as possible.
This feature would be very useful in several situations, such as:
• when the user wants to pass through a specific area but the suggested routes don’t match,
• when they want to avoid certain places or include a particular spot,
• or when they simply want a more flexible, intuitive way to customize a route.
The concept would be:
1. the user draws a rough path on the map,
2. Apple Maps interprets the drawing,
3. and then proposes the best possible route based on that drawn line.
I believe this would greatly enhance the flexibility of Apple Maps and provide a more intuitive way to create personalized routes.
Thank you for considering this suggestion, and congratulations on the great work already done on the app.
Topic:
App & System Services
SubTopic:
Maps & Location
I am experiencing a persistent issue with my CarPlay application where images rendered within the CarPlay Template interface disappear after the application has been used for an extended period, typically during prolonged navigation.
Images used directly within the CarPlay Template framework disappear. In the attached image showing the issue (IMG_1022.PNG), you can see that the icons for 'parking', 'gasstation', 'conveniencestore', and 'favoritespot' are missing. The side bar icons (car, battery, etc.) remain visible, and the text labels are present, but the Template-specific images/icons vanish.
Problem Description
Images displayed on a custom UIViewController remain visible. Some of our screens integrate a UIViewController (e.g., for map display), and any images rendered on that view controller (not the template itself) continue to display correctly without issue.
Example Images
IMG_1021.PNG (Normal/Correct Display): This image shows the SearchMenu screen with all icons displayed correctly next to their respective labels ('word', 'home', 'route', 'history', 'parking', 'gasstation', 'conveniencestore', 'favoritespot').
IMG_1022.PNG (Problem State): This image shows the same screen after prolonged use, where the icons next to 'parking', 'gasstation', 'conveniencestore', and 'favoritespot' have disappeared, leaving only the text labels.
Question
Has anyone encountered a similar issue? This seems to be a rendering or resource management problem specific to images within the CarPlay Template components when the application runs for an extended duration.
Hi, based on https://developer.apple.com/help/account/configure-app-capabilities/create-a-maps-identifier-and-private-key described, I need to create an Identifier before I can create JWT for MapKit JS. However, I cannot find Maps Ids checkbox when I attempt to set up first MapKit JS access.
Hi, this is a series of questions for the Apple developers, and also for anyone that would like to speculate. How are they able to get trees marked on the in-app map? And how come they are fairly but not completely accurately marked?
Topic:
App & System Services
SubTopic:
Maps & Location
Recently I noticed an app called “Lookus”. Even if I force‑kill it, it still seems to obtain information such as my charging status and network status, and it can even send real‑time notifications. I’m curious how this is technically possible. Does anyone know how this could be achieved?
Hi all,
Our company is applying for the Find My certification for our smartwearable product. Now we submitted the product plan and it's approved. The lab asked us to get the token but we searched on internet and the documents about it are limited. The CSR has approved and we already had .pem and .key file. I wonder what should we do next. Any helps are appreciated
We have developed an iPad application using the ARCL (AR + CoreLocation) library to render Point of Interest (POI) annotations in both an AR view and a standard MapView. The application performs as expected on standard devices.
However, we have some iPad covered with strong magnet. This creates significant magnetic interference, resulting in a 90° to 180° heading offset, rendering the AR POI placement and MapView orientation unusable.
Technical Challenges & Constraints:
Hardware Lock: The magnetic cover is a mandatory business requirement and cannot be removed during field use.
Sensor Failure: The internal magnetometer cannot provide an accurate North reference due to the proximity of the cover’s magnets. While CoreLocation and CoreMotion use sensor fusion, the magnetometer remains the primary source for absolute heading.
Alternative Orientation Tracking: Is there a documented method to bypass the magnetometer and derive device orientation using only the Gyroscope and Accelerometer (e.g., relative tracking) while still maintaining alignment with geographic coordinates in CoreLocation?
Programmatic Offsets: Are there known APIs or mathematical workarounds to programmatically "nullify" or offset a constant magnetic bias once the device is inside the cover? so we can use that offset for ARView and in Mapview as well.
As title says. Surely rendering bitmaps is something the hardware could handle, right? Please enable MKTileOverlay for watchOS.
I set the location permission to Always but it changes back to “when shared” after a few days. Is this a bug?
I just spend the morning debugging LocationButton and the associated CLLocationManagerDelegate only to realise that it works perfectly in iOS 18.5 but no longer works for me in iOS 26.0, 26.2 or 26.2.1 (the latter on-device). It does work when I run my app on macOS 26.2 (Designed for iPad).
Is there a change in behaviour or requirements on iOS I am missing?
On iOS 18.5 I observe that the authorisation status changes from .notDetermined to .authorizedWhenInUse after the LocationButton has been tapped and my delegate is able to obtain the location through locationManager(_ , didUpdateLocations:).
On iOS 26.x the authorisation status remains .notDetermined and my delegate receives locationManager(_:didFailWithError:) with error code .denied.
Setting NSLocationWhenInUseUsageDescription in my Info.plistdid not help.
Just in case ;) FB21798098 (SwiftUI LocationButton fails to acquire authorization on iOS 26)
Hi everyone,
I’m running into an App Store Connect issue that seems to be a misclassification, and I’m hoping someone (or Apple staff) can help clarify or advise.
App: Quick Quote Calculator
Platform: iOS (built with Expo)
App type: Business
No navigation, routing, maps, or turn-by-turn directions
When submitting a new build, App Store Connect returns:
ITMS-90118: Invalid routing app setting
To upload a routing app coverage file, you must define the app binary as a routing app.
However:
There is no “Routing & Navigation” section in App Information
There is no “Routing App Coverage File” section under App Store
No routing metadata or coverage file has ever been uploaded
The app does not provide routing or navigation functionality
It appears the binary itself is being classified as a routing app, but there is no UI in App Store Connect to view or remove this classification.
What I’ve tried
Verified app metadata and screenshots
Confirmed no routing/navigation APIs are used
Reviewed Info.plist permissions (no routing language)
Uploaded a new build with incremented build number
Has anyone run into a case where a routing flag is applied at the binary level and the Routing App options are not exposed in App Store Connect?
Is the only resolution to have Apple manually remove the routing classification via App Review / Developer Support?
Any insight from Apple staff or devs who’ve resolved this would be hugely appreciated.
Thanks in advance!
Yes — the app is strictly a business quote calculator for trades. It calculates distance (Miles via addresses) but does not display maps, routes, directions, or navigation of any kind.
Topic:
App & System Services
SubTopic:
Maps & Location
I have a desktop application that shows some real estate properties chosen by the user. The application shows those GPP locations on the map. The SwiftUI code is something like the following.
import SwiftUI
import MapKit
struct ContentView: View {
var body: some View
ZStack {
mapView
}
}
private var mapView: some View {
Map(position: $propertyViewModel.mapPosition) {
ForEach(propertyViewModel.properties) { property in
Annotation("", coordinate: CLLocationCoordinate2D(latitude: property.lat, longitude: property.lon)) {
Button {
} label: {
VStack {
Image(systemName: "house.circle.fill")
.resizable()
.scaledToFit()
.frame(width: 48)
.foregroundStyle(colorScheme == .light ? .white : .black)
...
}
}
.buttonStyle(.borderless)
}
}
UserAnnotation()
}
.mapControls {
MapUserLocationButton()
}
.mapControlVisibility(.visible)
.onAppear {
CLLocationManager().requestWhenInUseAuthorization()
}
}
}
The application only wants to use the CLLocationManager class so that it can show those locations on the map relative to your current GPS position. And I'm hit with two review rejections.
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
Issue Description
One or more purpose strings in the app do not sufficiently explain the use of protected resources. Purpose strings must clearly and completely describe the app's use of data and, in most cases, provide an example of how the data will be used.
Guideline 5.1.5 - Legal - Privacy - Location Services
The app uses location data for features that are not relevant to a user's location.
Specifically, the app is not functional when Location Services are disabled.
So I wonder if the application is even required to have 'NSLocationWhenInUseUsageDescription' and/or 'NSLocationUsageDescription'? just in order to show user's current location so that they can see property locations relative to it? The exact location privacy statement is the following.
The application needs your permission in accessing your current location so that it will appear on the map
Topic:
App & System Services
SubTopic:
Maps & Location
Tags:
MapKit
Privacy
SwiftUI
Maps and Location
Hello Apple Developer Community,
I'm developing a cross-platform app using Flutter and the flutter_beacon library to handle iBeacon detection on iOS. My goal is to wake up the app in the background when it's in a killed/terminated state upon entering/exiting beacon regions, allowing for BLE communication (e.g., ranging or connecting to beacons). I've configured the necessary Info.plist keys for always location access and background location modes, and it works partially for single regions, but I have some specific questions/issues regarding reliability and limitations:
Background Execution Time After Wake-Up: When the app is woken in the background by a region monitoring event (enter/exit) from a killed state, approximately how much time (in seconds) does iOS allocate for the app to run before suspending it again? Is this sufficient for performing BLE operations like ranging beacons or establishing a short connection, or are there stricter limits in terminated wake-ups compared to standard background modes?
Monitoring Multiple iBeacons with Unique Identifiers: I need to monitor multiple iBeacon devices, each with potentially different UUIDs, majors, and minors. Can I add and monitor up to 20 regions simultaneously, each with a unique string identifier? If multiple beacons (from different regions) enter their respective ranges at around the same time, will the app receive separate callbacks for each region/identifier, or is there coalescing/prioritization that might cause only the last-added identifier to trigger notifications/events?
Reliability in Killed State: In a fully killed state (e.g., force-quit via app switcher), does iOS reliably relaunch the app in the background for region monitoring events? Are there any known caveats, such as requiring specific hardware (e.g., iPhone models with certain Bluetooth chips) or iOS versions (targeting iOS 14+), and how does this interact with Flutter's background execution handling via the flutter_beacon library?
iOS | 26.3 specific | Google Map hangs after sharing the location to other app which open the location in new app
Device: iPhone 13 Pro Max
iOS Version: iOS 26.3
Google Maps Version: 26.08.2
Steps to Reproduce:
Open Google Maps.
Select any location
Tap Share.
Share the location to another app (e.g., navigation app, co - pilot or any third party apps).
Return to Google Maps.
Expected Result:
Google Maps should continue functioning normally.
Actual Result:
Google Maps becomes unresponsive and hangs.
Topic:
App & System Services
SubTopic:
Maps & Location
Hello,
I’m experiencing an issue with my iOS app that uses CoreBluetooth in combination with beacon monitoring. My app is designed to wake via beacon region monitoring and then start scanning for a specific BLE peripheral (with specific service UUIDs). When the device screen is bright (i.e., the device is unlocked, or locked but the screen is active/bright), everything works perfectly—the connection is established and maintained without any issues in both: foreground and background.
However, when the device is left alone for a while and the lock-screen dims (sleeps), the app continues to run in the background and range the beacon (I can confirm this via realtime console logs), but the connection attempt fails. Here’s what I observe:
The central manager’s delegate method didConnect is called, indicating that the peripheral was connected.
Almost immediately afterward, didDisconnect is triggered with the error message:
"The specified device has disconnected from us.".
The interesting part is (I repeatedly see this error in the console, because the app repeatedly tries to connect to peripheral until a success), when I touch the lockscreen (not unlock, but just touch, which makes the screen to light up brighter), the connection is being established without any further issues!
I have the necessary background modes enabled in the app’s capabilities (e.g., bluetooth-central, location-always-mode, etc..). My expectation was that, thanks to beacon monitoring, the app would be awakened when needed, and scanning/connection would work reliably in the background regardless of whether the device is active or dimmed.
My questions are:
Why might the connection fail with this error when the device is locked/dimmed?
Is this behavior expected due to iOS power management policies even if the app remains active in the background?
Is there a way to ensure a reliable connection in such cases?
Any insights, workarounds, or suggestions would be greatly appreciated. Thank you in advance!
Topic:
App & System Services
SubTopic:
Maps & Location
Tags:
Core Location
Background Tasks
Core Bluetooth
I want to use MapKit with App Intents, but the map does not show up.(See attached image)
Can anyone help me solve this?
import SwiftUI
import MapKit
struct ContentView: View {
@State private var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: 37.334_900,
longitude: -122.009_020),
latitudinalMeters: 750,
longitudinalMeters: 750
)
var body: some View {
VStack {
Map(coordinateRegion: $region).frame(width:300, height:300)
.disabled(true)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import AppIntents
import SwiftUI
import MapKit
struct test20220727bAppIntentsExtension: AppIntent {
static var title: LocalizedStringResource = "test20220727bAppIntentsExtension"
func perform() async throws -> some IntentResult {
return .result(value: "aaa", view: ContentView())
}
}
struct testShortcuts:AppShortcutsProvider{
@available(iOS 16.0, *)
static var appShortcuts: [AppShortcut]{
AppShortcut(
intent: test20220727bAppIntentsExtension(),
phrases: ["test20220727bAppIntentsExtension" ]
)
}
}
Topic:
App & System Services
SubTopic:
Maps & Location
Tags:
App Intents
wwdc2022-10032
wwdc2022-10170
Hello (:
I have a question regarding the current pricing model for Apple Maps APIs, specifically MapKitJS, the Maps Snapshot API, and the Maps Server API. Previously, the documentation and my understanding indicated that the usage limits were defined per day — for example, 250,000 map loads per day for MapKitJS and 25,000 snapshots per day. However, in the Apple Developer Dashboard, I’m now seeing these limits shown on a per-month basis, such as only 25,000 snapshots per-month. This appears to contradict the publicly available information on the official website, which still states daily limits. Has the pricing model officially changed, or is this just a display issue in the dashboard?
I need to know this because we're going into release soon, and then we might have thousands of users.
Topic:
App & System Services
SubTopic:
Maps & Location
Tags:
Maps Web Snapshots
MapKit JS
Apple Maps Server API
Hello (:
I’m working with MapKitJS and would like to render polylines that follow roads — similar to the behavior seen on maps.apple.com. While I can align polylines to roads manually, I haven’t found a way to render them below street names and road shields. Currently, all polylines appear above labels, which reduces readability when displaying routes in urban areas.
On maps.apple.com, polylines are rendered under street labels, which provides a much cleaner appearance. Is there a way to achieve this layering behavior in MapKitJS? If not, are there plans to support this kind of layer control in the future?
Thanks in advance!
MapKitJS (5.45.0):
maps.apple.com:
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.