Releases: mapbox/mapbox-maps-ios
v10.18.0
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
v11.4.0-rc.2
⚠️ Known Issues ⚠️
- Setting a
RasterLayer
’srasterColor
property with an expression will block the layer from rendering. This issue will be resolved in stable v11.4.0.
Changes
- Fix overlapping parent tile rendering in raster-particle layer.
Dependencies
- Update MapboxCommon to
24.4.0-rc.2
. - Update MapboxCoreMaps to
11.4.0-rc.2
Dependency requirements:
- Compatible version of Xcode:
15.2.0
v11.4.0-rc.1
⚠️ Known Issues ⚠️
- Setting a
RasterLayer
’srasterColor
property with an expression will block the layer from rendering. This issue will be resolved in stable v11.4.0.
Changes
- 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 - Live performance metrics collection. Mapbox Maps SDK v11.4.0-rc.1 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.
Dependencies
- Update MapboxCommon to
24.4.0-rc.1
- Update MapboxCoreMaps to
11.4.0-rc.1
Dependency requirements:
- Compatible version of Xcode:
15.2.0
v11.4.0-beta.3
⚠️ Known Issues ⚠️
- Setting a
RasterLayer
’srasterColor
property with an expression will block the layer from rendering. This issue will be resolved in v11.4.0-rc.1.
Dependencies
- Update MapboxCommon to
24.4.0-beta.3
.
Dependency requirements:
- Compatible version of Xcode:
15.2.0
v11.4.0-beta.2
Changes
MapboxMap.loadStyle()
andSnapshotter.loadStyle()
behaviour is rolled back to pre 11.4.0-beta.1 state by @persidskiy
⚠️ Known Issues ⚠️
- Setting a
RasterLayer
’srasterColor
property with an expression will block the layer from rendering. This issue will be resolved in v11.4.0-rc.1.
Dependencies
- Update MapboxCommon to 24.4.0-beta.2.
- Update MapboxCoreMaps to 11.4.0-beta.2.
Dependency requirements:
- Compatible version of Xcode:
15.2.0
v11.4.0-beta.1
Changes
- In v11.4.0-beta.1, setting a
RasterLayer
’srasterColor
property with an expression will block the layer from rendering. This issue will be resolved in v11.4.0-rc.1.
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
.
Features ✨ and improvements 🏁
- 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
- 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
Dependencies
- Update MapboxCommon to 24.4.0-beta.1.
- Update MapboxCoreMaps to 11.4.0-beta.1.
Dependency requirements:
- Compatible version of Xcode:
15.2.0
Maps SDK v11.3.0
Note
This release contains fixes to the Privacy Manifest. Upgrade to avoid issues in the App Store app submission starting from May 1st.
Features ✨ and improvements 🏁
- Swift 5.9 is a new minimum version for Maps SDK 11.3.0 (by @OdNairy).
- 🆕 Annotation drag handler callbacks (
dragBeginHandler
,dragChangeHandler
,dragEndHandler
) - (54ad83e by @paulsUsername, @persidskiy). - 🆕 Tap and long press gesture handlers for point annotation clusters (fc950cc by @aleksproger):
onClusterTap
andonClusterLongPress
toAnnotationManagers
(UIKit)onClusterTapGesture
andonClusterLongPressGesture
forPointAnnotationGroup
(SwiftUI)
- [SwiftUI] Expose the
captureSnapshot
onMapProxy
which allows to capture SwiftUI Map snapshot usingMapReader
(f8075af by @aleksproger). - [SwiftUI] Expose
opaque
andframeRate
on SwiftUI Map (f8075af by @aleksproger). - [SwiftUI] Add
allowHistTesting
modifier onMapViewAnnotation
(4709720 by @aleksproger). - [SwiftUI] Fix view annotations positioning on
.ignoresSafeArea(.all)
(4c05abe by @aleksproger). - Add
includeOverlays
parameter toMapView.snapshot()
(f8075af by @aleksproger). - 🆕 Download and Storage size estimation APIs for tile regions (29db563 by @tatiana-yan).
- Added Belarusian localization (af97247 by @kiryldz, @aleksproger).
- Added Attribution and Telemetry pop-up dialogs and compass view content description translations for Arabic, Belarusian, Bulgarian, Catalan, Chinese Simplified, Chinese Traditional, Czech, Danish, Dutch, French, Galician, German, Hebrew, Italian, Japanese, Korean, Lithuanian, Norwegian, Polish, Belarusian, Russian, Spanish, Swedish, Ukrainian and Vietnamese (186c6fd by @evil159, @aleksproger).
- [offline] Now the composited tile payload will include parent tile data from the tile pack in cases where the ideal zoom component is missing.
- [tile_store] Enable delta updates by default for Maps domain (by @tatiana-yan ).
Bug fixes 🐞
- Fix the issue with invalid privacy manifest #2145
- Fix offline tiles fetching regression introduced in the 11.3.0-beta.1
- Fix a crash that could occur on Metal when the texture object would outlive the renderer
- Fix a bug where specifying a large negative value for padding resulted in the returned zoom value being NaN
- Fix location indicator models rendering issue with globe projection
- Fix taps propagation on
ViewAnnotation
andMapViewAnnotation
(4709720 by @aleksproger). - Fix layer paint property update with feature state changes, especially if the paint property value data-driven by brightness or zoom
- Fix snapshotter race conditions to ensure new request could effectively trigger map rendering
- Fix raster array band updates glitches during the camera zoom animation
- Reload vector source tiles when language or worldview setting is changed.
- Apply config expression to atmosphere properties.
- Fix map freezing when using queryRenderedFeatures with 3d models in mercator projection
- Reduce time spent on line gradient updates on the render thread
- [reachability] Fix reachability status getting stuck with ReachableViaWWAN status if HTTP requests completed at the same time as network reported being disconnected
Dependencies
Dependency requirements:
- Compatible version of Xcode:
15.2.0
v10.17.0
Note
This release contains fixes to the Privacy Manifest. Upgrade to avoid issues in the App Store app submission starting from May 1st.
Bug fixes 🐞
- Fix the issue with invalid privacy manifest #2145
Dependencies
- Update MapboxCommon to
23.9.2
. - Update MapboxCoreMaps to
10.17.0
:
Dependency requirements:
- Compatible version of Xcode:
14.1.0
v11.3.0-rc.1
Known Issues ⚠️
- The tiles fetching from the offline database is malfunctioning for the composited sources. Setting "com.mapbox.maps.experimental.offline_vt_compositing" runtime settings flag to false resolves this issue
let settings = SettingsServiceFactory.getInstance(storageType: .nonPersistent) // Storage type must be nonPersistent
settings.set(key: "com.mapbox.maps.experimental.offline_vt_compositing", value: false)
Features ✨ and improvements 🏁
- [tile store] Expose API for estimating Tile Region downloads and storage size, by @tatiana-yan (29db563)
- [offline] Now the composited tile payload will include parent tile data from the tile pack in cases where the ideal zoom component is missing
Bug fixes 🐞
- Fix a crash that could occur on Metal when the texture object would outlive the renderer
- Fix a bug where specifying a large negative value for padding resulted in the returned zoom value being NaN
- Fix location indicator models rendering issue with globe projection
- Fix the issue with invalid privacy manifest #2145
Dependencies
- Update MapboxCommon to
24.3.0-rc.1
- Update MapboxCoreMaps to
11.3.0-rc.1
Dependency requirements:
- Compatible version of Xcode:
15.2.0