- CoreSDK
- Removed
NavigationOptions.StopOptions
structNavigationOptions.StopOptions.stopWhenArrivedAtDestination: Bool
moved toNavigationOptions.stopWhenArrivedAtDestination: Bool
NavigationOptions.StopOptions.stopDistanceThreshold: CLLocationDistance
moved toNavigationOptions.arrivedDistanceThreshold: CLLocationDistance
NavigationOptions.init(stopNavigationOptions: StopOptions, userPositionThreshold: CLLocationDistance, navigationRecalculationTimeInterval: TimeInterval)
changed toNavigationOptions.init(stopWhenArrivedAtDestination: Bool, arrivedDistanceThreshold: CLLocationDistance, userPositionThreshold: CLLocationDistance, navigationRecalculationTimeInterval: TimeInterval)
- Removed
- CoreSDK: remaining/traveled distance is calculated according to the user's projection constant
- PosSDK(VPS): Use jpg images for VPS by default
- PosSDK(VPS): minInclinationAngle default is 65 degrees
- Core
- Alamofire 5.10.1 -> 5.10.2
- Xcode 16.1
- Swift 6 (effective 5.10)
- MapSDK: some styles don't load (caused by MapLibre 6.8.0)
- PosSDK(VPS): crash on start VPS on simulator
- Map
- MapLibre 6.8.0 -> 6.8.1
- Polestar
- NAOSDK 4.11.17 -> 4.11.17.2
- Xcode 16.1
- Swift 6 (effective 5.10)
- CoreSDK: handle level change type - incline plane
- Map
- MapLibre 6.7.1 -> 6.8.0
- Xcode 16.1
- Swift 6 (effective 5.10)
- MapSDK
- Now by default it is possible to select only one POI at a time. To enable multiple POIs selection, you have to change
selectionMode
to.multiple
inPointOfInterestManager
. WemapMapViewDelegate
renamed toMapViewDelegate
:func map(_ map: MapView, didTouchAtPoint point: CGPoint)
renamed tofunc mapView(_ mapView: MapView, didTouchAtPoint point: CGPoint)
BuildingManagerDelegate
changed:func map(_ map: MapView, didChangeLevel level: Level, ofBuilding building: Building)
changed tofunc buildingManager(_ manager: BuildingManager, didChangeLevel level: Level, ofBuilding building: Building)
func map(_ map: MapView, didFocusBuilding building: Building?)
changed tofunc buildingManager(_ manager: BuildingManager, didFocusBuilding building: Building?)
MapConstants
properties moved toCoreConstants
:itineraryRecalculationEnabled
userLocationProjectionOnItineraryEnabled
MapView
changed:let pointOfInterestManager
changed type fromPointOfInterestManager
toMapPointOfInterestManaging
let navigationManager
changed type fromNavigationManager
toMapNavigationManaging
isSelectionEnabled
changed toisUserSelectionEnabled
. Also changed its logic. Previously this property was used to disable all ways to selecting POIs - programmatically and by user clicking on POI on the map. Now this property applies only to user actions - ifisUserSelectionEnabled = false
- user will not be able to select POI, but POI can still be selected programmatically.func startNavigation(origin: Coordinate?, destination: Coordinate, travelMode: TravelMode, options: NavigationOptions, searchOptions: ItinerarySearchOptions, timeout: DispatchTimeInterval) -> Single<Itinerary>
changed tofunc startNavigation(origin: Coordinate?, destination: Coordinate, travelMode: TravelMode, options: NavigationOptions, searchOptions: ItinerarySearchOptions, timeout: DispatchTimeInterval) -> Single<Navigation>
func startNavigation(_ itinerary: Itinerary, options: NavigationOptions, searchOptions: ItinerarySearchOptions) -> Single<Itinerary>
changed tofunc startNavigation(_ itinerary: Itinerary, options: NavigationOptions, searchOptions: ItinerarySearchOptions) -> Single<Navigation>
func stopNavigation() -> Result<Itinerary, NavigationError>
changed tofunc stopNavigation() -> Result<Navigation, Error>
- Removed
BuildingData
- Moved from
WemapMapSDK
toWemapCoreSDK
:Category
Tag
UseTags
SimulatorLocationSource
SimulationOptions
Extras
moved toMapData.Extras
PointOfInterestManager
class changed to protocolPointOfInterestManaging
PointOfInterestManagerDelegate
PointOfInterestWithInfo.info: ItineraryInfo
changed toPointOfInterestWithInfo.info: ItineraryInfo?
MapData
let bounds: MLNCoordinateBounds
changed tolet bounds: BoundingBox
let maxBounds: MLNCoordinateBounds?
changed tolet maxBounds: BoundingBox?
NavigationManager
class changed to protocolNavigationManaging
var updateTimeInterval: DispatchTimeInterval
renamed tovar infoUpdatesTimeInterval: DispatchTimeInterval
NavigationManagerDelegate
func navigationManager(_ manager: NavigationManager, didStartNavigation itinerary: Itinerary)
changed tofunc navigationManager(_ manager: NavigationManager, didStartNavigation navigation: Navigation)
func navigationManager(_ manager: NavigationManager, didStopNavigation itinerary: Itinerary)
changed tofunc navigationManager(_ manager: NavigationManager, didStopNavigation navigation: Navigation)
func navigationManager(_ manager: NavigationManager, didArriveAtDestination itinerary: Itinerary)
changed tofunc navigationManager(_ manager: NavigationManager, didArriveAtDestination navigation: Navigation)
func navigationManager(_ manager: NavigationManager, didFailWithError error: NavigationError)
changed tofunc navigationManager(_ manager: NavigationManager, didFailWithError error: Error)
func navigationManager(_ manager: NavigationManager, didRecalculateItinerary itinerary: Itinerary)
changed tofunc navigationManager(_ manager: NavigationManager, didRecalculateNavigation navigation: Navigation)
NavigationError
- Removed
failedToAddItineraryToMap
failedToRemoveItineraryFromMap
renamed tofailedToRemoveNavigation
- Removed
NavigationOptions
let userTrackingMode: MLNUserTrackingMode?
removed. You can usemap.userTrackingMode
insteadlet itineraryOptions: ItineraryOptions
removed. Now it should be provided as independent parameter toMapNavigationManaging.startNavigation()
- Now by default it is possible to select only one POI at a time. To enable multiple POIs selection, you have to change
- CoreSDK
ItineraryService
class changed to protocolItineraryServicing
. Now you can't create it yourself, but you can request it throughServiceFactory.getItineraryService()
PointOfInterestService
class changed to protocolPointOfInterestServicing
. Now you can't create it yourself, but you can request it throughServiceFactory.getPointOfInterestService()
PointOfInterest
let imageUrl: String
renamed tolet imageURL: String
LocationSourceDelegate
func locationSource(_ locationSource: any LocationSource, didUpdateLocation coordinate: Coordinate)
renamed tofunc locationSource(_ locationSource: any LocationSource, didUpdateCoordinate coordinate: Coordinate)
- PosSDK(VPS)
VPSARKitLocationSource
changed:ScanReason
renamed toNotPositioningReason
State
cases changed accordingly:scanRequired(reason: ScanReason)
renamed tonotPositioning(reason: NotPositioningReason)
limited(reason: ARCamera.TrackingState.Reason)
changed todegradedPositioning(reason: DegradedPositioningReason)
limited(reason: ARCamera.TrackingState.Reason)
moved toDegradedPositioningReason.session(reason: ARCamera.TrackingState.Reason)
normal
renamed toaccuratePositioning
- Removed
noTracking
- Removed
VPSServiceError
- PosSDK(VPS): Enhancement of lifecycle
- MapSDK: Make PoIs loaded before returning Map
- CoreSDK: add single PoI selection mode and it is used by default (instead of multiple PoIs selection)
- MapSDK: throw an error if BuildingData is corrupted
- MapSDK: Make the camera zoom when user tracking mode is changed to follow/tracking
- MapSDK: Set userTrackingMode to None when BuildingManager.setLevel is called
- PosSDK(VPS): Trigger the reason of rescan necessary. Ex.: because of conveying detected
- MapSDK: add map view callback mapViewLoaded
- PosSDK(VPS): rename VPS states
- CoreSDK: handle sorting by graph distance/duration error in BE response
- CoreSDK: memory issue on resource deallocation
- MapSDK: initial coordinate bounds are too small
- Sample Map+Positioning(VPS): user position is not updated after closing scanning view
Starting iOS 18, there is a bug where ARSession is automatically stopped by ARView when the view is dismissed/hidden. Because of this, the positioning process stops after a few seconds. If you are using ARView, we suggest a workaround in our sample application
- Core
- Turf 2.8.0 -> 3.1.0
- RxSwift 6.7.1 -> 6.8.0
- Alamofire 5.9.1 -> 5.10.1
- Map
- MapLibre 6.5.2 -> 6.7.1
- Polestar
- NAOSDK 4.11.16 -> 4.11.17
- Xcode 16.0
- Swift 6 (effective 5.10)
LocationSource
var isAvailable: Bool
changed tostatic var isAvailable: Bool
- PosSDK: Add static "isAvailable" method to LocationSource
- MapSDK: Some navigation instructions have a "null" suffix
- MapSDK: Multi-level itinerary segments are shown for all levels
- PosSDK(VPS): VPS session is not reset when the application returns from background
- PosSDK(VPS): Switch to SCAN_REQUIRED state when user is static in an elevator or escalator in navigation mode
- Map
- MapLibre 6.4.2 -> 6.5.2
- Polestar
- NAOSDK 4.11.15.2 -> 4.11.16
- Xcode 15.4
- Swift 5.10
- MapSDK: buildings that are not related to the current map have been loaded
- Xcode 15.4
- Swift 5.10
NavigationInstructions
struct has been moved fromWemapMapSDK
toWemapCoreSDK
Direction
enum has been moved fromWemapMapSDK
toWemapCoreSDK
Step.getNavigationInstructions
has been moved fromWemapMapSDK
toWemapCoreSDK
- CoreSDK: expose mediaUrl, mediaType of POI
- CoreSDK: move Step.getNavigationInstructions to CoreSDK
- Xcode 15.4
- Swift 5.10
- CoreSDK: navigation instruction translations to Dutch, German, Portuguese and Russian
- Polestar
- NAOSDK 4.11.17 -> 4.11.17.2
- Xcode 16.1
- Swift 6 (effective 5.10)
- CoreSDK: handle level change type - incline plane
- Xcode 16.1
- Swift 6 (effective 5.10)
- MapSDK: occasional crash on start navigation on iOS 15 with languages other than English
- MapSDK: Some navigation instructions have a "null" suffix
- Xcode 15.3
- Swift 5.10
- PosSDK(VPS): VPS session is not reset when the application returns from background
- Xcode 15.3
- Swift 5.10
- PosSDK(VPS): Switch to SCAN_REQUIRED state when user is static in an elevator or escalator in navigation mode
- PosSDK(VPS): Change VPS request timeout to 20s
- Xcode 15.3
- Swift 5.10
- MapSDK: buildings that are not related to the current map have been loaded
- Xcode 15.3
- Swift 5.10
- MapSDK: POI markers are hidden below a certain zoom level
- PosSDK(VPS): accept VPS endpoint with and without '/' at the end
- MapLibre 6.4.1 -> 6.4.2
- Xcode 15.3
- Swift 5.10
- PosSDK: PS: enable the use for simulator
- MapLibre 6.4.0 -> 6.4.1
- RxBlocking 6.7.0 -> 6.7.1
- RxCocoa 6.7.0 -> 6.7.1
- RxRelay 6.7.0 -> 6.7.1
- RxSwift 6.7.0 -> 6.7.1
- Xcode 15.3
- Swift 5.10
LevelChange.direction: String
has been changed toLevelChange.direction: Incline
Step
has been changed:let isGate: Bool
has been moved toextras.isGate
let subwayEntranceName: String?
has been moved toextras.subwayEntranceName
Leg
has been changed:let start: Coordinate
has been changed tolet start: Destination
let end: Coordinate
has been changed tolet end: Destination
ItinerariesParametersMultipleDestinations
has been renamed toItinerariesParametersMultiDestinations
ItinerarySearchOptions
has been replaced everywhere from nullable parameter to parameter with a default value
- PosSDK(VPS): add checkVpsAvailability() method
- MapSDK: offline maps support
- PosSDK(VPS): wrong level detection if altitude < 0
- MapLibre 6.2.0 -> 6.4.0
- RxSwift 6.6.0 -> 6.7.0
- Xcode 15.3
- Swift 5.10
- PosSDK: Polestar LocationSource does not work
- NAOSDK 4.11.14 -> 4.11.15
- Xcode 15.3
- Swift 5.10
- MapSDK: centerToPOI fails if POI doesn't have level or there is no building in focus
- Xcode 15.3
- Swift 5.10
- MapSDK: allow POIs that are not attached to the building to be shown on the map
- Xcode 15.3
- Swift 5.10
NavigationInfo
andNavigationInfoHandler
have been moved fromWemapMapSDK
toWemapCoreSDK
- CoreSDK: add optional mapId parameter to ItineraryParameters
- CoreSDK: Make NavigationInfoHandler usable without MapSDK
- MapLibre 6.1.1 -> 6.2.0
- Alamofire 5.8.1 -> 5.9.0
- Xcode 15.2
- Swift 5.9
- Due to migration from MapLibre 5.13.0 to 6.1.1 additional changes needed:
- Changed the prefix of files, classes, methods, variables and everything from
MGL
toMLN
. If you are using NSKeyedArchiver or similar mechanishm to save the state, the app may crash after this change when trying to unarchive the state using old names of the classes. You need to clean the saved state of the app and save it using new classes. - The Swift package needs to be imported with
import MapLibre
instead ofimport Mapbox
.
- Changed the prefix of files, classes, methods, variables and everything from
- removed support for iOS 11
VPSARKitLocationSource.State.limited(reason: VPSARKitLocationSource.State.Reason)
has been changed toVPSARKitLocationSource.State.limited(reason: ARCamera.TrackingState.Reason)
:VPSARKitLocationSource.State.Reason.correction
has been removed
WemapMapViewDelegate.map(_: MapView, didTouchFeature feature: MGLFeature)
andWemapMapViewDelegate.map(_ map: MapView, didTouchPointOfInterest poi: PointOfInterest)
delegate methods have been removed. UsePointOfInterestManagerDelegate.pointOfInterestManager(_: PointOfInterestManager, didTouchPointOfInterest poi: PointOfInterest)
orPointOfInterestManagerDelegate.pointOfInterestManager(_: PointOfInterestManager, didSelectPointOfInterest poi: PointOfInterest)
instead.WemapMap.setEnvironment(_: Environment)
has been moved toWemapCore.setEnvironment(_: Environment)
Itinerary
has been changed:let from: Coordinate
has been renamed tolet origin: Coordinate
let to: Coordinate
has been renamed tolet destination: Coordinate
let mode: TravelMode
has been renamed tolet transitMode: TravelMode
Leg
has been changed:let from: Coordinate
has been renamed tolet start: Coordinate
let to: Coordinate
has been renamed tolet end: Coordinate
let mode: TravelMode
has been renamed tolet transitMode: TravelMode
TravelMode.bike
has been changed toTravelMode.bike(preference: TravelMode.Preference)
ItineraryParameters.init(from: Coordinate, to: Coordinate, mode: TravelMode, options: ItinerarySearchOptions)
has been changed toItineraryParameters.init(origin: Coordinate, destination: Coordinate, travelMode: TravelMode, searchOptions: ItinerarySearchOptions?)
ItineraryParametersMultipleDestinations
has been renamed toItinerariesParametersMultipleDestinations
:init(origin: Coordinate, pointsOfInterest: [PointOfInterest], mapId: Int, mode: TravelMode, options: ItinerarySearchOptions)
has been changed toinit(origin: Coordinate, pointsOfInterest: [PointOfInterest], mapId: Int, travelMode: TravelMode, searchOptions: ItinerarySearchOptions?)
init(origin: Coordinate, coordinates: [Coordinate], mapId: Int?, mode: TravelMode, options: ItinerarySearchOptions)
has been changed toinit(origin: Coordinate, coordinates: [Coordinate], mapId: Int?, travelMode: TravelMode, searchOptions: ItinerarySearchOptions?)
ItinerarySearchOptions
has been changed:let useStairs: Bool
has been replaced bylet avoidStairs: Bool
let useEscalators: Bool
has been replaced bylet avoidEscalators: Bool
let useElevators: Bool
has been replaced bylet avoidElevators: Bool
ItinerariesResponse
has been changed:let from: Coordinate
has been removedlet to: Coordinate
has been removedlet error: String?
has been replaced bylet status: Status
ItineraryManager
has been changed:getItineraries(from: Coordinate, to: Coordinate, searchOptions: ItinerarySearchOptions)
has been changed togetItineraries(origin: Coordinate, destination: Coordinate, travelMode: TravelMode, searchOptions: ItinerarySearchOptions?)
NavigationManager
has been changed:startNavigation(from: Coordinate, to: Coordinate, timeout: DispatchTimeInterval, options: NavigationOptions, itinerarySearchOptions: ItinerarySearchOptions)
has been changed tostartNavigation(origin: Coordinate?, destination: Coordinate, travelMode: TravelMode, options: NavigationOptions, searchOptions: ItinerarySearchOptions?, timeout: DispatchTimeInterval)
startNavigation(_: Itinerary, options: NavigationOptions, itinerarySearchOptions: ItinerarySearchOptions)
has been changed tostartNavigation(_: Itinerary, options: NavigationOptions, searchOptions: ItinerarySearchOptions?)
- CoreSDK: Add fastest, safest, tourism preferences for bike travel mode
- MapSDK: expose pitch from MapData, take into account the initial value
- MapSDK: expose bearing from MapData, take into account the initial value
- CoreSDK: migrate to Itineraries API v2
- MapSDK: migrate to MapLibre 6.0.0
- MapSDK: replace didTouchFeature by didTouchPointOfInterest
- MapSDK: some POIs are selected and immediately unselected
- MapSDK: MapView is not deallocated on view dismissal
- Itineraries API v1 -> v2
- MapLibre 5.13.0 -> 6.1.1
- NAOSwiftProvider 1.2.2 -> 1.3.0
WemapMap.userLocationManager.userLocationAnnotationViewStyle
has been renamed toWemapMap.userLocationManager.userLocationViewStyle
UserLocationAnnotationViewStyle
has been renamed toUserLocationViewStyle
. Also its properties have been renamed accordingly:puckFillColor
has been renamed toforegroundTintColor
puckBorderColor
has been renamed tobackgroundTintColor
puckArrowFillColor
has been renamed toheadingTintColor
OutOfActiveLevelStyle
properties have been renamed accordingly:puckFillColor
has been renamed toforegroundTintColor
puckArrowFillColor
has been renamed toheadingTintColor
PointOfInterest
has been changed:coordinate2D
has been moved tocoordinate.coordinate2D
levelID
has been moved tocoordinate.levels
- MapSDK/CoreSDK: Let the possibility to sort PoIs by travel time/distance from UserPosition in a "batch" version
- MapSDK: Add remaining distance to the step to NavigationInfo
- MapSDK: PointOfInterest should have a field "Coordinate" to avoid manual transformation later (i.e. nav to a POI)
- MapSDK: Let the possibility to the developer to disable/enable PoI selection
- MapSDK: Add the possibility to change the user location icon dynamically
- MapSDK: ability to change color of outdoor part of itinerary
- MapSDK: make NavigationInstructions attributes public
- MapSDK: navigation details steps order is wrong
- MapSDK: filterByTag method do the opposite of the desired effect
- MapSDK: building's active level is reset when viewport has significantly changed even if the building is still in focus
- MapSDK: outdoor part of itinerary is visible only when selected level 0
- MapSDK: blue dot greyed outdoor when camera is following the user
- Turf 2.7.0 -> 2.8.0
- NAOSDK 4.11.13.1 -> 4.11.14
LocationSourceSimulator
has been renamed toSimulatorLocationSource
NavigationDelegate
has been renamed toNavigationManagerDelegate
WemapMap.getStyleURL(withMapID:token:)
has been renamed toWemapMap.getMapData(mapID:token:)
PolestarLocationSource
has been moved toWemapPositioningSDKPolestar
frameworkVPSARKit*
classes have been moved fromWemapPositioningSDK
toWemapPositioningSDKVPSARKit
framework
- MapSDK: Add NavigationManager.hasActiveNavigation
- MapSDK: have a method to startNavigation with itineraries as parameter
- PosSDK: Add "isAvailable" method to LocationSource
- MapSDK: add possibility to center a POI with optional padding
- MapSDK: Refactor (i) button popup
- PosSDK: "Scan Required" state of VPSARKit location source is never reached
- PosSDK: VPS orientation is wrong
- Map+PositioningExample: add an example app to demonstrate VPS functionality
- MapSDK: Create filter by tags
- MapSDK: Extend MapData with Extras
- MapSDK: fix automatic level change when CameraMode is not tracking
- MapSDK: automatic level switch on user movements freezes/lags the app
- Alamofire 5.8.0 -> 5.8.1
- MapSDK: add helper method to translate step data into textual instructions
- CoreSDK: add itinerary search options for backend
- MapSDK: add onMapClick event
- MapSDK: create a default GPS (fused) LocationSource
- MapSDK: revert back didTouchFeature delegate method
- CoreSDK: fix Coordinate decoding/encoding
- MapSDK: onMapClick called twice
- MapSDK: outdoors, the user's location annotation is displayed in gray
- MapSDK: user position is not projected on stairs
- MapSDK:
map(_: MapView, didTouchFeature feature: MGLFeature)
delegate method has been deprecated and will be removed soon. UsePointOfInterestManagerDelegate.pointOfInterestManager(_: PointOfInterestManager, didSelectPointOfInterest poi: PointOfInterest)
instead.
- Turf 2.6.1 -> 2.7.0
- Alamofire 5.7.1 -> 5.8.0
- RxSwift 6.5.0 -> 6.6.0
-
IndoorLocationProvider
has been renamed toLocationSource
and moved fromWemapMapSDK
toWemapCoreSDK
-
IndoorLocationProviderDelegate
has been renamed toLocationSourceDelegate
and moved fromWemapMapSDK
toWemapCoreSDK
-
Polestar
didLocationChange
should take into accountverticalAccuracy
for proper calculation as shown belowfunc didLocationChange(_ location: CLLocation!) { let coordinate: Coordinate if location.verticalAccuracy < 0 { // outdoor location coordinate = Coordinate(location: location) } else { coordinate = Coordinate(location: location, levels: [Float(location.altitude / 5)]) } lastCoordinate = coordinate delegate?.locationSource(self, didUpdateLocation: coordinate) }
-
map(_: MapView, didTouchFeature feature: MGLFeature)
is removed in favor ofpointOfInterestManager(_: PointOfInterestManager, didSelectPointOfInterest poi: PointOfInterest)
. To receive events fromPointOfInterestManager
you have to implement protocolPointOfInterestManagerDelegate
and assign it tomap.pointOfInterestManager.delegate = self
- MapSDK: switch level automatically on selectPOI if shouldCenter is true
- MapSDK: add new events when a POI is selected/unselected
- MapSDK: Stop event did not reach even if remaining distance is less than threshold
- MapSDK: Navigation info is wrong when itinerary contains indoor and outdoor parts
- MapSDK: click on the PoI symbol (shape) does not select the PoI
- CoreSDK: fix pointOfInterestManager.getPOIs()
- MapSDK: outdoors, the user's location annotation is displayed in gray
- MapSDK: user position is not projected on stairs
- MapSDK: Stop event did not reach even if remaining distance is less than threshold
- MapSDK: Navigation info is wrong when itinerary contains indoor and outdoor parts
- MapSDK: it's possible to remove navigation itinerary using itinerary manager (it should not)