Releases: mapbox/mapbox-maps-ios
v10.3.0-beta.1
Dependency requirements:
- Compatible version of MapboxCoreMaps:
10.3.0-beta.1 - Compatible version of MapboxCommon:
21.1.0-beta.1 - Compatible version of Xcode:
- Compatible version of macOS:
Changes
- Exposed
triggerRepaint()to allow manual map repainting.
(#964) - Exposed
TransitionOptionsto allow control over symbol fade duration.
(#902) - Added
Style.removeTerrain()to allow removing terrain. (#918) Snapshotterinitialization now triggers a turnstyle event. (#908)- Fixed a bug where 2D puck location was never set when location accuracy authorization was reduced. (#989)
- Fixed a bug where setting LocationManager.options would cause the LocationProvider to be reconfigured. (#992)
- Added Viewport API. (#996)
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.3.0-beta.1/MapboxMaps.zip?access_token=<access-token>
v10.2.0
Dependency requirements:
- Compatible version of MapboxCoreMaps:
v10.2.0 - Compatible version of MapboxCommon:
v21.0.1 - Compatible version of Xcode:
12.5
Changes
View Annotations
- Introduces UIView-based annotation API. (#776, #846, #861)
- To try it out, use the methods on MapView.viewAnnotations.
Annotations
- Optimizes tap handling performance by doing a single call to
queryRenderedFeaturesinAnnotationOrchestrator, rather than in each annotation manager. (#840)
Gestures
- Panning behavior on pitched maps has been improved. Panning no longer begins while the touch location is above the horizon, deceleration is disabled if the pan ends above the horizon, and the implementation of pan deceleration has been updated to avoid the sensitive portion of the map near the horizon. These changes help to reduce the incidence of the map moving unexpectedly far when flinging toward the horizon. (#888)
- Additionally, the drag sensitivity around and above the horizon has been reduced. (#891)
- There is a new experimental configuration option that addresses #775. However, it is off by default because it introduces the new issue #864. We plan to continue investigating solutions that will solve both issues.
Style
Style.localizeLabels(into:forLayerIds:)has been updated to only localize the primary localization and not the fall-through localizations. (#856)StyleColorcan now correctly deserialize rgba CSS colors that contain components with exponents. (#873)- The persistent layer APIs are no longer marked as experimental. In previous releases, import statements needed to be annotated with
@_spi(Experimental)to expose these APIs. As of this release, that is no longer necessary. (#849)
Telemetry
- The attribution dialog now reflects telemetry opt-in-out status correctly at first appearance. (#865).
Camera
- Fixed an issue where camera animations triggered with
startAnimation(afterDelay:)could appear jerky after a pan gesture. (#789)
Location
- Refactors location-related components for increased testability and reliability. (#765)
Location.locationis now public to allow access to the underlyingCLLocationvalue.Location.accuracyAuthorizationhas been added.Location.init(location:heading:accuracyAuthorization:)has been added. Prefer this initializer over the olderinit(with:heading:)when creating instances ofLocationStyle'sinternal func addPersistentLayer(_ layer: Layer, layerPosition: LayerPosition? = nil) throwsis now@_spi(Experimental) publicLocationManger.consumersnow returns a copy of the underlying hash table. Previously, the actual instance was returned which allowed consuming code to modify theLocationManager's internal state.LocationPermissionsDelegatenow relays errors from the underlying location providerLocationManager.updateHeadingForCurrentDeviceOrientation()no longer has any effect (what it did previously is now handled automatically)- Heading updates that arrive prior to a location update are now stored and delivered to
LocationConsumers as soon as a location is available. LocationConsumers now receive a newLocationwhen the accuracy authorization changes.LocationManager's implementation of theLocationProviderDelegateprotocol now does nothing. The internalLocationProduceris now theLocationProviderDelegate- When a custom location provider is set on
LocationManager, an instance ofEmptyLocationProviderDelegateis set as the delegate of the old location provider as a defensive measure to avoid receiving any further delegate messages from the old provider. It would have been preferable to set the location provider's delegate to nil, but the protocol does not allow it and cannot be changed in a non-breaking way. LocationManager(viaLocationProducer) now starts & stops updating on the location provider based on whether there are any consumers. It handles the case where the final consumer is deinited (since it only holds weak references to them) by stopping the updating as soon as the next location provider delegate method is invoked.
Dependencies
- Updates MapboxCoreMaps to v10.2.0. (#952)
- Features ✨ and improvements 🏁
- Add heatmap layer support to globe view
- Improve performance for querying large number of features
- Cache layer layout key inside layer, so that it is not re-evaluated at every parse of the every tile
- Load Gltf external files
- Add cancelable QRF API to the Map interface
- Core renderer prints its version on initialization
- Introduce experimental Map.setMemoryBudget method for setting memory budget for a Map and runtime "resource-budget" property for data sources
- Reduce memory consumption of a model layer by avoiding duplicate texture uploads
- Add circle layer support to globe
- Introduce ViewAnnotation API and corresponding support in gl-native
- Bug fixes 🐞
- Reduces drag sensitivity around and above horizon
- Release all unused resources when
Map.reduceMemoryUseis invoked - Fix crash for the case when an empty fill extrusion bucket is tried to be rendered
- Fix transparency with value<0.5 in models
- Fix regression where setting the same geojson source URL did not refresh the data
- Fix symbol layers with variable anchor placement not being placed correctly on globe view
- Fix crash in symbol reprojection code caused by division by zero
- Fix issue with bounds constraining behavior when terrain is enabled
- Features ✨ and improvements 🏁
- Updates MapboxCommon to v21.0.1. (#952)
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.2.0/MapboxMaps.zip?access_token=<access-token>
v10.1.2
Dependency requirements:
- Compatible version of MapboxCoreMaps: v10.1.1
- Compatible version of MapboxCommon: v20.1.2
- Compatible version of Xcode: 12.5+
Changes
Updates MapboxCommon to v20.1.2 to fix a billing issue when upgrading from v6 to v10. This patch replaces the previous patch that was released (and subsequently recalled) as v10.1.1. #943
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.1.2/MapboxMaps.zip?access_token=<access-token>
v10.0.3
Dependency requirements:
- Compatible version of MapboxCoreMaps: v10.0.0
- Compatible version of MapboxCommon: v20.0.3
- Compatible version of Xcode: v12.5+
Changes
Updates MapboxCommon to v20.0.3 to fix a billing issue when upgrading from v6 to v10. This patch replaces the previous patch that was released (and subsequently recalled) as v10.0.2. #942
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.0.3/MapboxMaps.zip?access_token=<access-token>
v10.2.0-rc.1
Dependency requirements:
- Compatible version of MapboxCoreMaps: v10.2.0-rc.1
- Compatible version of MapboxCommon: v21.0.0-rc.2
- Compatible version of Xcode: Tested with Xcode 12.5 and 13.1
- Compatible version of macOS: Tested with version 11.6.1
Changes
View Annotations
Gestures
- Panning behavior on pitched maps has been improved. Panning no longer begins while the touch location is above the horizon, deceleration is disabled if the pan ends above the horizon, and the implementation of pan deceleration has been updated to avoid the sensitive portion of the map near the horizon. These changes help to reduce the incidence of the map moving unexpectedly far when flinging toward the horizon. (#888)
- Additionally, the drag sensitivity around and above the horizon has been reduced. (#891)
- v10.2.0-beta.1 introduced an updated pinch gesture implementation to address #775, but this change introduced a new issue #864. Additionally, the overall feel of the gesture was not as smooth. The default behavior has been reverted to match v10.1, but the v10.2.0-beta.1 behavior is still available as an experimental configuration option. (#890)
Location Puck
- v10.2.0-beta.1 introduced a regression that prevented the location puck from appearing when a location permission request was required. (#862)
Persistent Layer APIs
- The persistent layer APIs are no longer marked as experimental. In previous releases, import statements needed to be annotated with
@_spi(Experimental)to expose these APIs. As of this release, that is no longer necessary. (#849)
Style
Style.localizeLabels(into:forLayerIds:)has been updated to only localize the primary localization and not the fall-through localizations. (#856)StyleColorcan now correctly deserialize rgba CSS colors that contain components with exponents. (#873)
Telemetry
- The attribution dialog now reflects telemetry opt-in-out status correctly at first appearance. (#865)
Direct Download
- This release fixes a bug that prevented experimental APIs from being available to developers who integrated the SDK via the direct download option. (#854)
- It also prevents a swiftlint config file from being included as a bundled resource in the XCFramework. (#859)
Dependencies
- MapboxCoreMaps has been updated to v10.2.0-rc.1 and MapboxCommon has been updated to v21.0.0-rc.2. (#891)
- Reverts "Improve performance by avoiding re-layout of invisible fading tiles" because it caused regression on globe view projection zooming in/out.
- Reduces drag sensitivity around and above horizon.
Direct Download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.2.0-rc.1/MapboxMaps.zip?access_token=<access-token>
v10.2.0-beta.1
Dependency requirements:
- Compatible version of MapboxCoreMaps: 10.2.0-beta.1
- Compatible version of MapboxCommon: 21.0.0-rc.1
- Compatible version of Xcode: Tested with Xcode 12.5 and 13.1
- Compatible version of macOS: Tested with macOS 11.6
Changes
- Introduces UIView-based annotation API. (#776)
- This feature is still in development, and the API is expected to change in the next prerelease.
- To try it out, use the methods on
[MapView.viewAnnotation](https://docs.mapbox.com/ios/maps/api/10.2.0-beta.1/Classes/ViewAnnotationManager.html).
- Fixed an issue where camera animations triggered with
startAnimation(afterDelay:)could appear jerky after a pan gesture. (#789) - Refactors location-related components for increased testability and reliability. (#765)
Location.locationis now public to allow access to the underlyingCLLocationvalue.Location.accuracyAuthorizationhas been added.Location.init(location:heading:accuracyAuthorization:)has been added. Prefer this initializer over the olderinit(with:heading:)when creating instances ofLocationStyle'sinternal func addPersistentLayer(_ layer: Layer, layerPosition: LayerPosition? = nil) throwsis now@_spi(Experimental) publicLocationManger.consumersnow returns a copy of the underlying hash table. Previously, the actual instance was returned which allowed consuming code to modify theLocationManager's internal state.LocationPermissionsDelegatenow relays errors from the underlying location providerLocationManager.updateHeadingForCurrentDeviceOrientation()no longer has any effect (what it did previously is now handled automatically)- Heading updates that arrive prior to a location update are now stored and delivered to
LocationConsumers as soon as a location is available. LocationConsumers now receive a newLocationwhen the accuracy authorization changes.LocationManager's implementation of theLocationProviderDelegateprotocol now does nothing. The internalLocationProduceris now theLocationProviderDelegate- When a custom location provider is set on
LocationManager, an instance ofEmptyLocationProviderDelegateis set as the delegate of the old location provider as a defensive measure to avoid receiving any further delegate messages from the old provider. It would have been preferable to set the location provider's delegate to nil, but the protocol does not allow it and cannot be changed in a non-breaking way. LocationManager(viaLocationProducer) now starts & stops updating on the location provider based on whether there are any consumers. It handles the case where the final consumer is deinited (since it only holds weak references to them) by stopping the updating as soon as the next location provider delegate method is invoked.
- Fixes an issue where
cameraChangedevents during pan and pinch gestures would repeatedly emit the initial camera state, interleaved with the updated state. (#837) - Optimizes tap handling performance by doing a single call to
queryRenderedFeaturesinAnnotationOrchestrator, rather than in each annotation manager. (#840)
Dependencies
- Updates MapboxCoreMaps to v10.2.0-beta.1. (#836)
- Features ✨ and improvements 🏁
- Add heatmap layer support to globe view
- Add circle layer support to globe
- Improve performance for querying large number of features
- Cache layer layout key inside layer, so that it is not re-evaluated at every parse of the every tile
- Model layer now supports loading of external gltf files
- Add cancelable Query Rendered Features API to the Map interface
- Core renderer prints its version on initialization
- Introduce experimental Map.setMemoryBudget method for setting memory budget for a Map and runtime "resource-budget" property for data sources
- Improve performance by avoiding re-layout of invisible fading tiles
- Reduce memory consumption of a model layer by avoiding duplicate texture uploads
- Introduce ViewAnnotation API and corresponding support in gl-native
- Bug fixes 🐞
- Release all unused resources when
Map.reduceMemoryUseis invoked - Fix crash for the case when an empty fill extrusion bucket is tried to be rendered
- Fix transparency issues with value < 0.5 for models rendered by the model layer
- Fix regression where setting the same geojson source URL did not refresh the data
- Fix symbol layers with variable anchor placement not being placed correctly on globe view
- Fix crash in symbol reprojection code caused by division by zero
- Fix issue with bounds constraining behavior when terrain is enabled
- Release all unused resources when
- Features ✨ and improvements 🏁
- Updates MapboxCommon to v21.0.0-rc.1. (#836)
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.2.0-beta.1/MapboxMaps.zip?access_token=<access-token>
v10.1.0
Dependency requirements:
- Compatible version of MapboxCoreMaps: v10.1.0
- Compatible version of MapboxCommon: v20.1.0
- Compatible version of Xcode: Tested with Xcode 12.5 and 13.1
- Compatible version of macOS: Tested with macOS 11.6.1
Changes
Features and Improvements
PointAnnotation.Image'simage: UIImageandname: Stringfields are now public. (#753)- The gesture- and animation-in-progress flags are now set on
MapboxMapduring gestures and animations. (#754)- This improves performance and resolves raster tile rendering issues.
GestureOptions.pinchRotateEnabledhas been added to allow disabling the rotation aspect of the pinch gesture. (#779)
Bug fixes
- The experimental
MapViewsnapshot API has been updated to work on iOS 15. (#760) - Anchor is now treated as a constant for
ease(to:)animations. (#772)- This results in an less surprising API and fixes issues with the double-{tap,touch}-to-zoom gestures.
- If you need to animate the anchor, you can still use the
makeAnimator*APIs
- Increases the rate of pan gesture deceleration on pitched maps. (#773)
- Pan gesture deceleration is now completely disabled if pitch exceeds 60 degrees.
- This approach is a first attempt at mitigating issues with panning around or near the horizon on pitched maps that resulted in much higher than desired map displacement.
- The following fixes accompanied the updates to
MapboxCoreMapsandMapboxCommon(#807):- Fix rendering artifact when some of the model layer models may have wrong placement when globe view projection is used
- Fix rare heatmap flickering when zooming the map
- Fix an issue where an
Observableevent could be dispatched on a thread different from the subscription thread - Fix an issue where
promoteIdparameter forVectorSourcewas overwritten when sourceTileJSONis loaded - Relax numeric property getter in
queryFeatureExtensionsAPI, so thatcluster_idproperty can be double or signed integer - Move
MBMTask,MBMClientandMBMMetalViewProviderinterfaces to internalMapboxCoreMapsmodule, so that we avoid class name clashes withSwift.Task UIImageinstances that have padded rows are now handled correctly during conversion toMBMImage. This fixes the "mismatched image size" errors that were reported when trying to add dynamically-rendered images to the style (or to an annotation).
Dependencies
- Updates to
MapboxCoreMapsv10.1.0 andMapboxCommonv20.1.0. (#807)
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.1.0/MapboxMaps.zip?access_token=<access-token>
v10.1.0-rc.1
Dependency requirements:
- Compatible version of MapboxCoreMaps: v10.1.0-rc
- Compatible version of MapboxCommon: v20.1.0-rc.2
- Compatible version of Xcode: Tested with 12.5
- Compatible version of macOS: Tested with 11.6 (macOS Big Sur)
Changes
Bug fixes
- Fixed an issue with
UIImageconversion that led to a "mismatched image size" error. (#790)
Dependencies
Update to MapboxCoreMaps v10.1.0-rc and MapboxCommon v20.1.0-rc.2. (#790)
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.1.0-rc.1/MapboxMaps.zip?access_token=<access-token>
v10.1.0-beta.1
Dependency requirements:
- Compatible version of MapboxCoreMaps: v10.1.0-beta
- Compatible version of MapboxCommon: v20.1.0-rc.1
- Requires Swift Package Manager or CocoaPods
- Tested in Xcode 12.5 on macOS 11.6 Big Sur
Changes
Features and Improvements
- Make
PointAnnotation.Image's fields public. (#753) - Set
MapboxMapflags during gestures and animations. (#754) - Add
GestureOptions.pinchRotateEnabledto configure whether the pinch gesture rotates the map. (#779)
Bug fixes
- Fix experimental snapshot API for iOS 15. (#760)
- Fixed an issue that caused
queryFeatureExtensionto fail. (#769) - Fixed a name collision between Swift symbols and
MapboxCoreMaps.Task. (#769) - Treat anchor as constant for
ease(to:)animations. (#772) - Decelerate more quickly (or not at all) on pitched maps. (#773)
Dependencies
- Updated
MapboxCoreMapsto v10.1.0-beta andMapboxCommonto 20.1.0-rc.1. (#769)
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.1.0-beta.1/MapboxMaps.zip?access_token=<access-token>
v10.0.1
Dependencies and system requirements
- Requires MapboxCoreMaps v10.0.0
- Requires MapboxCommon v20.0.0
- Requires Swift Package Manager or CocoaPods
- Tested in Xcode 12.4 on macOS 10.15 Catalina
Changes
- Passing an unsupported locale into
Style.localizeLabels(into:forLayerIds:)throws an error instead of crashing. (#752) - Fixed a bug affecting the persistence of user settings when upgrading to v10. (#758)
- Allow compass visibility to accurately reflect set value. (#757)
- Update MapboxMobileEvents to v1.0.6, fixing a null pointer crash. (#762)
Direct download
Link to download binaries (append your own Mapbox access token scoped with DOWNLOADS:READ):
https://api.mapbox.com/downloads/v2/mobile-maps-ios/releases/ios/10.0.1/MapboxMaps.zip?access_token=<access-token>