releases.shpreview

v11.24.1

Features ✨ and improvements 🏁

  • Featureset feature access
    Exposed the new FeaturesetFeature.originalFeature property, giving you direct access to the underlying public Feature (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 the WeakFactory of its derived StyleManagerImpl but not its own, leaving a short window where in-flight asynchronous tasks could touch a partially destroyed instance. The own WeakFactory is now invalidated as well, eliminating the crash.
  • MapView rendered blank on an already-active CarPlay scene
    When a fresh MapView was instantiated and attached to a scene that had already activated (a common pattern on CarPlay), the SDK missed the sceneDidActivate notification and never cached the connected scene β€” leaving the display link idle and the map blank. The connected scene is now seeded on didMoveToWindow by 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
    Calling setStyleImportConfigProperty (e.g. lightPreset, color overrides) right after updateStyleImportWithURI could be silently dropped: the property was being applied to the soon-to-be-replaced import. Imports are now updated in place β€” the same Import object stays in the imports vector while only its internal Style::Impl is 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 VectorTileLayerData cache when a sibling tile died mid-iteration
    The cache reuses sibling VectorTileLayerData instances (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 via shared_ptr for the duration of the copy.
  • applyLUT produced incorrect colors with premultiplied input
    applyLUT was 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