Skip to content

Releases: mapbox/mapbox-maps-ios

v10.18.1

31 May 12:25
Compare
Choose a tag to compare

Bug fixes 🐞

  • Fix a bug when billing event can be retried endlessly with 0 timeout in case network returns error.

Dependencies

Dependency requirements:

  • Compatible version of Xcode: 14.1.0

v10.18.0

23 May 09:42
Compare
Choose a tag to compare

Bug fixes 🐞

  • Fixed invalid circle order while using circle-sort-key. Fixed duplicate circles in static viewport mode.
  • Fixed a crash during style change.

Dependencies

Dependency requirements:

  • Compatible version of Xcode: 14.1.0

v11.4.0

22 May 16:09
Compare
Choose a tag to compare

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. The MapContent protocol now requires the var 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, the MapStyle now contains the configuration directly.

  • TransitionOptions is now a Swift struct rather than an Objective-C class.

  • 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 of CameraAnimator by using new CameraAnimationsManager APIs as shown below
    // 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)
    You can also observe directly on an instance of 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 as MapStyleContent. by @aleksproger
  • Expose removeStyleImport, moveStyleImport, updateStyleImport, addStyleImport methods on StyleManager 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() and Snapshotter.loadStyle() now correctly call the completion 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

  • Update MapboxCommon to 24.4.0.
  • Update MapboxCoreMaps to 11.4.0

Dependency requirements:

  • Compatible version of Xcode: 15.2.0

v11.4.0-rc.2

15 May 11:49
Compare
Choose a tag to compare
v11.4.0-rc.2 Pre-release
Pre-release

⚠️ Known Issues ⚠️

  • Setting a RasterLayer’s rasterColor 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

08 May 14:35
Compare
Choose a tag to compare
v11.4.0-rc.1 Pre-release
Pre-release

⚠️ Known Issues ⚠️

  • Setting a RasterLayer’s rasterColor 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

06 May 11:05
Compare
Choose a tag to compare
v11.4.0-beta.3 Pre-release
Pre-release

⚠️ Known Issues ⚠️

  • Setting a RasterLayer’s rasterColor 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

02 May 12:12
Compare
Choose a tag to compare
v11.4.0-beta.2 Pre-release
Pre-release

Changes

  • MapboxMap.loadStyle() and Snapshotter.loadStyle() behaviour is rolled back to pre 11.4.0-beta.1 state by @persidskiy

⚠️ Known Issues ⚠️

  • Setting a RasterLayer’s rasterColor property with an expression will block the layer from rendering. This issue will be resolved in v11.4.0-rc.1.

Dependencies

Dependency requirements:

  • Compatible version of Xcode: 15.2.0

v11.4.0-beta.1

25 Apr 01:25
Compare
Choose a tag to compare
v11.4.0-beta.1 Pre-release
Pre-release

Changes

⚠️ Known Issues ⚠️

  • In v11.4.0-beta.1, setting a RasterLayer’s rasterColor 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. The MapContent protocol now requires the var 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, the MapStyle now contains the configuration directly.
  • TransitionOptions is now a Swift struct rather than an Objective-C class.

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 of CameraAnimator by using new CameraAnimationsManager APIs as shown below
    // 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)
    You can also observe directly on an instance of 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 as MapStyleContent. by @aleksproger
  • Expose removeStyleImport, moveStyleImport, updateStyleImport, addStyleImport methods on StyleManager 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() and Snapshotter.loadStyle() now correctly call the completion closure. @persidskiy

Dependencies

Dependency requirements:

  • Compatible version of Xcode: 15.2.0

Maps SDK v11.3.0

11 Apr 10:30
Compare
Choose a tag to compare

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 🏁

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 and MapViewAnnotation (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

  • Update MapboxCoreMaps to 11.3.0.
  • Update MapboxCommon to 24.3.1.

Dependency requirements:

  • Compatible version of Xcode: 15.2.0

v10.17.0

03 Apr 12:13
Compare
Choose a tag to compare

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