v11.24.1
Features β¨ and improvements π
- Featureset feature access
Exposed the newFeaturesetFeature.originalFeatureproperty, giving you direct access to the underlying publicFeature(geometry, properties, id) from any featureset hit. - Landmark Level-of-Detail rendering
The renderer now supports landmark models with LOD meshes when the tileset provides them, including a BVH-backed raycast path for more accurate label placement on top of 3D buildings.
Bug fixes π
- Use-after-free crash in
MapImpl
MapImpl's destructor previously invalidated theWeakFactoryof its derivedStyleManagerImplbut not its own, leaving a short window where in-flight asynchronous tasks could touch a partially destroyed instance. The ownWeakFactoryis now invalidated as well, eliminating the crash. MapViewrendered blank on an already-active CarPlay scene
When a freshMapViewwas instantiated and attached to a scene that had already activated (a common pattern on CarPlay), the SDK missed thesceneDidActivatenotification and never cached the connected scene β leaving the display link idle and the map blank. The connected scene is now seeded ondidMoveToWindowby walking up the responder chain, so the map renders correctly regardless of when it joins the scene.- Style import config lost during a URL swap
CallingsetStyleImportConfigProperty(e.g.lightPreset, color overrides) right afterupdateStyleImportWithURIcould be silently dropped: the property was being applied to the soon-to-be-replaced import. Imports are now updated in place β the sameImportobject stays in the imports vector while only its internalStyle::Implis swapped β so config updates always land on the correct import. Observer callbacks (onStyleLoadingFinished, etc.) are also wired up only after the import is fully integrated, removing inconsistent intermediate states. - Crash in
VectorTileLayerDatacache when a sibling tile died mid-iteration
The cache reuses siblingVectorTileLayerDatainstances (same data/layer, different offset) to avoid redundant parsing. It used to keep the sibling as a raw pointer; if the tile that owned that sibling was destroyed before the copy completed, the pointer dangled and dereferencing it crashed. Siblings are now retained viashared_ptrfor the duration of the copy. applyLUTproduced incorrect colors with premultiplied input
applyLUTwas using the RGB channels of the input color as-is. Since input colors are essentially always premultiplied, RGB channels are scaled by alpha, so the LUT was being sampled at the wrong coordinates β producing dimmer-than-expected output. The lookup now operates in unpremultiplied color space.
Dependencies
- Update MapboxCommon to
24.24.1. - Update MapboxCoreMaps to
11.24.1.
Dependency requirements:
- Compatible version of Xcode:
16.4
Fetched May 19, 2026
