Features β¨ and improvements π
- Promote Geofencing APIs to stable
- Enhanced Background Monitoring for geofencing:
- Maps SDK now utilizes the region monitor to support geofencing in the background. This improvement allows for more reliable tracking without needing the app to be actively open.
- Introduce
MapInitOptions.mapStyle property. Use it to initialize map with a custom style.
// Before
let options = MapInitOptions(styleURI: .standardSatellite)
let mapView = MapView(frame: view.bounds, mapInitOptions: options)
mapView.mapboxMap.setStyleImportConfigProperties(for: "basemap", configs: ["lightPreset": "dusk"])
// After:
let options = MapInitOptions(mapStyle: .standardSatellite(lightPreset: .dusk))
let mapView = MapView(frame: view.bounds, mapInitOptions: options)
- Add
StyleReloadPolicy to control style reload behavior. Use reloadPolicy: .always parameter in loadStyle() methods or MapStyle initializers to always reload the style even when the URI or JSON matches the currently loaded style. Defaults to .onlyIfChanged for optimal performance.
- Introduce
ScaleBarViewOptions.units property supporting metric, imperial, and nautical units, replacing the boolean useMetricUnits property.
- Add
fuelingStationModePointOfInterestLabels configuration option to Mapbox Standard and Standard Satellite styles. Control the visibility of fuel station and electric charging station POI labels with options: default (shows both), fuel (fuel stations only), electric (charging stations only), or none (hides both).
- Add experimental
scaleFactor parameter to MapOptions and MapSnapshotOptions for scaling icons and texts. Default value is 1.0.
- Add experimental
MapboxMap.setFeatureStateExpression(), removeFeatureStateExpression(), and resetFeatureStateExpressions() APIs to efficiently update feature state for multiple features at once using expressions.
- Introduce experimental support for Appearances. The Appearances layer property defines sets of appearance objects used to quickly change the visual styling of a layer based on a condition using
feature-state. See AppearancesExample for further details.
- Add experimental async variants of
MapboxMap.setLayerProperty(), setLayerProperties and updateLayer().
line-emissive-strength property is now data-driven, allowing different road types to be rendered in a single layer for improved performance
- Promote
ModelLayer to stable.
- Add
SymbolLayer.occlusionOpacityMode, SymbolLayer.iconColorBrightnessMax, SymbolLayer.iconColorBrightnessMin, SymbolLayer.iconColorContrast properties.
- Add
FillExtrusionLayer.castShadows property.
- Add
GeoJSONSource.minZoom property.
- Add
RasterArraySource.volatile experimental property.
- Enable use of MapboxCommon's location manager in MapView.
- Support custom offline TTL header
Bug fixes π
- Fix an issue where the location indicator could show incorrect direction in landscape orientation.
- Fix custom layer rendering crash
- Fix feature state clean up when feature state expressions are used
- Fix crash in config-dependent interpolate expression on style switching
- Fix for model manager deleting renderer resources on custom thread
- Fix config expression evaluation to properly check dependencies in nested value expressions
- Reset style lights when switching to a new style
- Fix crash in
OrnamentsManager when setting attribution color.
- Fix terrain crash on style switches.
- Fix line patterns not elevating properly on HD roads.
- Fix uint underflow in work limiting scheduler.
- Fix rendering artefacts when persistent buffer mapping is enabled
- Fix view-aligned symbols with road elevation being cutout
Optimizations and enhancements π
- Optimized shadow rendering by limiting extra tile requests to zoom levels 16 and above, improving performance at zoom 15
- Optimized fill-extrusion rendering at zoom 17-22 by preventing bucket overscaling, significantly reducing tile cache evictions and CPU overhead
- Cleanup GeometryCollection usage in favor of FlatGeometries
- Implement zoom expression evaluation for
line-cutout-width.
- Procedural building optimisations
- Fix GeoJSON tiled model disappearance in fast zoom situations.
- Fix user data handling in GeoJSON source with shared cache
- Optimize memory usage in GridIndex and related code.
- Memory improvements for vertex buffers.
- Avoid extra allocations in Formatted objects.
- Logging improvements to reduce duplication.
Dependencies
- Update MapboxCommon to
24.17.0.
- Update MapboxCoreMaps to
11.17.0.
Dependency requirements:
- Compatible version of Xcode:
16.2