v11.4.0
Note
Live performance metrics collection. Mapbox Maps SDK v11.4.0 collects certain performance and feature usage counters so we can better benchmark the MapboxMaps library and invest in its performance. The performance counters have been carefully designed so that user-level metrics and identifiers are not collected.
Experimental API breaking changes ⚠️
In this release, we introduce the new Declarative Styling API for UIKit and SwiftUI. This change is based on MapContent
introduced for SwiftUI; therefore, it has been restructured. The changes are compatible; however, in some rare cases, you may need to adjust your code.
by @persidskiy, @pjleonard37, & @aleksproger
- [SwiftUI]
MapContent
now supports custom implementations, similar to SwiftUI views. TheMapContent
protocol now requires thevar body: some MapContent
implementation. - [SwiftUI] PointAnnotation and Puck3D property-setters that consumed fixed-length arrays reworked to use named properties or platform types for better readability:
// Before
PointAnnotation()
.iconOffset([10, 20]) // x, y
.iconTextFitPadding([1, 2, 3, 4]) // top, right, bottom, left
Puck3D()
.modelScale([1, 2, 3]) // x, y, z
// After
PointAnnotation()
.iconOffset(x: 10, y: 20)
.iconTextFitPadding(UIEdgeInsets(top: 1, left: 4, bottom: 3, right: 2))
Puck3D()
.modelScale(x: 1, y: 2, z: 3)
-
StyleImportConfiguration
was removed from public API, theMapStyle
now contains the configuration directly. -
TransitionOptions
is now a Swiftstruct
rather than an Objective-Cclass
. -
All the style primitives can now be used as
MapContent
in SwiftUI.
@_spi(Experimental) MapboxMaps
Map {
LineLayer(id: "traffic")
.lineColor(.red)
.lineWidth(2)
}
by @aleksproger
- UIKit applications can now use the
setMapStyleContent
to use style primitives:
@_spi(Experimental) MapboxMaps
mapView.mapboxMap.setMapStyleContent {
LineLayer(id: "traffic")
.lineColor(.red)
.lineWidth(2)
}
by @persidskiy
Features ✨ and improvements 🏁
- Allow to assign slot to 2D and 3D location indicators. by @persidskiy
- Allow observing start/stop event of
CameraAnimator
. by @maios
You can observe start/stop event ofCameraAnimator
by using newCameraAnimationsManager
APIs as shown belowYou can also observe directly on an instance of// Observe start event of any CameraAnimator owned by AnimationOwner.cameraAnimationsManager mapView.camera .onCameraAnimatorStarted .owned(by: .cameraAnimationsManager) .observe { cameraAnimator in // Handle camera animation started here. } .store(in: &cancelables) // Observe finished events of any CameraAnimator mapView.camera .onCameraAnimatorFinished .observe { animator in // Handle camera animation stopped here. } .store(in: &cancelables)
CameraAnimator
when using low-level camera APIs to create a custom animator// Declare an animator that changes the map's bearing let bearingAnimator = mapView.camera.makeAnimator(duration: 4, curve: .easeInOut) { (transition) in transition.bearing.toValue = -45 } bearingAnimator.onStarted.observe { // Bearing animator has started. }.store(in: &cancelables)
- Allow adding slots at runtime. by @aleksproger
- Expose API to interact with style imports using Declarative Styling and regular imperative API. by @aleksproger
- Expose
StyleImport
for declarative styling asMapStyleContent
. by @aleksproger - Expose
removeStyleImport
,moveStyleImport
,updateStyleImport
,addStyleImport
methods onStyleManager
by @aleksproger - Allow assigning layerPosition to 2D and 3D location indicators in imperative API. by @aleksproger
- Make Puck2D and Puck3D to be positioned according to relative layer position in declarative API instead of always top-most position. by @aleksproger
- Add codesign for XCFrameworks. by @OdNairy
MapboxMap.loadStyle()
andSnapshotter.loadStyle()
now correctly call thecompletion
closure. @persidskiy- Expose experimental
RasterParticleLayer
which is suitable for displaying precipitation or wind on the map @aleksproger - Obsoleted camera(for:) methods deprecation @aleksproger
- Expose the list of added
ViewAnnotation
@maios
Dependencies
Dependency requirements:
- Compatible version of Xcode:
15.2.0