v11.25.0
Note
Mapbox will end support for CocoaPods in December 2026. After that date, new versions of the Mapbox Maps SDK for iOS will not be published to CocoaPods. We recommend installing the SDK via Swift Package Manager to continue receiving updates.
Features ✨ and improvements 🏁
-
Indoor labels in the Mapbox Standard style The Mapbox Standard style now exposes an
IndoorLabelsfeatureset together with new configuration options:showIndoor,showIndoorLabels,colorIndoorLabelHighlight, andcolorIndoorLabelSelect. Use them to display indoor venue labels and to highlight or select an indoor label through the standard interactions API. -
Custom vertical field of view in
CameraOptionsCameraOptionsnow includes averticalFovproperty, so you can set a custom vertical field of view when you callsetCamera,easeTo, orflyTo. DuringflyTo, the field of view interpolates linearly and does not take part in the optimal-path animation. Changing the field of view also changes the camera distance, which matches the behavior of Mapbox GL JS. -
Color string literals in
interpolateexpressions You can now use color string literals such as"red"or"#ff0000"as inputs to aninterpolateexpression. These strings raised an error before. This change brings the expression parser in line with Mapbox GL JS. -
line-progressinput forline-emissive-strengthline-emissive-strengthnow accepts aline-progressinput, so you can vary the emissive strength of a line along its length — for example, to fade a route line toward its destination. -
Client-side conflation of standard-definition and high-definition roads The renderer can now conflate standard-definition (SD) and high-definition (HD) road and traffic data on the client. Where HD road coverage is available, the matching SD roads and traffic fade out through a stencil-masked transition with a configurable opacity fade, so the two datasets no longer draw on top of each other. The behavior is driven by style configuration and needs no API changes.
-
Sharper anti-aliasing for lines with borders Lines that have a border (a non-zero
line-border-width) now use distance-based, pixel-perfect anti-aliasing on their outset and inset edges. Line edges and non-zero gap widths also render more accurately. This change affects only bordered lines. -
Zstandard compression for tile store packages Tile store import packages now support seekable Zstandard (zstd) compression. Compressing a package that contains the Mapbox Standard style reduces its size from about 109 MB to about 51 MB, which lowers the download and storage cost of offline maps.
Bug fixes 🐞
-
Taps on view annotations no longer fall through to the map A tap on a view annotation also reached the underlying
MapView, which could dismiss the annotation it had opened. The map view no longer receives a tap that a view annotation has already handled. -
Hardened parsing of source attribution strings Source
attributionstrings arrive from per-source TileJSON and are operator-controlled. The SDK previously parsed them withNSAttributedString's HTML importer, which could silently fetch remote subresources (such as<img>,<link>, or CSSurl()references) embedded in those strings. Attribution markup is now extracted with a restricted in-process parser, and onlyhttpandhttpsURLs are surfaced as actionable links. -
Map flicker from background shader compilation The background shader compiler did not populate the binary shader cache, so the cache stayed empty and every shader was compiled in the background again. This produced flickering. The compiler now writes to the binary cache, which removes the repeated compilation and the flicker.
-
Crash while iterating map interactions An interaction callback that removed an interaction during dispatch could invalidate the iterator the SDK was using and crash. Interaction dispatch now holds a strong reference to the handler and guards against iterator invalidation.
-
Missing letters in text labels on terrain-elevated lines Letters in the middle of a text label placed along a line could disappear when the line was elevated by terrain. The SDK no longer truncates map-aligned text along a line, which matches Mapbox GL JS, so the full label renders.
-
Appearance conditions that use
zoomno longer fail to parse An appearance condition that combined a feature test with a["zoom"]expression — for example, inside an["all", ...]condition — failed to parse on iOS and produced an empty result, even though the same condition worked in Mapbox GL JS. These conditions now parse and render correctly. -
Crash from a null index buffer during symbol rendering Rendering certain symbol layers could dereference a null index buffer and crash when a symbol bucket neither requested a shared index buffer nor generated its own. The SDK now requests a shared index buffer in this case.
-
Crash when overriding terrain was merged with another source Enabling terrain could crash when the overriding terrain was merged with another source from the same root style. The merge no longer crashes.
-
Process termination from uncaught SQLite "busy" exceptions Accessing persistent storage from more than one thread could throw an uncaught
SQLITE_BUSYexception and terminate the process. The SDK now reuses an existing connection per database, applies a short busy timeout that retries a transient lock, and handles the exception around the affected statements. -
Crash when an HTTP download was aborted mid-transfer Aborting an HTTP download left its output stream callback empty while a late data chunk could still arrive, which threw
std::bad_function_calland terminated the process. The SDK now resets the download streams before it clears the callback. -
Crash when an HTTP tile download could not create a temporary file A failure to create the temporary directory for a tile download raised a filesystem error that escaped into the network callback and terminated the process. The SDK now handles the error and aborts the download cleanly.
-
TileStore migration failures from duplicate resources Migrating a TileStore database from schema 9 to schema 10 could fail when converting resource URLs to the canonical
mapbox://form produced a collision, which left the TileStore unusable and forced navigation into fallback mode. The migration now ignores duplicate resources and completes. -
Dropped tile store cache updates from a SQLite lock race Concurrent read and write TileStore connections that shared an in-memory cache table could trip a
SQLITE_LOCKEDerror while tracking least-recently-used access, which silently dropped cache updates. The SDK now tracks least-recently-used access on a dedicated auto-commit connection, so the lock releases immediately.
Dependencies
- Update MapboxCommon to
24.25.0. - Update MapboxCoreMaps to
11.25.0.
Dependency requirements:
- Compatible version of Xcode:
16.4
Fetched June 12, 2026
