v11.26.0-rc.1
Mapbox Maps SDK for iOS — 11.26.0-rc.1
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 🏁
-
View annotations can now suppress conflicting map symbols The new experimental
ViewAnnotation.enableSymbolLayerCollisionoption (MapViewAnnotation.enableSymbolLayerCollision()in SwiftUI) registers the annotation's bounding box with the symbol placement engine, so map labels and icons that would overlap it are hidden automatically. By default the full bounding box participates in collision; for non-rectangular annotations, mark the specific subviews that should contribute via the new experimentalUIView.mbxCollisionBox(View.mbxCollisionBox()in SwiftUI). View annotation collision boxes are also drawn whenMapView.debugOptionsincludes.collision. -
Markerautomatically hides symbols beneath itMarkernow enables symbol-layer collision internally, so road names and POI labels that fall under its icon or label text are suppressed without any additional configuration. -
Experimental
Map.viewAnnotationAvoidLayers()A new experimental modifier lets you specify layer IDs whose features the view annotation placement algorithm should avoid, enabling navigation-style use cases where annotations must stay clear of specific rendered layers. -
Per-model light overrides in
ModelSourceModelSourcenow supportslightOverrideson individual 3D models, alongside the existing material and node overrides. This makes it possible to keep a specific model — such as a vehicle puck — clearly visible in night or dark-style maps without changing the global lighting for all models.
Bug fixes 🐞
-
Missing labels on multiline street features The line-merging pass that prepares features for label placement assumed each feature contained a single linestring and silently dropped extra geometry rings. A street that crossed a tile boundary as a multilinestring produced fewer labels than expected. The pass now expands each linestring into its own feature before merging, so every segment is labeled correctly.
-
View annotation placement blocked on short road segments The collision grid used during symbol placement ran at 64×64 cells per tile. On short segments, the coarse cell footprint overstated the occupied area and blocked View Annotation placement even when space was available. The grid now runs at 128×128 cells, which matches the actual geometry much more closely.
-
Worldview filter not applied after switching worldviews at runtime Worldview is now a first-class member of the expression evaluation context rather than a side-channel value. Re-evaluating any property that depends on it after a change now produces the correct filtered result consistently.
-
Different
interpolate zoomexpressions across appearances not rendering correctly When two appearances overrode the same symbol paint property withinterpolate zoomexpressions that had different stop sets, a single shared zoom-factor uniform was used for all of them, producing incorrect output. The renderer now stores a per-feature zoom range in the UBO and derives each feature's interpolation factor independently. -
icon-image-cross-fadenot working for images redefined in appearances Appearance overrides that redefined an image prevented the cross-fade transition from running when the image changed. The transition now applies correctly to images overridden via appearances. -
Elevated symbols not displaying on rotated or pitched maps Symbols with
symbol-z-offsetorsymbol-elevatecould be incorrectly classified as drapable at layout time, causing them to disappear when the map was rotated or pitched. Draping is now disabled for all symbol layers, which matches the expected behavior. -
Location indicator showing pink lines or rotating around the wrong center with non-square images Padding the indicator image to a power-of-two size left uninitialized texture memory around the original, which appeared as pink lines (most visible in Simulator). Separately, the SDK assumed square images when computing the rotation pivot, so non-square images — including the default navigation puck at 64×67 px — rotated around the wrong center. Both issues are fixed.
-
Crash during offline tile decompression Evicting a cached Zstandard frame captured a reference into the front element of an internal queue and then popped the element, leaving the reference dangling. Under sustained eviction pressure, a subsequent read through that reference caused a heap-use-after-free. The entry is now copied by value before the queue is modified.
Performance improvements 🚀
-
Faster TileStore operations on large offline databases Several operations that computed group metadata on every call now cache results across calls. On a database with approximately 1.4 million tiles, operations such as
open,getGroup, andlistGroupsare up to 99% faster, and write operations such assetGroupTilesare 70–94% faster. -
More accurate terrain raycasting The terrain raycast — used for feature queries, camera fitting, and fog — previously tested only four corner samples per leaf in the DEM quad-tree, missing peaks between corners. The raycast now sweeps an 8×8 grid within each leaf and uses accurate min/max values at every mipmap level, so the returned coordinate consistently matches the queried screen position.
Dependencies
- Update MapboxCommon to
24.26.0-rc.1. - Update MapboxCoreMaps to
11.26.0-rc.1.
Dependency requirements:
- Compatible version of Xcode:
26.3
Fetched June 30, 2026
