- Increased the minimum versions of
MapboxNavigationNativeto v29.0,MapboxCommonto v9.1.0 andMapboxDirectionsto v1.2. (#2694, #2770, #2781) - Installing MapboxCoreNavigation using CocoaPods no longer overrides the
EXCLUDED_ARCHSbuild setting of your application’s target. Installing MapboxNavigation still overrides this setting. (#2770) - Added a Ukrainian localization. (#2735)
- Added the ability to customize the floating buttons in navigation view. The floating buttons could be edited with
NavigationViewController.floatingButtons, the position of the floating buttons could be edited withNavigationViewController.floatingButtonsPosition. (#2763) - Fixed an issue which was causing clear map button disappearance in the example app when selecting the route. (#2718)
- Fixed an issue where maneuver icon was not shown after selecting specific step. (#2728)
- Added the ability to style each route line differently using such delegate methods (#2719):
NavigationMapViewDelegate.navigationMapView(_:mainRouteStyleLayerWithIdentifier:source:)to style the main route.NavigationMapViewDelegate.navigationMapView(_:mainRouteCasingStyleLayerWithIdentifier:source:)to style the casing of the main route.NavigationMapViewDelegate.navigationMapView(_:alternativeRouteStyleLayerWithIdentifier:source:)to style alternative route.NavigationMapViewDelegate.navigationMapView(_:alternativeRouteCasingStyleLayerWithIdentifier:source:)to style the casing of alternative route.
- Fixed an issue where the route line periodically peeked out from behind the user puck even though
NavigationViewController.routeLineTracksTraversalwas enabled. (#2737) - Created the
UserHaloCourseViewsimilar toUserCourseViewfor approximate location on iOS 14 during the navigation to represent user location. Allow the switch betweenUserHaloCourseViewandUserCourseViewwhen precise mode is changed. (#2664)
- Fixed an issue which was preventing the ability to customize the bottom banner height. (#2705)
- Fixed an issue which was preventing the ability to scroll between instructions cards on iOS 14 using workaround. (#2755)
- Fixed an instructions cards layout issue that arose when changing orientation (portrait to landscape). (#2755)
- Fixed swiping for right-to-left languages for the traditional top banner to be more intuitive. (#2755)
- Fixed potential crashes when using
PassiveLocationManagerorPassiveLocationDataSource. (#2694) - Fixed repeated rerouting when traveling alongside a freeway off-ramp. (#2694)
- Fixed repeated rerouting when starting a new leg while the user is too far from the new leg’s origin. (#2781)
RouteControllermore reliably detects when the user has gone off-route. (#2781)- Fixed an issue where
RouteControllersnapped the user’s location to the opposite side of a divided highway. (#2694) - Fixed an issue where
RouteControllergot stuck after making a U-turn. (#2694)
- The user can now report feedback about an incorrect speed limit in the speed limit view. (#2725)
- Added the
RouteProgress.upcomingRouteAlertsproperty to track upcoming points along the route experiencing conditions that may require the user’s attention. TheUpcomingRouteAlertInfo.alertproperty contains one of the following types with more details about the alert:Incident,TunnelInfo,BorderCrossingInfo,TollCollection, andRestStop. (#2694) - Added a new
NavigationMapView.roadClassesWithOverriddenCongestionLevelsproperty. For any road class in it all route segments with anCongestionLevel.unknowntraffic congestion level and a matchingIntersection.outletMapboxStreetsRoadClasswill be replaced with theCongestionLevel.lowcongestion level. (#2741) - Added a new
RouteLeg.streetsRoadClassesproperty, which allows to get a collection ofMapboxStreetsRoadClassobjects for specificRouteLeg. (#2741) NavigationAnnotationwas made public to provide a way to detect annotations created byNavigationMapView. (#2769)
- MapboxNavigationNative dependency was updated to v22.0.5 and MapboxCommon to v7.1.2. (#2648)
- Fixed issues which was causing unsmooth user puck updates on iOS and inability to zoom-in to current location at the start of navigation on CarPlay by updating to Mapbox Maps SDK for iOS v6.2.2. (#2699)
- Added the
NavigationServiceDelegate.navigationService(_:didChangeAuthorizationFor:)method andNotification.Name.locationAuthorizationDidChangeto detect when the user changes the Location Services permissions for the current application, including for approximate location on iOS 14. (#2693) - When approximate location is enabled on iOS 14, a banner appears reminding the user to disable approximate location to continue navigating. (#2693)
RouteProgress,RouteLegProgress, andRouteStepProgressnow conform to theCodableprotocol. (#2615)- Fixed an issue where
NavigationMapViewredrew at a low frame rate even when the device was plugged in. (#2643) - Fixed an issue where the route line flickered when refreshing. (#2642)
- Fixed an issue where the End of route view UI is broken prior to iOS 11. (#2690)
- Fixed an issue where completed waypoints remained on map after rerouting. (#2378)
- Fixed an issue where positioning icon was not highlighted on CarPlay when using iOS 14.0. (#2697)
- Fixed an issue where ETA label font was too small during turn-by-turn navigation. (#2679)
- Fixed an issue with
NavigationMapViewDelegate.navigationMapView(_:shapeFor:)andNavigationMapViewDelegate.navigationMapView(_:simplifiedShapeFor:)methods were not correctly called for route shape customization (#2623) - Fixed an issue where the banner indicating simulation mode displayed a very large speed factor in the Hebrew location. (#2714)
- Fixed an issue where incorrect speed multiplier value was shown after arriving to the intermediate waypoint. (#2710)
- By default, usage of Mapbox APIs is now billed together based on monthly active users rather than individually by HTTP request. Learn more in the pricing by product documentation. (#2405)
- Carthage v0.35 or above is now required for installing this SDK if you use Carthage. (
81a36d0) - MapboxNavigation depends on Mapbox Maps SDK for iOS v6.0.0, and MapboxCoreNavigation depends on builds of MapboxNavigationNative and MapboxCommon that require authentication. Before CocoaPods or Carthage can download Mapbox.framework, MapboxNavigationNative.framework, and MapboxCommon.framework, you need to create a special-purpose access token. See the updated installation instructions in the readme for more details. (#2437, #2477)
- If you install this SDK using Carthage, you need to also add MapboxCommon.framework to your application target’s Embed Frameworks build phase. (#2477)
- Xcode 11.4.1 or above is now required for building this SDK from source. (#2417)
- Added Greek and Turkish localizations. (#2385, #2475)
- Upgraded to MapboxDirections v1.0.0, MapboxSpeech v1.0.0, and Turf v1.0.0. (#2646)
- The
MGLStyle.navigationDayStyleURLandMGLStyle.navigationNightStyleURLproperties contain URLs to the Mapbox Navigation Day and Night v5 styles, both of which show traffic congestion lines on all roads by default. The traffic congestion layer is appropriate for a preview map; to tailor the style to turn-by-turn navigation, setMGLMapView.showsTraffictofalse. (#2523) - A portion of the route line now disappears behind the user puck as the user travels along the route during turn-by-turn navigation if
NavigationViewController.routeLineTracksTraversalis set totrue. (#2377) - Ability to hide the route line behind the user puck on CarPlay can be enabled by setting
CarPlayNavigationViewController.routeLineTracksTraversaltotrue. (#2601) - Traffic congestion segments along the route line and the estimated arrival time periodically update to reflect current conditions when using the
DirectionsProfileIdentifier.automobileAvoidingTrafficprofile. These updates correspond to the newNotification.Name.routeControllerDidRefreshRoutenotification,NavigationServiceDelegate.navigationService(_:didRefresh:)method, andNavigationViewControllerDelegate.navigationViewController(_:didRefresh:)method. To disable these updates, setRouteOptions.refreshingEnabledtofalse. (#2366) - A building at the destination waypoint can be extruded in 3D and highlighted for emphasis and recognizability. To enable building extrusion or highlighting, set the
NavigationViewController.waypointStyleproperty. For a standalone map view that is not part ofNavigationViewController, call theNavigationMapView.highlightBuildings(at:in3D:)method to highlight the destination building at a specific coordinate andNavigationMapView.unhighlightBuildings()to reverse this effect. (#2535) - Replaced the
MGLStyle.navigationPreviewDayStyleURLandMGLStyle.navigationGuidanceDayStyleURLproperties withMGLStyle.navigationDayStyleURL, and replacedMGLStyle.navigationPreviewNightStyleURLandMGLStyle.navigationGuidanceNightStyleURLwithMGLStyle.navigationNightStyleURL. (#2523) - Replaced the
MGLStyle.navigationGuidanceDayStyleURL(version:)andMGLStyle.navigationGuidanceNightStyleURL(version:)methods withMGLStyle.navigationDayStyleURL(version:)andMGLStyle.navigationNightStyleURL(version:)respectively, removed theMGLStyle.navigationPreviewDayStyleURL(version:)andMGLStyle.navigationPreviewNightStyleURL(version:)methods. (#2567) - Removed the
NavigationViewControllerDelegate.navigationViewController(_:imageFor:)andNavigationViewControllerDelegate.navigationViewController(_:viewFor:)methods in favor ofMGLMapViewDelegate.mapView(_:imageFor:)andMGLMapViewDelegate.mapView(_:viewFor:), respectively. (#2396) - Removed
NavigationMapViewDelegate.navigationMapView(_:routeStyleLayerWithIdentifier:source:),NavigationMapViewDelegate.navigationMapView(_:routeCasingStyleLayerWithIdentifier:source:)in favor of four new delegate methods to customize the route styling (#2377):NavigationMapViewDelegate.navigationMapView(_:mainRouteStyleLayerWithIdentifier:source:)to style the main route.NavigationMapViewDelegate.navigationMapView(_:mainRouteCasingStyleLayerWithIdentifier:source:)to style the casing of the main route.NavigationMapViewDelegate.navigationMapView(_:alternativeRouteStyleLayerWithIdentifier:source:)to style alternative routes.NavigationMapViewDelegate.navigationMapView(_:alternativeRouteCasingStyleLayerWithIdentifier:source:)to style the casing of alternative routes.
- Removed the deprecated
NavigationMapView.showRoutes(_:legIndex:)method in favor ofNavigationMapView.show(_:legIndex:)andNavigationMapView.showWaypoints(_:legIndex:)in favor ofNavigationMapView.showWaypoints(on:legIndex:). (#2539) - Fixed an issue where the casing for the main route would not overlap alternative routes. (#2377)
- Fixed memory leaks after disconnecting the application from CarPlay. (#2470)
- Fixed issue which was causing incorrect alignment of
MGLMapView.attributionButtonandMGLMapView.logoView. (#2613)
- As the user approaches certain junctions, an enlarged illustration of the junction appears below the top banner to help the user understand a complex maneuver. These junction views only appear when the relevant data is available. Contact your Mapbox sales representative or support team for access to the junction views feature. (#2408)
- Replaced
RouteVoiceControllerandMapboxVoiceControllerwithMultiplexedSpeechSynthesizer.MultiplexedSpeechSynthesizercoordinates multiple cascading speech synthesizers. By default, the controller still tries to speak instructions via the Mapbox Voice API (MapboxSpeechSynthesizer) before falling back to VoiceOver (SystemSpeechSynthesizer), but you can also provide your own speech synthesizer that conforms to theSpeechSynthesizingprotocol. (#2348) - Added an alternative presentation for maneuver instructions that resembles swipeable user notification cards. To replace the conventional
TopBannerViewControllerpresentation with the cardlike presentation, create an instance ofInstructionsCardViewControllerand pass it into theNavigationOptions(styles:navigationService:voiceController:topBanner:bottomBanner:)method. (#2149, #2296, #2627)
- The user can optionally provide more detailed feedback during turn-by-turn navigation. After tapping the feedback button and selecting a feedback type, the user is taken to a second screen for selecting from among multiple subtypes. Set the
FeedbackViewController.detailedFeedbackEnabledproperty totrueto enable two-step feedback. (#2544) - Reorganized
FeedbackTypecases (#2419):- Removed
FeedbackType.accident,FeedbackType.hazard,FeedbackType.reportTraffic, andFeedbackType.mapIssue. - Renamed
FeedbackType.roadClosedandFeedbackType.notAllowedtoFeedbackType.roadClosure(subtype:)andFeedbackType.illegalRoute(subtype:), respectively. - Renamed
FeedbackType.routingErrortoFeedbackType.routeQuality(subtype:). - Renamed
FeedbackType.confusingInstructiontoFeedbackType.confusingAudio(subtype:). - Added
FeedbackType.incorrectVisual(subtype:),FeedbackType.routeQuality(subtype:), andFeedbackType.positioning(subtype:). FeedbackType.missingRoadis now represented asFeedbackType.routeQuality(subtype:)with a subtype ofRouteQualitySubtype.routeIncludedMissingRoads.FeedbackType.missingExitis now represented asFeedbackType.incorrectVisual(subtype:)with a subtype ofIncorrectVisualSubtype.exitInfoIncorrect.
- Removed
FeedbackViewControllerno longer dismisses automatically after 10 seconds. (#2420)- Refreshed the feedback type icons. (#2419, #2421)
- Fixed warnings in Interface Builder that prevented styling of UI components in
EndOfRouteViewController. (#2518)
- Improved the accuracy of location tracking and off-route detection. (#2319)
- Added the
PassiveLocationManagerclass for use with theMGLMapView.locationManagerproperty. UnlikeCLLocationManager, this class causes the map view to display user locations snapped to the road network, just like during turn-by-turn navigation. To receive these locations without anMGLMapView, use thePassiveLocationDataSourceclass and implement thePassiveLocationDataSourceDelegate.passiveLocationDataSource(_:didUpdateLocation:rawLocation:)method or observeNotification.Name.passiveLocationDataSourceDidUpdatenotifications. (#2410) - The
NavigationViewController.routeandNavigationService.routeproperties are now read-only. To change the route that the user is traveling along, set theNavigationViewController.indexedRouteorNavigationService.indexedRouteproperty instead, pairing the route with the index of the route in the originalRouteResponseobject. (#2366) - The following methods now require a route index to be passed in as an argument (#2366):
NavigationViewController(for:routeIndex:routeOptions:navigationOptions:)NavigationViewController(route:routeIndex:routeOptions:navigationService:)CarPlayManagerDelegate.carPlayManager(_:navigationServiceAlong:routeIndex:routeOptions:desiredSimulationMode:)MapboxNavigationService(route:routeIndex:routeOptions:)MapboxNavigationService(route:routeIndex:routeOptions:directions:locationSource:eventsManagerType:simulating:routerType:)RouteProgress(route:routeIndex:options:legIndex:spokenInstructionIndex:)RouteProgress(route:routeIndex:options:legIndex:spokenInstructionIndex:)Router(along:routeIndex:options:directions:dataSource:)RouteController(along:routeIndex:options:directions:dataSource:)
- Fixed an issue where location tracking would pause at the beginning of a route after setting
RouteOptions.shapeFormattoRouteShapeFormat.polylineorRouteShapeFormat.geoJSON. Note that you most likely do not need to override the default value ofRouteShapeFormat.polyline6: this is the least bandwidth-intensive format, andRoute.shapeandRouteStep.shapeare set toLineStrings regardless. (#2319) - Fixed an issue where various delegate methods omitted
CLLocation.courseAccuracyandCLLocation.speedAccuracyproperties from passed-inCLLocationobjects when usingRouteController, even when these properties are provided by Core Location on iOS 13.4 and above. (#2417) - Fixed issues where the user puck would sometimes drift away from the route line even though the user was following the route. (#2412, #2417)
- Fixed an issue where
RouteControllertook longer than usual to detect that the user had gone off-route. (#2412) - Fixed an issue where
RouteControllerwould detect that the user had gone off-route due to a single errant location update. (#2412, #2417) - Fixed an issue where the camera and user puck would cut a corner when making a turn at speed. (#2412)
- Fixed an issue where
RouteControllerbecame too sensitive to the user going off-route near “intersections” that the Mapbox Directions API synthesizes at road classification changes, such as at either end of a tunnel. (#2412) - If the user’s raw course as reported by Core Location differs significantly from the direction of the road ahead, the camera and user puck are oriented according to the raw course. (#2417)
RouteControllernow tracks the user’s location more accurately within roundabouts. (#2417)- Fixed an issue where departure instructions were briefly missing when beginning turn-by-turn navigation. (#2417)
- Removed the
RouteController.projectedLocation(for:)method in favor ofRouteController.location. It is no longer possible to predict the user’s location at an arbitrary time. (#2610) - Renamed the
Router.advanceLegIndex(location:)method toRouter.advanceLegIndex(). It is no longer possible to advance to an arbitrary leg using this method. (#2610)
- The
RouteProgress.congestionTravelTimesSegmentsByStepandRouteProgress.congestionTimesPerStepproperties are now read-only. (#2624) - Deprecated
NavigationDirectionsCompletionHandler,OfflineRoutingError,UnpackProgressHandler,UnpackCompletionHandler,OfflineRouteCompletionHandler, andNavigationDirections. UseDirectionsinstead ofNavigationDirectionsto calculate a route. (#2509)
- This SDK can no longer be used in applications written in pure Objective-C. If you need to use this SDK’s public API from Objective-C code, you will need to implement a wrapper in Swift that bridges the subset of the API you need from Swift to Objective-C. (#2230)
- Added a new dependency on MapboxAccounts to prepare for upcoming improvements to how Mapbox bills this SDK’s usage of Mapbox APIs. If you use Carthage to install this SDK, remember to add MapboxAccounts.framework to the “Frameworks, Libraries, and Embedded Content” section and the input and output file lists of Carthage’s Run Script build phase. (#2151)
- Upgraded to Mapbox Maps SDK for iOS v5.6.x. (#2302)
- Fixed sporadic build failures after installing this SDK using CocoaPods. (#2368)
- Removed
BottomBannerViewController(delegate:)in favor ofBottomBannerViewController()and theBottomBannerViewController.delegateproperty’s setter. (#2297) - Removed the
StatusView.canChangeValueproperty in favor ofStatusView.isEnabled. (#2297)
UserCourseViewis now a type alias of theUIViewclass and theCourseUpdatableprotocol rather than a protocol in its own right. (#2230)- Renamed
NavigationMapView.showRoutes(_:legIndex:)toNavigationMapView.show(_:legIndex:). (#2230) - Renamed
NavigationMapView.showWaypoints(_:legIndex:)toNavigationMapView.showWaypoints(on:legIndex:). (#2230) - Removed the
NavigationMapView.navigationMapDelegateproperty in favor ofNavigationMapView.navigationMapViewDelegate. (#2297) - Added a speed limit indicator to the upper-left corner of the map view during turn-by-turn navigation (upper-right corner in CarPlay). To hide the speed limit indicator, set the
NavigationViewController.showsSpeedLimitsproperty tofalse. To customize the indicator’s colors, configureSpeedLimitView’s appearance proxy inside aStylesubclass. (#2291) - Fixed an issue where the current road name label contained an oversized route shield when the current map style was a custom style created in Mapbox Studio. (#2357)
- Removed
MapboxVoiceController.play(_:)in favor ofMapboxVoiceController.play(instruction:data:). (#2230, #2297) - The
MapboxVoiceController.speakWithDefaultSpeechSynthesizer(_:error:)andVoiceControllerDelegate.voiceController(_:spokenInstructionsDidFailWith:)methods now accept aSpeechErrorinstance instead of anNSErrorobject. (#2230) - Added the
VoiceControllerDelegate.voiceController(_:didFallBackTo:becauseOf:)method for detecting when the voice controller falls back toAVSpeechSynthesizer. (#2230)
- Removed the
NavigationViewController.routeControllerproperty andLegacyRouteController(along:directions:dataSource:eventsManager:). To useLegacyRouteControllerinstead of the defaultRouteControllerclass, pass that type intoMapboxNavigationService(route:directions:locationSource:eventsManagerType:simulating:routerType:), pass theMapboxNavigationServiceobject intoNavigationOptions(styles:navigationService:voiceController:topBanner:bottomBanner:), and pass theNavigationOptionsobject intoNavigationViewController(route:navigationService:). To accessLegacyRouteController, use theNavigationViewController.navigationServiceandNavigationService.routerproperties and cast the value ofNavigationService.routerto aLegacyRouteController. (#2297) - Removed the
NavigationViewController.locationManagerandLegacyRouteController.locationManagerproperties in favor ofNavigationService.locationManager. (#2297) - Removed
RouteLegProgress.upComingStepin favor ofRouteLegProgress.upcomingStep. (#2297) - Removed the
RouteProgress.nearbyCoordinatesproperty in favor ofRouteProgress.nearbyShape. (#2275, #2275) - Removed the
LegacyRouteController.tunnelIntersectionManagerproperty. (#2297)
- Various delegate protocols now provide default no-op implementations for all their methods and conform to the
UnimplementedLoggingprotocol, which can inform you at runtime when a delegate method is called but has not been implemented. This replaces the use of optional methods, which are disallowed in pure Swift protocols. Messages are sent through Apple Unified Logging and can be disabled globally through Unifed Logging, or by overriding the delegate function with a no-op implementation. (#2230) - Removed
NavigationViewController(for:styles:navigationService:voiceController:)andNavigationViewController(for:directions:styles:routeController:locationManager:voiceController:eventsManager:)in favor ofNavigationViewController(route:options:). (#2297) - Removed the
EventsManagertype alias in favor of theNavigationEventsManagerclass. (#2297) - Removed the
NavigationViewController.eventsManagerandLegacyRouteController.eventsManagerproperties in favor ofNavigationService.eventsManager. (#2297) - Removed the
NavigationViewController.carPlayManager(_:didBeginNavigationWith:window:delegate:)andNavigationViewController.carPlayManagerDidEndNavigation(_:window:)methods. To mirror CarPlay navigation on the main device, present and dismiss aNavigationViewControllerin theCarPlayManagerDelegate.carPlayManager(_:didBeginNavigationWith:)andCarPlayManagerDelegate.carPlayManagerDidEndNavigation(_:)methods, respectively. (#2297) - When Dark Mode is enabled, user notifications now draw maneuver icons in white instead of black for better contrast. (#2283)
- Added the
RouteLegProgress.currentSpeedLimitproperty. (#2114) - Added convenience initializers for converting Turf geometry structures into
MGLShapeandMGLFeatureobjects such asMGLPolylineandMGLPolygonFeature. (#2308) - Fixed an issue where the “End Navigation” button in the end-of-route feedback panel appeared in English regardless of the current localization. (#2315)
- Upgraded to Mapbox Maps SDK for iOS v5.5.1. (#2341)
- Fixed an issue where the spoken instructions always fell back to VoiceOver when the
MGLMapboxAPIBaseURLkey was set in the Info.plist file. (#2329) - Fixed a crash when setting certain properties of a
Stylesubclass to a dynamic color. (#2338)
- Fixed a crash on launch if this SDK is installed using Carthage. (#2317)
- Fixed a crash when the first visual instruction contained a route shield or exit number and the application’s user interface was written in SwiftUI. (#2323)
- Fixed an issue where a black background could appear under the arrow in a
ManeuverViewregardless of the view’sbackgroundColorproperty. (#2279) - Fixed an issue where the wrong style was applied to exit numbers in the top banner and for subsequent maneuver banners in CarPlay, resulting in poor contrast. (#2280)
- Fixed a crash on launch if this SDK is installed using Carthage. (#2301)
- Fixed an issue where user notifications displayed right turn arrows for left turn maneuvers. (#2270)
- This library now requires a minimum deployment target of iOS 10.0 or above. iOS 9.x is no longer supported. (#2206)
- Fixed an issue where the user puck appeared farther up the screen than the actual user location even while the camera pivoted around the user location at turns. (#2211)
- Lock screen notifications are presented more reliably and more closely resemble instruction banners. (#2206)
- Fixed an issue where manually incrementing
RouteProgress.legIndexcould lead to undefined behavior. (#2229) DistanceFormatternow inherits directly fromFormatterrather thanLengthFormatter. (#2206)- Fixed an issue where
DistanceFormatter.attributedString(for:withDefaultAttributes:)setNSAttributedString.Key.quantityto the original distance value rather than the potentially rounded value represented by the attributed string. (#2206)
- Fixed a crash on launch if this SDK is installed using Carthage. (#2301)
- Fixed an issue where a second swipe down on the top banner causes an open
StepsTableViewControllerto animate incorrectly. (#2197) - Added the
NavigationViewControllerDelegate.navigationViewController(_:didUpdate:location:rawLocation:)method for capturing progress updates without having to inject a class between theNavigationViewControllerand theNavigationService. (#2224) - Fixed an issue where the bottom banner can disappear when presenting in
UIModalPresentationStyle.fullScreenin iOS 13. (#2182)
- Fixed an issue where InstructionsBannerView remained the same color after switching to a day or night style. (#2178)
- Fixed an issue where
NavigationMapViewshowed routes without congestion attributes, such asMBDirectionsProfileIdentifier.walkingroutes, as translucent lines, even if the route had only one leg. (#2193) - Fixed an issue where the “iPhone Volume Low” banner would persist until replaced by another banner about simulation or rerouting. (#2183)
- Designables no longer crash and fail to render in Interface Builder when the application target links to this SDK via CocoaPods. (#2179)
- Fixed a crash that could occur when statically initializing a
Styleif the SDK was installed using CocoaPods. (#2179) - Fixed incorrect animation of instruction labels when presenting the step list. (#2185)
- Upgraded to Mapbox Maps SDK for iOS v5.1.0. (#2134)
- Added the ability to define a custom view controller for the top banner via
NavigationOptions.topBanner. (#2121) - StyleManager now posts a
StyleManagerDidApplyStyleNotificationwhen a style gets applied due to a change of day of time, or when entering or exiting a tunnel. (#2148) - Fixed a crash when presenting
NavigationViewControlleron iOS 13.0. (#2156) - Added a setter to the
Router.reroutesProactivelyproperty. (#2157) - Added a Yoruba localization. (#2159)
- Upgraded to Mapbox Maps SDK for iOS v5.0.0, which changes how monthly active users are counted. (#2133)
- Deprecated
StatusViewDelegatein favor of calling theUIControl.addTarget(_:action:for:)method onStatusViewforUIControl.Event.valueChanged. (#2136) - Fixed an issue where the status view showed a simulated speed factor as an unformatted number. (#2136)
- Fixed an issue preventing the status view from appearing while rerouting. (#2137)
- The
RouteOptions.alleyPriority,RouteOptions.walkwayPriority, andRouteOptions.speedproperties now work when calculating walking routes offline. (#2142)
- Restored the compass to
CarPlayNavigationViewController, now displaying a digital readout of the direction of travel, represented by theCarPlayCompassViewclass. (#2077)
- Fixed an issue where
RouteControllerNotificationUserInfoKey.isProactiveKeywas not set totrueinNotification.Name.routeControllerDidReroutenotifications after proactively rerouting the user. (#2086) - Fixed an issue where
LegacyRouteControllerfailed to callNavigationServiceDelegate.navigationService(_:didPassSpokenInstructionPoint:routeProgress:)and omittedRouteControllerNotificationUserInfoKey.spokenInstructionKeyfromNotification.Name.routeControllerDidPassSpokenInstructionPointnotifications. (#2089) - Fixed an issue where
SimulatedLocationManager’s distance did not update in response to updating theRouter’s route, causing the user puck to be snapped to an invalid location on the new route. (#2096) NavigationMatchOptions.shapeFormatnow defaults toRouteShapeFormat.polyline6for consistency withNavigationRouteOptionsand compatibility with theRouteController. (#2084)- Fixed an issue where the user location was unsnapped when the user’s course was unavailable. (#2092)
- Fixed an issue where a failed rerouting request prevented
LegacyRouteControllerfrom ever rerouting the user again. (#2093)
- Fixed an issue where the remaining distance and travel time displayed during turn-by-turn navigation were calculated relative to the upcoming waypoint instead of the final destination. (#2119)
- Deprecated
CarPlayManager.overviewButtonin favor ofCarPlayManager.userTrackingButton, which updates the icon correctly when panning out of tracking state. (#2100) - When previewing a route, the distance and estimated travel time are displayed at the bottom of the window. (#2120)
- By default, the destination waypoint name is no longer displayed a second time when previewing a route. To add a subtitle to the preview, implement the
CarPlayManagerDelegate.carPlayManager(_:willPreview:)method; create anMKMapItemwhoseMKPlacemarkhas theStreetkey in its address dictionary. (#2120)
- Fixed compiler warnings in Xcode 10.2 when installing the SDK using CocoaPods. (#2087)
- Fixed an issue where the user puck could float around while the user is at rest or moving in reverse. (#2109)
- Fixed a number of warnings and errors when building the SDK from source using CocoaPods in Swift 4.2. (#2058)
- Restored “Declaration” and “Parameters” sections throughout the API reference. (#2076)
- Deprecated
NavigationMapView.navigationMapDelegatein favor ofNavigationMapView.navigationMapViewDelegate. (#2061) - The
NavigationMapView.navigationMapViewDelegateandRouteVoiceController.voiceControllerDelegateproperties are now accessible in Objective-C. (#2061) - The sources added to the style by
NavigationMapView.showRoutes(_:legIndex:)once again enablesMGLShapeSourceOptions.lineDistanceMetrics. (#2071) - Deprecated
NavigationDirections.configureRouter(tilesURL:translationsURL:completionHandler:)in favor ofNavigationDirections.configureRouter(tilesURL:completionHandler:). (#2079) - Fixed a crash that occurred if the
RoutelackedSpokenInstructiondata, such as if the request was made usingRouteOptionsinstead ofNavigationRouteOptionsor if the route was generated by a non-Mapbox API. (#2079)
- Fixed an issue where the wrong instruction could be announced or a crash could occur near maneuvers when using a
RouteController. (#2004, #2029) - Restored the
RouteController.reroutesProactivelyproperty. By default,RouteControllerandLegacyRouteControllerproactively check for a faster route on an interval defined byRouteControllerProactiveReroutingInterval. (#1986) - Added a
RouteControllerMinimumDurationRemainingForProactiveReroutingglobal variable to customize whenRouteControllerstops looking for more optimal routes as the user nears the destination. (#1986) - Fixed a bug which would cancel an ongoing reroute request when the request takes longer than one second to complete. (#1986)
- Fixed an issue where rerouting would ignore any waypoints from the original route options where the
Waypoint.separatesLegsproperty was set tofalse. (#2014)
- Removed
NavigationViewController.carPlayManager(_:didBeginNavigationWith:window:)that created and presented aNavigationViewController. Have yourNavigationViewControllerDelegate(such as aUIViewControllersubclass, or a discrete delegate) create and present aNavigationViewController. (#2045) - Removed
NavigationViewController.carPlayManagerDidEndNaviation(_:window:). Have yourNavigationViewControllerDelegate(such as aUIViewControllersubclass, or a discrete delegate) dismiss the activeNavigationViewController. (#2045) - Fixed an issue where
CarPlayManagersometimes created a redundantNavigationServiceobject, resulting in unexpected behavior. (#2041) - Fixed an issue where
CarPlayManagersometimes created and presented a redundantNavigationViewController. (#2041) - Added the
CarPlayManager.beginNavigationWithCarPlay(_:navigationService:)method. Use this method to programmatically start navigation in CarPlay if CarPlay is being connected while turn-by-turn navigation is already underway on the iOS device. (#2021) - Renamed the
CarPlayManagerDelegate.carPlayManager(_:navigationServiceAlong:)method toCarPlayManagerDelegate.carPlayManager(_:navigationServiceAlong:desiredSimulationMode:).CarPlayManagerDelegateimplementations are now required to implement this method. (#2018, #2021) - Renamed the
MapboxVoiceController(speechClient:dataCache:audioPlayerType:)initializer toMapboxVoiceController(navigationService:speechClient:dataCache:audioPlayerType:)and theRouteVoiceController()initializer toRouteVoiceController(navigationService:). (#2018) - Added the
CarPlayManagerDelegate.carPlayManager(_:didFailToFetchRouteBetween:options:error:)method, which allows you to present an alert on the map template when a route request fails. (#1981) - A modal alert is no longer displayed when the user arrives at an intermediate waypoint. This fixes a crash that occurred when the user tapped the Continue button. (#2005)
- Added the
CarPlayNavigationViewController.navigationServiceproperty. (#2005) CarPlayNavigationDelegate.carPlayNavigationViewControllerDidDismiss(_:byCanceling:)is now optional. (#2005)- Removed the
CarPlayNavigationDelegate.carPlayNavigationViewControllerDidArrive(_:)method in favor ofNavigationServiceDelegate.navigationService(_:didArriveAt:). (#2005, #2025) - Fixed an issue where the camera would sometimes fail to animate properly when returning to the browsing activity. #2022)
- Removed the compass from
CarPlayNavigationViewController. (#2051)
- Fixed an issue where the turn banner stayed blank when using a
RouteController. (#1996) - The
BottomBannerViewControllernow accounts for the safe area inset if present. (#1982) - Deprecated
BottomBannerViewController(delegate:). Set theBottomBannerViewController.delegateproperty separately after initializing aBottomBannerViewController. (#2027) - The map now pans when the user drags a
UserCourseView. (#2012) - Added a Japanese localization. (#2032)
- Fixed a compiler error when rendering a
NavigationViewControllerdesignable inside an Interface Builder storyboard. (#2039) - Fixed an issue where the user puck moved around onscreen while tracking the user’s location. (#2047)
- Fixed an issue where the user puck briefly moved away from the route line as the user completed a turn. (#2047)
- Fixed an issue where
RouteControllercould not advance to a subsequent leg along the route. (#1979) - Fixed an issue where the turn banner remained blank and
RouterDelegate.router(_:didPassVisualInstructionPoint:routeProgress:)was never called ifMapboxNavigationServicewas created with aLegacyRouteControllerrouter. (#1983) - Fixed an issue causing
LegacyRouteControllerto prematurely advance to the next step when receiving an unreliable course from Core Location. (#1989)
- Fixed an issue preventing
CarPlayMapViewControllerandCarPlayNavigationViewControllerfrom applying custom map styles. (#1985) - Renamed
-[MBStyleManagerDelegate styleManager:didApply:]to-[MBStyleManagerDelegate styleManager:didApplyStyle:]in Objective-C. If yourStyleManagerDelegate-conforming class is written in Swift, make sure its methods matchStyleManagerDelegate’s method signatures, including@objcannotations. (#1985)
PortableRouteControllerhas been renamed toRouteController. The previousRouteControllerhas been renamed toLegacyRouteControllerand will be removed in a future release. (#1904)- Added the
MapboxNavigationService.router(_:didPassVisualInstructionPoint:routeProgress:)andMapboxNavigationService.router(_:didPassSpokenInstructionPoint:routeProgress:)methods, which correspond toNotification.Name.routeControllerDidPassVisualInstructionPointandNotification.Name.routeControllerDidPassSpokenInstructionPoint, respectively. (#1912) - Added an initializer to
DispatchTimer, along with methods for arming and disarming the timer. (#1912)
- You can now customize the control layer of the map template comprising of the navigation bar's leading and trailing buttons and the map buttons. (#1962)
- Added new map buttons in the
CarPlayManagerand theCarPlayMapViewController. You can now access map buttons that perform built-in actions on the map by accessing read-only properties such as:CarPlayManager.exitButton,CarPlayManager.muteButton,CarPlayManager.showFeedbackButton,CarPlayManager.overviewButton,CarPlayMapViewController.recenterButton,CarPlayMapViewController.zoomInButton,CarPlayMapViewController.zoomOutButton,CarPlayMapViewController.panningInterfaceDisplayButton(for:),CarPlayMapViewController.panningInterfaceDismissalButton(for:). (#1962)
- Replaced
NavigationViewController(for:styles:navigationService:viewController:)withNavigationViewController(for:options:), which accepts aNavigationOptionsobject (not to be confused withNavigationRouteOptions).NavigationOptionscontains various options for customizing the user experience of a turn-by-turn navigation session, including replacing the bottom banner with a custom view controller. (#1951) - Restored “Declaration” and “Parameters” sections throughout the API reference. (#1952)
- Removed the deprecated
NavigationViewController.routeController,NavigationViewController.eventsManager, andNavigationViewController.locationManagerproperties. (#1904) - Fixed audio ducking issues. (#1915)
- Removed the
NavigationViewControllerDelegate.navigationViewController(_:imageFor:)andNavigationViewControllerDelegate.navigationViewController(_:viewFor:)methods in favor ofNavigationMapViewDelegate.navigationMapView(_:imageFor:)andNavigationMapViewDelegate.navigationMapView(_:viewFor:), respectively. (#1964) - The
NavigationViewController.navigationServiceproperty is now read-only. (#1965) - CarPlayManager now offers its delegate the opportunity to customize a trip and its related preview text configuration before displaying it for preview (#1955)
- Xcode 10 or above is now required for building this SDK. (#1936)
- Search functionality on CarPlay is now managed by
CarPlaySearchController. Added theCarPlayManagerDelegate.carPlayManager(_:selectedPreviewFor:using:)method for any additional customization after a trip is selected on CarPlay. (#1846) - Added the
NavigationViewController.showEndOfRouteFeedback(duration:completionHandler:)method for showing the end-of-route feedback UI after manually ending a navigation session. (#1932) - Fixed inaudible spoken instructions while other audio is playing. (#1933)
- Fixed an issue where setting
Router.routedid not updateSimulatedLocationManager.route. (#1928) - Fixed an issue where U-turn lane was displayed as a U-turn to the right even in regions that drive on the right. (#1910)
- Fixed an issue where a left-or-through lane was displayed as a right turn lane. (#1910)
- Programmatically setting
Router.routeno longer causesNavigationViewControllerDelegate.navigationViewController(_:shouldRerouteFrom:)orRouterDelegate.router(_:shouldRerouteFrom:)to be called. (#1931) - Fixed redundant calls to
NavigationViewControllerDelegate.navigationViewController(_:shouldRerouteFrom:)andRouterDelegate.router(_:shouldRerouteFrom:)when rerouting repeatedly. (#1930)
- The
NavigationDirections.unpackTilePack(at:outputDirectoryURL:progressHandler:completionHandler:)method is now available to Objective-C code as-[MBNavigationDirections unpackTilePackAtURL:outputDirectoryURL:progressHandler:completionHandler:]. (#1891) - Added support for styles powered by version 8 of the Mapbox Streets source. (#1909)
- Fixed potential inaccuracies in location snapping, off-route detection, and the current road name label. (mapbox/turf-swift#74)
- Added a
NavigationDirectionsclass that manages offline tile packs and client-side route calculation. (#1808) - Extended
BundlewithBundle.suggestedTileURLand other properties to facilitate offline downloads. (#1808)
- When selecting a search result in CarPlay, the resulting routes lead to the search result’s routable location when available. Routes to a routable location are more likely to be passable. (#1859)
- Fixed an issue where the CarPlay navigation map’s vanishing point and user puck initially remained centered on screen, instead of accounting for the maneuver panel, until the navigation bar was shown. (#1856)
- Fixed an issue where route shields and exit numbers appeared blurry in the maneuver panel on CarPlay devices and failed to appear in the CarPlay simulator. (#1868)
- Added
VisualInstruction.containsLaneIndications,VisualInstruction.maneuverImageSet(side:),VisualInstruction.shouldFlipImage(side:), andVisualInstruction.carPlayManeuverLabelAttributedText(bounds:shieldHeight:window:). (#1860) RouteLegProgress.upComingStephas been renamed toupcomingStep. (#1860)
- The
NavigationSettings.sharedproperty is now accessible in Objective-C code asMBNavigationSettings.sharedSettings. (#1882) - Fixed spurious rerouting on multi-leg routes. (#1884)
- Fixed a hang that occurred when failing to fetch a route shield image for display in a visual instruction banner. (#1888)
- Adding property
RouteController.nearbyCoordinates, which offers similar behavior toRouteLegProgress.nearbyCoordinates, which the addition of step lookahead/lookbehind in multi-leg routes. (#1883) - The
MGLShapeSourceOptions.lineDistanceMetricsproperty has been temporarily disabled from the route line shape source due to a crash. This means it isn’t possible to set theMGLLineStyleLayer.lineGradientproperty on the route line style layers. (#1886)
- Renamed
CarPlayManager.calculateRouteAndStart(from:to:completionHandler:)toCarPlayManager.previewRoutes(between:completionHandler:)and added aCarplayManager.previewRoutes(to:completionHandler), as well as aCarPlayManager.previewRoutes(for:completionHandler:)method that accepts an arbitraryNavigationRouteOptionsobject. (#1841) - Fixed an issue causing
UserCourseViewto lag behindNavigationMapViewwhenever the map’s camera or content insets change significantly or when the map rotates. (#1838) - Renamed
CarPlayManager(_:)toCarPlayManager(styles:directions:eventsManager:)andCarPlayNavigationViewController(with:mapTemplate:interfaceController:manager:styles:)toCarPlayNavigationViewController(navigationService:mapTemplate:interfaceController:manager:styles:). These initializers now accept an array ofStyleobjects to apply throughout the CarPlay interface, similar toNavigationViewController. You can also change the styles at any time by setting theCarPlayManager.stylesproperty. (#1836) CarPlayManager(styles:directions:eventsManager:)also allows you to pass in a customDirectionsobject to use when calculating routes. (#1834)- Removed the
StyleManager(_:)initializer. After initializing aStyleManagerobject, set theStyleManager.delegateproperty to ensure that the style manager’s settings take effect. (#1836) - Added
CarPlayManager.mapViewandCarPlayNavigationViewController.mapViewproperties. (#1852) - Some additional members of
CarPlayManagerare now accessible in Objective-C code. (#1836) - Fixed an issue where distances are incorrectly displayed as “0 m” in regions that use the metric system. (#1854)
- Fixed an issue where the user puck pointed away from the route line during turn-by-turn navigation in CarPlay. The map’s vanishing point now accounts for safe area insets, including the side maneuver view. (#1845)
- Fixed an issue where the map view used for browsing and previewing failed to call
MGLMapViewDelegate.mapView(_:viewFor:)andMGLMapViewDelegate.mapViewWillStartLocatingUser(_:). (#1852) - You can now create a
UserPuckCourseViewusing theUserPuckCourseView(frame:)initializer. (#1852)
- Fixed a crash during turn-by-turn navigation. (#1820)
- Fixed a crash that could happen while simulating a route. (#1820)
- Fixed an issue causing MapboxVoiceController to speak instructions using VoiceOver instead of the Mapbox Voice API. (#1830)
- Added
NavigationViewController.navigationService(_:willArriveAt:after:distance:)to assist with preparations for arrival. (#1847)
- It is now safe to set the
NavigationMapView.delegateproperty of theNavigationMapViewinNavigationViewController.mapView. ImplementMGLMapViewDelegatein your own class to customize annotations and other details. (#1601) - Fixed an issue where the map view while navigating in CarPlay showed labels in the style’s original language instead of the local language. (#1601)
- Fixed an issue where rerouting could still occur after arrival, even though
NavigationServiceDelegate.navigationService(_:shouldPreventReroutesWhenArrivingAt:)returnedtrue. (#1833) NavigationMapViewDelegate.navigationMapView(_:routeStyleLayerWithIdentifier:source:),NavigationMapViewDelegate.navigationMapView(_:routeCasingStyleLayerWithIdentifier:source:),NavigationViewControllerDelegate.navigationViewController(_:routeStyleLayerWithIdentifier:source:), andNavigationViewControllerDelegate.navigationViewController(_:routeCasingStyleLayerWithIdentifier:source:)can now set theMGLLineStyleLayer.lineGradientproperty. (#1799)- Reduced the
NavigationMapView.minimumFramesPerSecondproperty’s default value from 30 frames per second to 20 frames per second for improved performance on battery power. (#1819)
CarPlayManageris no longer a singleton; your application delegate is responsible for creating and owning an instance of this class. This fixes a crash in applications that specify the access token programmatically instead of in the Info.plist file. (#1792)NavigationService.start()now sets the first coordinate on a route, if a fixed location isn't available the first few seconds of a navigation session. (#1790)
- Fixed over-retain issue that resulted in the
MapboxNavigationServicepersisting beyond its expected lifecycle. This could cause unexpected behavior with components that observe progress noitifications. - Fixed warnings caused by internal usage of deprecated types.
- Fixed an issue where the U-turn icon in the turn banner pointed in the wrong direction. (#1647)
- Fixed an issue where the user puck was positioned too close to the bottom of the map view, underlapping the current road name label. (#1766)
- Added
InstructionsBannerView.showStepIndicatorto enable showing/hiding the drag indicator (#1772) - Renamed
EventsManagertoNavigationEventsManager. (#1767) - Added support in
NavigationEventsManagerthat allows for routeless events. (#1767)
- Added ability to adjust
poorGPSPatienceof aNavigationService. #1763 - Increased default Poor-GPS patience of
MapboxNavigationServiceto 2.5 seconds. #1763 - Fixed an issue where the map view while navigating in CarPlay displayed the day style even at night. (#1762)
- Added a dependency on the Mapbox Navigation Native framework. If you use Carthage to install this framework, your target should also link against
MapboxNavigationNative.framework. (#1618)
- Added a
NavigationServiceprotocol implemented by classes that provide location awareness functionality. Our default implementation,MapboxNavigationServiceconforms to this protocol. (#1602)- Added a new
Routerprotocol, which allows for custom route-following logic. Our default implementation,RouteController, conforms to this protocol. NavigationViewController.init(for:styles:directions:styles:routeController:locationManager:voiceController:eventsManager)has been renamedNavigationViewController.init(for:styles:navigationService:voiceController:).NavigationViewController.routeControllerhas been replaced byNavigationViewController.navigationService.- If you currently use
RouteControllerdirectly, you should migrate toMapboxNavigationService. - If you currently use
SimulatedLocationManagerdirectly, you should instead passSimulationOption.alwaysintoMapboxNavigationService(route:directions:locationSource:eventsManagerType:simulating:). - Note: the
MapboxNavigationService, by default, will start simulating progress if more than 1.5 seconds elapses without any update from the GPS. This can happen when simulating locations in Xcode, or selecting the "Custom Location" simulation option in the iOS Simulator. This is normal behavior.
- Added a new
- Improved the reliability of off-route detection. (#1618)
StyleManagerDelegate.locationFor(styleManager:)has been renamed toStyleManagerDelegate.location(for:)(#1724)- Fixed inaccurate maneuver arrows along the route line when the route doubles back on itself. (#1735)
- Added an
InstructionsBannerView.swipeableproperty that allows the user to swipe the banner to the side to preview future steps. TheInstructionsBannerViewDelegate.didDragInstructionsBanner(_:)method has been deprecated in favor ofInstructionsBannerViewDelegate.didSwipeInstructionsBanner(_:swipeDirection:). (#1750) NavigationMapViewno longer mutates its own frame rate implicitly. A newNavigationMapView.updatePreferredFrameRate(for:)method allows you to update the frame rate in response to route progress change notifications. TheNavigationMapView.minimumFramesPerSecondproperty determines the frame rate while the application runs on battery power. By default, the map views inNavigationViewControllerand CarPlay’s navigation activity animate at a higher frame rate on battery power than before. (#1749)- Fixed a crash that occurred when the end of route view controller appears, showing the keyboard. (#1754)
- In CarPlay-enabled applications on iOS 12, this SDK now displays a map, search interface, and turn-by-turn navigation experience on the connected CarPlay device. The CarPlay screen is managed by the shared
CarPlayManagerobject, which you can configure by implementing theCarPlayManagerDelegateprotocol. (#1714) - Added the
Style.previewMapStyleURLproperty for customizing the style displayed by a preview map. (#1695)
- Breaking change: The
eventsManagerargument ofRouteController(along:directions:locationManager:eventsManager:)is now required.NavigationViewController(for:directions:styles:locationManager:voiceController:eventsManager:)now has an optionaleventsManagerargument, which is passed to any instance ofRouteControllercreated as a result of rerouting. (#1671) - Fixed issues where the user puck would overshoot a turn or drift away from a curved road. (#1710)
- Fixed incorrect conversions to inches in
DistanceFormatter. (#1699) - Fixed several crashes related to telemetry collection. (#1668)
- Upgraded mapbox-events-ios to v0.5.0 to avoid a potential incompatibility when using Carthage to install the SDK.
- Fixed a bug which prevented automatic day and night style switching. (#1629)
- While traveling on a numbered road, the route number is displayed in a shield beside the current road name at the bottom of the map. (#1576)
- Added the
shouldManageApplicationIdleTimerflag toNavigationViewControllerto allow applications to opt out of automaticUIApplication.isIdleTimerDisabledmanagement. (#1591) - Added various methods, properties, and initializers to
StatusView, allowing you to use it in a custom user interface. (#1612) - Added
StyleManager.automaticallyAdjustsStyleForTimeOfDay,StyleManager.delegate, andStyleManager.stylesproperties so that you can control same time-based style switching just asNavigationViewControllerdoes. #1617 - Fixed an issue where the banner was stuck on rerouting past the reroute threshold when simulating navigation. (#1583)
- Fixed an issue where the banner appears in the wrong colors after you tap the Resume button. (#1588, #1589)
NavigationMapView’s user puck now responds to changes to the safe area insets while tracking the user’s location, matching the behavior of the map camera. (#1653)- Added
StepsViewControllerDelegateandInstructionsBannerViewDelegatewhich makes it possible to listen in on tap events that occur inStepsViewControllerandInstructionsBannerView. #1633
- Added a
FeedbackViewControllerclass for soliciting feedback from the user in a custom user interface. (#1605) - Replaced
NavigationViewControllerDelegate.navigationViewControllerDidOpenFeedback(_:)withFeedbackViewControllerDelegate.feedbackViewControllerDidOpen(_:),NavigationViewControllerDelegate.navigationViewControllerDidCancelFeedback(_:)withFeedbackViewControllerDelegate.feedbackViewController(_:didSend:uuid:), andNavigationViewControllerDelegate.navigationViewController(_:didSendFeedbackAssigned:feedbackType)withFeedbackViewControllerDelegate.feedbackViewControllerDidCancel(_:). (#1605) - Fixed a crash that occurred when the end of route view controller appears, showing the keyboard. (#1599)
- Added a
MapboxVoiceController.audioPlayerproperty. You can use this property to interrupt a spoken instruction or adjust the volume. (#1596) - Fixed a memory leak when
RouteController.isDeadReckoningEnabledis enabled. (#1624)
- The
MGLStyle.navigationGuidanceDayStyleURLandMGLStyle.navigationGuidanceNightStyleURLproperties now return version 4 of the Mapbox Navigation Guidance Day and Night styles, respectively. These styles indicate incidents such as road closures and detours. (#1619) - Added an
MGLMapView.showsIncidentsproperty to toggle the visibility of any Mapbox Incidents data on a map view. (#1613)
- Fixed build errors when installing this SDK with Mapbox Maps SDK for iOS v4.3.0 or above. (#1608, #1609)
- Moved guides and examples to a new Mapbox Navigation SDK for iOS website. (#1552)
- Applications intended for use in mainland China can set the
MGLMapboxAPIBaseURLkey in Info.plist tohttps://api.mapbox.cn/to use China-optimized APIs. This setting causesNavigationMapViewto default to China-optimized day and night styles with places and roads labeled in Simplified Chinese. (#1558)
- Fixed an issue where selecting a step from the steps list would take the user to the wrong step. (#1524)
- The
StyleManagerDelegate.locationFor(styleManager:)method’s return value is now optional. (#1523) NavigationViewControllersmoothly fades between light and dark status bars. (#1535)- Renamed the
InstructionsBannerView.updateInstruction(_:)method toInstructionsBannerView.update(for:). Added theNextBannerView.update(for:)andLanesView.update(for:)methods. These methods are intended to be called in response toNotification.Name.routeControllerDidPassVisualInstructionPointif the views are used outside aNavigationViewController. By contrast,InstructionsBannerView.updateDistance(for:)should be called on every location update. (#1514) - Added the
ManeuverView.visualInstructionandManeuverView.drivingSideproperties. (#1514)
- Increased the minimum deployment target of Core Navigation to iOS 9. (#1494)
- Added
NavigationMapView.recenterMap()for recentering the map if a user gesture causes it to stop following the user. (#1471) - Deprecated
NavigationViewController.usesNightStyleInsideTunnels. Style switching is enabled as a side effect ofTunnelIntersectionManager.tunnelSimulationEnabled, which is set totrueby default. ([#1489] - Fixed an issue where the user location view slid around after the user pressed the Overview button. #1506
- Moved
RouteController.tunnelSimulationEnabledtoTunnelIntersectionManager.tunnelSimulationEnabled. (#1489) (mapbox#1489)) - Added
RouteControllerDelegate.routeControllerWillDisableBatteryMonitoring(_:)which allows developers control whether battery monitoring is disabled whenRouteController.deinit()is called. #1476 - Fixed an issue where setting
NavigationLocationManager.desiredAccuracyhad no effect. #1481
- Added support for generic route shields. Image-backed route shields also now display as generic (instead of plain text) while the SDK loads the image. #1190, #1417
- Fixed an issue when going into overhead mode with a short route. #1456
- Adds support for Xcode 10 Beta 1. #1499, #1478
TunnelIntersectionManagerDelegatemethods no longer take a completion handler argument. (#1414)- Added the ability to render more than 1 alternate route. #1372
NavigationMapViewDelegate.navigationMapView(_:shapeFor:)Now expects an array ofRoute. The first route will be rendered as the main route, all subsequent routes will be rendered as alternate routes.- Animating the user through tunnels and automatically switching the map style when entering a tunnel is now on by default. #1449
- Adds
RouteControllerDelegate.routeController(_:shouldPreventReroutesWhenArrivingAt:waypoint:)which is called each time a driver arrives at a waypoint. By default, this method returns true and prevents rerouting upon arriving. Progress updates still occur. #1454
- Upgraded to the Mapbox Maps SDK for iOS v4.0.0. If you have customized the route map’s appearance, you may need to migrate your code to use expressions instead of style functions. (#1076)
- Added a Korean localization. (#1346)
- Exit indications are now drawn accurately with a correct exit heading. (#1288)
- Added the
NavigationViewControllerDelegate.navigationViewController(_:roadNameAt:)method for customizing the contents of the road name label that appears towards the bottom of the map view. (#1309) - If the SDK tries but fails to reroute the user, the “Rerouting…” status view no longer stays visible permanently. (#1357)
- Completed waypoints now remain on the map but are slightly translucent. (#1364)
- Fixed an issue preventing
NavigationViewController.navigationMapView(_:simplifiedShapeDescribing:)(nowNavigationViewController.navigationMapView(_:simplifiedShapeFor:)) from being called. (#1413)
- Fixed an issue causing the wrong instructions to be spoken. (#1396)
- The
RouteController.routeProgressproperty is now available in Objective-C. (#1323) - Added a
RouteController.tunnelSimulationEnabledoption that keeps the user location indicator moving steadily while the user travels through a tunnel and GPS reception is unreliable. (#1218)
DistanceFormatter,ReplayLocationManager,SimulatedLocationManager,LanesView, andManueverVieware now subclassable. (#1345)- Renamed many
NavigationViewControllerandNavigationMapViewDelegatemethods (#1364, #1338, #1318, #1378, #1413):NavigationViewControllerDelegate.navigationViewControllerDidCancelNavigation(_:)toNavigationViewControllerDelegate.navigationViewControllerDidDismiss(_:byCanceling:)-[MBNavigationViewControllerDelegate navigationViewController:didArriveAt:]to-[MBNavigationViewControllerDelegate navigationViewController:didArriveAtWaypoint:]in Objective-CNavigationViewControllerDelegate.navigationMapView(_:routeStyleLayerWithIdentifier:source:)toNavigationViewControllerDelegate.navigationViewController(_:routeStyleLayerWithIdentifier:source:)NavigationViewControllerDelegate.navigationMapView(_:routeCasingStyleLayerWithIdentifier:source:)toNavigationViewControllerDelegate.navigationViewController(_:routeCasingStyleLayerWithIdentifier:source:)NavigationViewControllerDelegate.navigationMapView(_:shapeFor:)toNavigationViewControllerDelegate.navigationViewController(_:shapeFor:)NavigationViewControllerDelegate.navigationMapView(_:simplifiedShapeFor:)toNavigationViewControllerDelegate.navigationViewController(_:simplifiedShapeFor:)NavigationViewControllerDelegate.navigationMapView(_:waypointStyleLayerWithIdentifier:source:)toNavigationViewControllerDelegate.navigationViewController(_:waypointStyleLayerWithIdentifier:source:)NavigationViewControllerDelegate.navigationMapView(_:waypointSymbolStyleLayerWithIdentifier:source:)toNavigationViewControllerDelegate.navigationViewController(_:waypointSymbolStyleLayerWithIdentifier:source:)NavigationViewControllerDelegate.navigationMapView(_:shapeFor:legIndex:)toNavigationViewControllerDelegate.navigationViewController(_:shapeFor:legIndex:)NavigationViewControllerDelegate.navigationMapView(_:didTap:)toNavigationViewControllerDelegate.navigationViewController(_:didSelect:)NavigationViewControllerDelegate.navigationMapView(_:imageFor:)toNavigationViewControllerDelegate.navigationViewController(_:imageFor:)NavigationViewControllerDelegate.navigationMapView(_:viewFor:)toNavigationViewControllerDelegate.navigationViewController(_:viewFor:)NavigationViewControllerDelegate.navigationViewController(_:didSend:feedbackType:)toNavigationViewControllerDelegate.navigationViewController(_:didSendFeedbackAssigned:feedbackType:)-[MBNavigationViewControllerDelegate navigationViewController:shouldDiscard:]to-[MBNavigationViewControllerDelegate navigationViewController:shouldDiscardLocation:]in Objective-C-[MBNavigationViewControllerDelegate navigationViewController:roadNameAt:]to-[MBNavigationViewControllerDelegate navigationViewController:roadNameAtLocation:]NavigationMapViewDelegate.navigationMapView(_:shapeDescribing:)toNavigationMapViewDelegate.navigationMapView(_:shapeFor:).NavigationMapViewDelegate.navigationMapView(_:simplifiedShapeDescribing:)toNavigationMapViewDelegate.navigationMapView(_:simplifiedShapeFor:).-[MBNavigationMapViewDelegate navigationMapView:shapeDescribingWaypoints:legIndex:]to-[MBNavigationMapViewDelegate navigationMapView:shapeForWaypoints:legIndex:]in Objective-C
RouteController.recordFeedback(type:description:)now returns aUUIDinstead of a string. SomeRouteControllermethods have been renamed to acceptUUIDs as arguments instead of strings. (#1413)- Renamed
TunnelIntersectionManagerDelegate.tunnelIntersectionManager(_:willEnableAnimationAt:callback:)toTunnelIntersectionManagerDelegate.tunnelIntersectionManager(_:willEnableAnimationAt:completionHandler:)andTunnelIntersectionManagerDelegate.tunnelIntersectionManager(_:willDisableAnimationAt:callback:)toTunnelIntersectionManagerDelegate.tunnelIntersectionManager(_:willDisableAnimationAt:completionHandler:). (#1413)
- Fixed a compiler error after installing the SDK using CocoaPods. (#1296)
- Draws slight right and left turn icons for slight turns in the turn lane view. #1270
- Fixed a crash that was caused by check the edit distance of an empty string. #1281
- Removes warnings when using Swift 4.1. #1271
- Fixed an issue that would preemptively fallback to the default speech synthesizer. #1284
- While the user travels through a tunnel,
NavigationMapViewtemporarily applies a night style (a style whosestyleTypeproperty is set toStyleType.night). (#1127) - The user can reveal the list of upcoming steps by swiping downward from the top banner. (#1150)
- Renamed
StyleType.dayStyleandStyleType.nightStyletoStyleType.dayandStyleType.night, respectively. (#1250) - Fixed an issue causing the overview map to insist on centering the route upon each location update. (#1223)
- Improved the contrast of
TimeRemainingLabel.trafficSevereColoragainstBottomBannerView.backgroundColorinNightStyle. (#1228) - Fixed an issue where a slash appeared between two shields in the top banner. (#1169)
- Fixed an issue where using
NavigationMapViewControllerDelegate.navigationMapView(_:imageFor:)would not override the destination annotation. (#1256) - Adds a handle at the bottom of the banner to reveals additional instructions. (#1253)
- Audio data for spoken instructions is cached in device storage to minimize data usage. (#12296)
- Renamed the
RouteController.reroutesOpportunisticallyproperty toRouteController.reroutesProactively,RouteControllerOpportunisticReroutingIntervalglobal variable toRouteControllerProactiveReroutingInterval, and theRouteControllerNotificationUserInfoKey.isOpportunisticKeyvalue toRouteControllerNotificationUserInfoKey.isProactiveKey. (#1230) - Added a
RouteStepProgress.currentIntersectionproperty that is set to the intersection the user has most recently passed along the route. (#1127) - Fixed an issue where the
RouteStepProgress.upcomingIntersectionproperty was always set to the current step’s first intersection. (#1127) - Added support for using the Mapbox Map Matching API. #1177
- Added Arabic and European Portuguese localizations. (#1252)
NavigationMapViewDelegateandRouteMapViewControllerDelegate:navigationMapView(_:didTap:)is nownavigationMapView(_:didSelect:)#1063- The Constants that concern Route-Snapping logic have been re-named. The new names are:
RouteSnappingMinimumSpeed,RouteSnappingMaxManipulatedCourseAngle, andRouteSnappingMinimumHorizontalAccuracy.
StepsViewController's convenience initializer (StepsViewController.init(routeProgress:)) is now public. (#1167)- Fixed an issue preventing the distance from appearing in the turn banner when the system language was set to Hebrew and the system region was set to Israel or any other region that uses the metric system. (#1176)
- Various views and view controllers correctly mirror right-to-left in Hebrew. (#1182)
RoteControllernow has a new property,snappedLocation. This property represents the raw location, snapped to the current route, if applicable. If not applicable, the value isnil.RouteController'sMBRouteControllerProgressDidChangenotification now exposes the raw location in it's update, accessible byMBRouteControllerRawLocationKey
- Fixed an issue that caused
RouteVoiceControllerandMabpboxVoiceControllerto speak over one another. #1213
- Fixed a crash while navigating that affected applications that do not use Mapbox-hosted styles or vector tiles. #1183
- The
DistanceFormatter.attributedString(for:)method is now implemented. It returns an attributed string representation of the distance in which theNSAttributedStringKey.quantityattribute is applied to the numeric quantity. (#1176) - Fixed an issue in which turn lanes were displayed in the wrong order when the system language was set to Hebrew. (#1175)
- Removed the dependency on AWSPolly. Voice announcements are now coming directly from Mapbox and for free for all developers. Because of this, PollyVoiceController has been removed. #617
- MapboxDirections.swift version 0.17.x is now required. #1085
- Removed the key
RouteControllerNotificationUserInfoKey.estimatedTimeUntilManeuverKeyfrom.routeControllerProgressDidChange. Please usedurationRemaininginstead which can be found on theRouteProgress. #1126 - Renamed notification names associated with
RouteControllerin Objective-C code. #1122 - The user info keys of
RouteController-related notifications have been renamed and are now members of theRouteControllerNotificationUserInfoKeystruct in Swift and theMBRouteControllerNotificationUserInfoKeyextensible enumeration in Objective-C. #1122
Here is reference for the new notification names:
| Swift | Objective-C | ||
|---|---|---|---|
| Old | New | Old | New |
Notification.Name.navigationSettingsDidChange |
Notification.Name.navigationSettingsDidChange |
MBNavigationSettingsDidChange |
MBNavigationSettingsDidChangeNotification |
Notification.Name.routeControllerProgressDidChange |
Notification.Name.routeControllerProgressDidChange |
MBRouteControllerNotificationProgressDidChange |
MBRouteControllerProgressDidChangeNotification |
Notification.Name.routeControllerDidPassSpokenInstructionPoint |
Notification.Name.routeControllerDidPassSpokenInstructionPoint |
MBRouteControllerDidPassSpokenInstructionPoint |
MBRouteControllerDidPassSpokenInstructionPointNotification |
Notification.Name.routeControllerWillReroute |
Notification.Name.routeControllerWillReroute |
MBRouteControllerWillReroute |
MBRouteControllerWillRerouteNotification |
Notification.Name.routeControllerDidReroute |
Notification.Name.routeControllerDidReroute |
MBRouteControllerDidReroute |
MBRouteControllerDidRerouteNotification |
Notification.Name.routeControllerDidFailToReroute |
Notification.Name.routeControllerDidFailToReroute |
MBRouteControllerDidFailToReroute |
MBRouteControllerDidFailToRerouteNotification |
RouteControllerProgressDidChangeNotificationProgressKey |
RouteControllerNotificationUserInfoKey.routeProgressKey |
MBRouteControllerProgressDidChangeNotificationProgressKey |
MBRouteControllerRouteProgressKey |
RouteControllerProgressDidChangeNotificationLocationKey |
RouteControllerNotificationUserInfoKey.locationKey |
MBRouteControllerProgressDidChangeNotificationLocationKey |
MBRouteControllerLocationKey |
RouteControllerProgressDidChangeNotificationSecondsRemainingOnStepKey |
🚮 (removed) | MBRouteControllerProgressDidChangeNotificationSecondsRemainingOnStepKey |
🚮 (removed) |
RouteControllerNotificationLocationKey |
RouteControllerNotificationUserInfoKey.locationKey |
MBRouteControllerNotificationLocationKey |
MBRouteControllerLocationKey |
RouteControllerNotificationRouteKey |
🚮 (unused) | MBRouteControllerNotificationRouteKey |
🚮 (unused) |
RouteControllerNotificationErrorKey |
RouteControllerNotificationUserInfoKey.routingErrorKey |
MBRouteControllerNotificationErrorKey |
MBRouteControllerRoutingErrorKey |
RouteControllerDidFindFasterRouteKey |
RouteControllerNotificationUserInfoKey.isOpportunisticKey |
MBRouteControllerDidFindFasterRouteKey |
MBRouteControllerIsOpportunisticKey |
RouteControllerDidPassSpokenInstructionPointRouteProgressKey |
RouteControllerNotificationUserInfoKey.routeProgressKey |
MBRouteControllerDidPassSpokenInstructionPointRouteProgressKey |
MBRouteControllerRouteProgressKey |
- Location updates sent via
.routeControllerProgressDidChangeare now always sent as long as the location is qualified. #1126 - Exposes
setOverheadCameraView(from:along:for:)which is useful for fitting the camera to an overhead view for the remaining route coordinates. - Changed the heuristics needed for a the users location to unsnap from the route line. #1110
- Changes
routeController(:didDiscardLocation:)torouteController(:shouldDiscardLocation:). Now if implemented, developers can choose to keep a location when RouteController deems a location unqualified. #1095
- Added a
NavigationMapView.localizeLabels()method that should be called withinMGLMapViewDelegate.mapView(_:didFinishLoading:)for standaloneNavigationMapViews to ensure that map labels are in the correct language. #1111 - The
/delimiter is longer shown when a shield is shown on either side of the delimiter. This also removes the dependency SDWebImage. #1046 - Exposes constants used for styling the route line. #1124
- Exposes
update(for:)onInstructionBannerView. This is helpful for developers creating a custom user interface. #1085
- Exposes
RouteVoiceController.speak(_:)which would allow custom subclass of MapboxVoiceController to override this method and pass a modified SpokenInstruction to our superclass implementation.
- Fixes a bug where the
spokenInstructionIndexwas incremented beyond the number of instructions for a step. (#1080) - Fixed a bug that crashed when navigating beyond the final waypoint. (#1087)
- Added
NavigationSettings.distanceUnitto let a user override the default unit of measurement for the device’s region setting. (#1055)
- Added support for spoken instructions in Danish. (#1041)
- Updated translations for Russian, Swedish, Spanish, Vietnamese, Hebrew, Ukrainian, and German. (#1064)
- Fixed a bug that prevented the user puck from laying flat when rotating the map. (#1090)
- Updated translations for Russian, Swedish, Spanish, Vietnamese, Hebrew, Ukrainian, and German. (#1064) (#1089)
- Upgraded to MapboxDirections.swift v0.16.0, which makes
ManeuverType,ManeuverDirection, andTransportTypenon-optional. (#1040) - Added Danish and Hebrew localizations. (#1031, #1043)
- Removed
RouteControllerDelegate.routeController(_:shouldIncrementLegWhenArrivingAtWaypoint:)andNavigationViewControllerDelegate.navigationViewController(_:shouldIncrementLegWhenArrivingAtWaypoint:).RouteControllerDelegate.routeController(_:didArriveAt:)andNavigationViewControllerDelegate.navigationViewController(_:didArriveAt:)now return a Boolean that determines whether the route controller automatically advances to the next leg of the route. (#1038) - Fixed an issue where
NavigationViewControllerDelegate.navigationViewController(_:didArriveAt:)was called twice at the end of the route. (#1038) - Improved the reliability of user location tracking when several location updates arrive simultaneously. (#1021)
- Removed the
WayNameViewclass in favor ofWayNameLabeland renamed theLanesContainerViewclass toLanesView. (#981 ) - Added a
NavigationMapView.tracksUserCourseproperty for enabling course tracking mode when using the map view independently ofNavigationViewController. (#1015)
Beginning with this release, we’ve compiled a set of examples showing how to accomplish common tasks with this SDK. You can also check out the navigation-ios-examples project and run the included application on your device.
- Fixed a crash loading
NavigationViewController. (#977) - Fixed issues causing the user puck to animate at the wrong framerate while the device is unplugged. (#970)
- Fixed unexpected behavior that occurred if only one
Stylewas specified when initializingNavigationViewController. (#990)
- If
RouteControllerinitially follows an alternative route, it now attempts to follow the most similar route after rerouting. (#995) - Fixed an issue preventing the
RouteControllerDelegate.routeController(_:didArriveAt:)method from being called ifnavigationViewController(_:shouldIncrementLegWhenArrivingAtWaypoint:)was unimplemented. (#984) - Added a
VoiceControllerDelegate.voiceController(_:willSpeak:routeProgress:)method for changing spoken instructions on an individual basis. (#988)
- Fixed an issue where the “then” banner appeared at the wrong times. (#957)
- Fixed an issue where the user location view spun around at the end of a leg. (#966)
- Fixed an issue that triggered unnecessary reroutes. (#959)
- The
RouteControllerDelegate.routeController(_:didArriveAt:)method is now called when arriving at any waypoint, not just the last waypoint. (#972) - Added a
RouteController.setEndOfRoute(_:comment:)method for collecting feedback about the route before the user cancels it. (#965)
- If you install this SDK using Carthage, you must now include each of this SDK’s dependencies in your Run Script build phase: AWSCore.framework, AWSPolly.framework, Mapbox.framework, MapboxDirections.framework, MapboxMobileEvents.framework, Polyline.framework, SDWebImage.framework, Solar.framework, and Turf.framework. These dependencies are no longer embedded inside MapboxNavigation.framework. See the Carthage documentation for details. (#930)
- This library no longer depends on OSRM Text Instructions for Swift. If you have previously installed this SDK using Carthage, you may need to remove OSRMTextInstructions.framework from a Run Script build step. (#925)
- Notification names are now members of
Notification.Name. (#943)
- When the user approaches the final waypoint, a panel appears with options for sending feedback about the route. (#848)
- Fixed an issue preventing the “Then” banner from appearing. (#940)
- Fixed an issue that sometimes prevented the night style from being applied. (#904)
- The turn banner’s labels and route shield images are now derived from the Directions API response. (#767)
- Roundabout icons in the turn banner now go clockwise in regions that drive on the left. (#911)
- Fixed an issue that turned the estimated arrival time to black when traffic congestion data was unavailable. (#912)
- Added a Bulgarian localization. Help us speak your language! (#954)
- Updated Dutch, Spanish, Swedish, and Vietnamese translations. (#944)
- Tapping the mute button immediately silences any current announcement. (#936)
- Improved announcements near roundabouts and rotaries when using
NavigationRouteOptions. You can also set theRouteOptions.includesExitRoundaboutManeuverproperty manually to take advantage of this improvement. (#945) - You can customize the AWS region used for Amazon Polly spoken instructions using the
PollyVoiceController(identityPoolId:regionType:)initializer. (#914) - Certain roads tagged with pronunciations in OpenStreetMap are pronounced correctly when Amazon Polly is unavailable. (#624)
- Refined the appearance of the spoken instruction map labels that are enabled via the
NavigationViewController.annotatesSpokenInstructionsproperty. (#907)
- When
SimulatedLocationManageris active, the user can swipe on the “Simulating Navigation” banner to adjust the rate of travel. (#915) - Fixed unnecessary rerouting that sometimes occurred if the user advanced to a subsequent step earlier than expected. (#910)
- If your application’s Info.plist file lacks a location usage description,
NavigationViewControllerwill immediately fail aprecondition. (#947)
Beginning with this release, the navigation SDK and Core Navigation are written in Swift 4 (#663).
- Removed the audio feedback recording feature. You no longer need to add an
NSMicrophoneUsageDescriptionto your Info.plist. (#870) - The Report Feedback button no longer appears after rerouting if
NavigationViewController.showsReportFeedbackis disabled. (#890)
- Added a
StepsViewControllerclass for displaying the route’s upcoming steps in a table view. (#869) - The bottom bar is more compact in landscape orientation. (#863)
- Fixed an issue where the “then” banner appeared too soon. (#865)
- Maneuver arrows are no longer shown for arrival maneuvers. (#884)
- Fixed a crash that sometimes occurred after returning to the application from the background. (#888)
- A new
RouteVoiceController.voiceControllerDelegateproperty lets an object conforming to theVoiceControllerDelegateprotocol know when a spoken instruction fails or gets interrupted by another instruction. (#800, #864)
- Fixed an issue that sometimes prevented
NavigationViewControllerDelegate.navigationViewController(_:didArriveAt:)from getting called. (#883) - Fixed an issue where the user location indicator floated around when starting a new leg. (#886)
- Reverts a change that used AWS's repo for the Polly dependency. This will help with build times when using Carthage. #859
- Updates Polly dependency to v2.6.5 #859
- Aligns the instruction banner and the next banner better. #860
- Fixes a bug on
InstructionsBannerViewandStepInstructionsViewthat prevented them from being styleable. #852 - Fixes a few minor styleable elements on
DayStyleandNightStyle. #858
MGLMapView init(frame:styleURL:)is exposed again onNavigationMapView. #850
- The refresh rate of the user puck remains throttled if the upcoming step is straight. #845
- The
Report Feedbackbutton after rerouting is only displayed for 5 seconds. #853
- Xcode 9 is required for building the navigation SDK or Core Navigation. (#786)
- Added German and Dutch localizations. Help us speak your language! (#778)
- To build and run the provided sample applications, you now have the option to create a plain text file named .mapbox containing a Mapbox access token and place it in your home folder. The SDK will read this file and automatically populate the
MGLMapboxAccessTokenof theInfo.plistat build-time. (#817)
- Improved
NavigationViewController’s layout on iPhone X. (#786, #816) - Refined the turn banner’s appearance. (#745, #788)
- Added a reusable
InstructionBannerViewclass that represents the turn banner. (#745) - Route shields are displayed inline with road or place names in
InstructionBannerView. (#745) - When another step follows soon after the upcoming step, that subsequent step appears in a smaller banner beneath the main turn banner. (#819)
- The map zooms in and out dynamically to show more of the road ahead. (#769, #781)
- Replaced
NavigationMapView.showRoute(_:)withNavigationMapView.showRoutes(_:legIndex:), which can show alternative routes on the map. (#789) - Added a
NavigationMapViewDelegate.navigationMapView(_:didSelect:)method to respond to route selection on the map. (#789, #806) - Added a
NavigationMapViewDelegate.navigationMapView(_:didSelect:)method to respond to waypoint selection on the map. (#806) - Fixed a bug preventing legs beyond the third waypoint from appearing. (#807)
- Decreased the map’s animation frame rate for improved battery life. (#760)
- Spoken instructions are determined by Directions API responses. (#614)
- When Polly is enabled, audio for spoken instructions is fetched over the network ahead of time, reducing latency. (#724, #768)
- The
NavigationViewController.annotatesSpokenInstructionsproperty, disabled by default, makes it easier to see where instructions will be read aloud along the route for debugging purposes. (#727, #826) - Fixed an issue preventing
PollyVoiceControllerfrom ducking background audio while the device is muted using the physical switch. (#805)
- Fixed an issue causing poor user location tracking on iPhone X. (#833)
- The user location indicator is more stable while snapped to the route line. (#754)
- Renamed
RouteController.checkForFasterRouteInBackgroundtoRouteController.reroutesOpportunistically. (#826) - Added a
RouteControllerOpportunisticReroutingIntervalconstant for configuring the interval between opportunistic rerouting attempts. (#826)
- The
NavigationViewController.recordsAudioFeedbackproperty, disabled by default, allows the user to dictate feedback by long-pressing on a feedback item. This option requires theNSMicrophoneUsageDescriptionInfo.plist option. (#719, #826) - Options in the feedback interface are easier to discern from each other. (#761)
- Fixed an issue where the feedback interface appeared automatically after rerouting. (#749)
- Rearranged the feedback options. (#770, #779)
NavigationMapViewuses a custom course tracking mode created from the ground up. The view representing the user’s location (the “user puck”) is larger and easier to see at a glance, and it continues to point in the user’s direction of travel even in Overview mode. To customize the user puck, use theNavigationMapView.userCourseViewproperty. (#402)- Fixed an issue causing the user puck to slide downward from the center of the screen when beginning a new route. (#402)
- You can customize the user puck’s location on screen by implementing the
NavigationViewControllerDelegate.navigationViewController(_:mapViewUserAnchorPoint:)method. (#402) - Improved user course snapping while not moving. (#718)
- Throttled the map’s frame rate while the device is unplugged. (#709)
- Fixed an issue causing the “Rerouting” banner to persist even after a new route is received. (#707)
- A local user notification is no longer posted when rerouting. (#708)
- Pins the dependency
Solarto v2.0.0. This should fix some build issues. #693 - Increases the width of the upcoming maneuver arrow. #671
- Improved user location snapping. #679
- Improves simulation mode by using more accurate speeds. #683
- Adopted Turf. The
wrap(_:min:max:)function has been removed; use Turf’sCLLocationDirection.wrap(min:max:)instead. #653 - Defaulted to
kCLLocationAccuracyBestForNavigationfor location accuracy. #670
- Fixed a bug which caused the upcoming maneuver label in night mode to have a white background (#667).
- Fixed a bug which caused audio announcements to be repeated over one another (#661, #669).
- Fixed a build error that occurred if MapboxNavigation was installed via CocoaPods. (#632)
- The turn banner shows more of the upcoming road name before truncating. (#657)
- When entering a roundabout, the icon in the turn banner indicates the correct direction of travel. (#640)
- When beginning a new route, the SDK announces the initial road and direction of travel. (#654)
- Fixed an issue causing the user’s location to be snapped to the wrong part of the route near a U-turn. (#642)
- Core Navigation detects when the user performs a U-turn earlier than anticipated and promptly calculates a new route. (#646)
- If Amazon Polly is configured but unreachable, the SDK switches to AVSpeechSynthesizer sooner, before the instruction becomes outdated. (#652)
- When instructions are announced by Amazon Polly, dynamic range compression is used to make the audio easier to hear over the din of a moving vehicle. (#635, #662)
- Fixed an issue causing steps to be linked together too frequently. (#573)
- On a freeway, an announcement is read aloud at ¼ mile ahead of a maneuver instead of ½ mile ahead. (#569)
- Separate instructions are given for entering and exiting a roundabout. (#561)
- Rerouting occurs more promptly when the user makes a wrong turn at an intersection. (#560)
- More unreliable location updates are filtered out. (#579)
- Improved how Polly pronounces some road names and numbers. (#618, #622)
- Instructions are read by the higher-quality Alex voice if it is installed and Polly is unconfigured or unavailable. (#612)
- Adjusted the night style to take effect closer to sunset. (#584)
- Fixed an issue where the map bore a day style while the surrounding UI bore a night style. (#572)
- Fixed an issue causing some elements on the map to disappear when switching styles. (#570)
- Fixed an issue causing slight turns to look like regular turns in the turn banner. (#602)
- Large, named roundabouts are symbolized as roundabouts instead of simple intersections in the turn banner. (#574)
- Fixed an issue producing confusing lane arrows at a fork in the road. (#586)
- The notification for a completed maneuver is removed as the user completes that step. (#577)
- The distance in the turn banner changes at a more regular interval. (#626)
- Updated the appearance of various controls in turn-by-turn mode. (#578, #587, #588, #591)
- Arrows in the turn banner can have a different appearance than arrows in the step table. (#571)
- Fixed overly aggressive abbreviation of road names in the turn banner. (#616)
- Fixed an issue preventing road names in the turn banner from being abbreviated when certain punctuation was present. (#618)
- Fixed a crash that occurred when an attempt to calculate a new route failed. (#585)
- Fixed an issue preventing the estimated arrival time from being updated as the user is stuck in traffic. (#595)
- Fixed a crash that sometimes occurred when starting turn-by-turn navigation. (#607)
- Fixed a flash that occurred when rerouting. (#605)
- Fixed memory leaks. (#609, #628)
- Fixed strings in the Hungarian, Swedish, and Vietnamese localizations that had reverted to English. (#619)
- Updated translations in Catalan, Hungarian, Lithuanian, Russian, Spanish, Swedish, and Vietnamese. (#619)
- Added methods to
NavigationViewControllerDelegatethat indicate when the user is sending feedback. (#599) - Fixed an issue where
DistanceFormatter.string(fromMeters:)used the wrong units. (#613)
- Unpinned most dependencies to avoid various build issues introduced in v0.6.1. It is once again possible to use this SDK with the latest Mapbox iOS SDK. (#525)
- Added Russian, Slovenian, and Ukrainian localizations. (#505, #542)
NavigationViewControllerand its map automatically switch between daytime and nighttime styles. (#519)- A banner appears when the device experiences weak GPS reception. (#490)
- A banner also appears when simulation mode is enabled. (#521)
- The time remaining in the bottom bar changes color based on the level of traffic congestion along the remaining route. (#403)
- Added
NavigationViewControllerDelegate.navigationMapView(_:viewFor:)for providing a custom user location annotation and/or destination annotation. (#498) - Moved various properties of
Styleto individual control classes. (#536) - Added properties to
LaneArrowViewfor customizing the appearance of lane indicators. (#490) - Added a
Style.statusBarStyleproperty for customizing the appearance of the status bar. (#512) - A shield now appears in the turn banner on Puerto Rico routes. (#529)
- Fixed an issue preventing an arrow from appearing on the route line when the user swipes the turn banner to a future step. (#532)
- Fixed an issue causing the shield in the turn banner to go blank when the user swipes the turn banner backward. (#506)
- Fixed an issue that caused the camera to stutter when completing a maneuver. (#520)
- Fixed an issue causing the turn banner to remain on a future step after tapping Resume. (#508)
- Fixed an issue where the distance would sometimes be displayed as “0 mm”. (#517)
- Fixed a missing less-than sign in the bottom bar when little time remains on the step or route. (#527)
- Fixed an issue causing Polly to misread abbreviations such as “CR” in route numbers and letters such as “N” in street names. (#552)
- A tone is played when automatically switching to a faster route in the background. (#541)
- Polly now pronounces Italian instructions using an Italian voice. (#542)
- Fixed an issue preventing the SDK from falling back to AVFoundation when Polly is unavailable. (#544)
- Improved the wording of various instructions in Swedish. (Project-OSRM/osrm-text-instructions#138)
- The Spanish localization consistently uses usted form. (Project-OSRM/osrm-text-instructions#137)
- A new
NavigationRouteOptionsclass makes it easier to request a route optimized for turn-by-turn navigation. (#531) - A trip can now consist of multiple legs. (#270)
- Added
SpokenInstructionFormatterandVisualInstructionFormatterclasses for turningRouteSteps into strings appropriate for speech synthesis and display, respectively. (#456) - When the user is moving slowly,
RouteControllersnaps the location and course to the route line more aggressively. (#540) RouteControllermore aggressively snaps the user’s location to the route line at greater distances than before. (#551)- Added
NavigationLocationManager.automaticallyUpdatesDesiredAccuracyto control whether the location manager’s desired accuracy changes based on the battery state. (#504)
- Pinned all dependencies to prevent downstream breaking changes from effecting this library. https://github.com/mapbox/mapbox-navigation-ios/commit/d5c7204b0c9f03564b634da5be135ae35930804c
- Improved the initial camera view when entering navigation. mapbox#482
- Adds support for iPads in the example app. mapbox#477
- Does a better job at unpacking Polly requests to prevent the UI from locking up. mapbox#462
- Inaccurate locations are now filtered out. mapbox#441
- Lanes are now only showed for
.highand.mediumalerts. mapbox#444 - The reroute sound is not played when muted. mapbox#450
- Adds a new
StatusViewfor displaying reroute and location accuracy information. https://github.com/mapbox/mapbox-navigation-ios/commit/b942844c52c026342b6237186715468091c53c9a - AlertLevel distances no longer incorporate user speed for knowing when to give an announcement. mapbox#448
- By default, NavigationMapView displays the Navigation Guidance Day v2 style. A Navigation Preview Day v2 style (
mapbox://styles/mapbox/navigation-preview-day-v2) is also available for applications that implement a preview map. (#387) - By default, NavigationMapView now indicates the level of traffic congestion along each segment of the route line. (#359)
- Added Italian and Traditional Chinese localizations. Help translate the SDK into your language! (#413, #438)
- A 🐞 button on the map allows the user to submit feedback about the current route. (#400)
- The turn banner and bottom bar display fractional mileages as decimal numbers instead of vulgar fractions. 🙊🙉 (#383)
- If a step leads to a freeway or freeway ramp, the turn banner generally displays a control city or a textual representation of the route number (alongside the existing shield) instead of the freeway name. (#410, #417)
- As the user arrives at a waypoint, the turn banner displays the waypoint’s name instead of whitespace. (#419)
- The route line is now wider by default, to accommodate traffic congestion coloring. (#390)
- Moved the
snapsUserLocationAnnotationToRouteproperty from RouteController to NavigationViewController. (#408) - The road name label at the bottom of the map continues to display the current road name after the user ventures away from the route. (#408)
- If the upcoming maneuver travels along a bannered route, the parent route shield is no longer displayed in the turn banner. (#431)
- Fixed an issue causing the Mapbox logo to peek out from under the Recenter button. (#424)
- Suppressed the voice announcement upon rerouting if the first step of the new route is sufficiently long. (#395)
- The rerouting audio cue now unducks other applications’ audio afterwards. (#394)
- If a step leads to a freeway or freeway ramp, voice announcements for the step generally omit the name in favor of the route number. (#404, #412)
- Fixed an issue causing Amazon Polly to read parentheses aloud. (#418)
- Various methods of
NavigationMapViewDelegatehave more descriptive names in Objective-C. (#408) - Fixed an issue causing
NavigationViewControllerDelegate.navigationViewController(_:didArriveAt:)to be called twice in a row. (#414) - Fixed a memory leak. (#399)
- Added a
RouteController.locationproperty that represents the user’s location snapped to the route line. (#408) - Added a
RouteController.recordFeedback(type:description:)method for sending user feedback to Mapbox servers. (#304) - Fixed excessive rerouting while the user is located away from the route, such as in a parking lot. (#386)
- Fixed an issue where RouteController sometimes got stuck on slight turn maneuvers. (#378)
- When rerouting, Core Navigation connects to the same API endpoint with the same access token that was used to obtain the original route. (#405)
- The
ReplayLocationManager.locationandSimulatedLocationManager.locationproperties now return simulated locations instead of the device’s true location as reported by Core Location. (#411) - You can enable the
RouteController.checkForFasterRouteInBackgroundproperty to have Core Navigation periodically check for a faster route in the background. (#346) - Fixed an issue preventing the
RouteControllerAlertLevelDidChangenotification from posting when transitioning from a high alert level on one step to a high alert level on another step. (#425) - Improved the accuracy of location updates while the device is plugged in. (#432)
- Added anonymized metrics collection around significant events such as rerouting. This data will be used to improve the quality of Mapbox’s products, including the underlying OpenStreetMap road data, the Mapbox Directions API, and Core Navigation. (#304)
- The map now uses a style specifically designed for turn-by-turn navigation. (#263)
- Added French, Hungarian, Lithuanian, Persian, and Spanish localizations. Help translate the SDK into your language! (#351)
- Upgraded to OSRM Text Instructions v0.2.0 with localization improvements and support for upcoming exit numbers provided by the Directions API. (#348)
- Corrected the frameworks’ bundle identifiers. (#281)
- The turn banner now indicates when the SDK is busy fetching a new route. (#269)
- More interface elements are now styleable. The
Style.fontFamilyproperty makes it easy to set the entire interface’s font face. (#330) - The interface now supports Dynamic Type. (#330)
- Fixed an issue preventing the turn banner from displaying the distance to some freeway exits. (#262)
- Fixed an issue in which swiping the turn banner to the right caused NavigationViewController to navigate to the wrong step. (#266)
- Fixed a crash presenting NavigationViewController via a storyboard segue. (#314)
- Fixed an issue causing black lines to appear over all roads during turn-by-turn navigation. (#339)
- When
NavigationViewController.routeis set to a new value, the UI updates to reflect the new route. (#302) - Widened the route line for improved visibility. (#358)
- Fixed an issue causing maneuver arrows along the route line to appear malformed. (#284)
- Maneuver arrows no longer appear along the route line when the map is zoomed out. (#295)
- The turn banner more reliably displays a route shield for applicable freeway on- and off-ramps. (#353)
- Fixed an issue causing the turn banner to show a shield for the wrong step after swiping between steps. (#290)
- Fixed an issue causing NavigationViewController and voice alerts to stop updating after a modal view controller is pushed atop NavigationViewController. (#306)
- The map displays attribution during turn-by-turn navigation. (#288)
- Added a
NavigationMapViewControllerDelegate.navigationMapView(_:imageFor:)method for customizing the destination annotation. (#268) - Fixed an issue where the wrong source was passed into
MGLMapViewDelegate.navigationMapView(_:routeCasingStyleLayerWithIdentifier:source:). (#265, #267) - The turn banner abbreviates road names when using the Catalan, Lithuanian, Spanish, Swedish, or Vietnamese localization. (#254, #376)
- To use Amazon Polly for voice guidance, set the
NavigationViewController.voiceControllerproperty. (#313) - Fixed an issue that disabled Polly-powered voice guidance when the application went to the background. A message is printed to the console if the
audiobackground mode is missing from the application’s Info.plist file. (#356) - Fixed a crash that could occur when the device is muted and an instruction would normally be read aloud. (#275)
- By default, a short audio cue now plays when the user diverges from the route, requiring a new route to be fetched. (#269)
- Renamed
RouteStepFormatter.string(for:markUpWithSSML:)toRouteStepFormatter.string(for:legIndex:numberOfLegs:markUpWithSSML:). (#348)
- Fixed a crash after a simulated route causes the SDK to fetch a new route. (#344)
- Fixed an issue that stopped location updates after the application returned to the foreground from the background. (#343)
- Fixed excessive calls to
NavigationViewControllerDelegate.navigationViewController(_:didArriveAt:). (#347) - Fixed crashes that occurred during turn-by-turn navigation. (#271, #336)
- Fixed a memory leak that occurs when
NavigationViewController.navigationDelegateis set. (#316)
- RouteController now requests Always Location Services permissions if
NSLocationAlwaysAndWhenInUseUsageDescriptionis set in Info.plist. (#342) - RouteController now continues to track the user’s location after arriving at the destination. (#333)
- Fixed an issue causing RouteController to alternate rapidly between steps. (#258)
- The SimulatedLocationManager class now bridges to Objective-C. (#314)
- The DistanceFormatter class has been moved to Core Navigation. (#309)
- Documentation is now available in Quick Help and code completion for most classes and methods. (#250)
- Added Catalan, Swedish, and Vietnamese localizations. (#203)
- A new class,
Style, makes it easy to customize the SDK’s appearance and vary it by size class. (#162) - Fixed an issue causing the road name in the turn banner to be truncated. The road name may be abbreviated to fit the allotted space. (#215)
- Enlarged the distance in the turn banner. (#217)
- A button at the top-left corner of the map view displays a live overview of the route. (#106)
- A small label at the bottom of the map view displays the name of the street along which the user is currently traveling. (#155)
NavigationViewControllerautomatically adopts the tint color of the view controller that presents it. (#176)- The user can no longer swipe the turn banner left of the current step to “preview” already completed steps. (#223)
- The U-turn icon in the turn banner is no longer flipped horizontally in countries that drive on the right. (#243)
- Distances are now measured in imperial units when the user’s language is set to British English. (#246)
- Fixed an issue causing voice instructions to be delivered by an Australian English voice regardless of the user’s region. (#187, #245)
- Fixed an issue causing a “continue” instruction to be repeated multiple times along the step. (#238)
- A final voice instruction is no longer delivered when merging onto a highway. (#239)
RouteControlleris now responsible for the basic aspects of rerouting, including fetching the new route. A newRouteControllerDelegateprotocol (mirrored byNavigationViewControllerDelegate) has methods for preventing or reacting to a rerouting attempt. (#251)- A notification is posted as soon as Core Navigation successfully receives a new route or fails to receive a new route. (#251)
- When rerouting, any remaining intermediate waypoints are preserved in the new route. (#251)
- Improved the timing and accuracy of rerouting attempts. (#202, #228)
- Fixed an issue preventing the route progress (and thus the progress bar) from completing as the user arrives at the destination. (#157)
- Fixed an issue that affected Core Navigation’s accuracy near maneuvers. (#185)
- A simulated route performs maneuvers more realistically than before. (#226)
- Fixed an issue preventing a simulated route from reaching the end of the route. (#244)
- Resolved some compiler warnings related to the location manager. (#190)
- Renamed
RouteViewControllertoNavigationViewController. (#133) - Replaced the
NavigationUI.routeViewController(for:)method with theNavigationViewController(for:)initializer. (#133) - Fixed compatibility with MapboxDirections.swift v0.9.0. This library now depends on MapboxDirections.swift v0.9.x. (#139)
- Fixed an issue causing the SDK to ignore certain routing options when rerouting the user. (#139)
- Added a
NavigationViewController.simulatesLocationUpdatesproperty that causes the SDK to simulate location updates along a route. (#111) - Added a
NavigationViewControllerDelegate.navigationViewController(_:didArriveAt:)method that gets called when user arrives at the destination. (#158) - Added methods to NavigationViewControllerDelegate to customize the appearance and shape of the route line. (#135)
- Fixed an issue preventing the volume setting from working when using the built-in system speech synthesizer. (#160)
- Added support for Russian and Spanish voices when using Amazon Polly for voice alerts. (#153)
- This library now requires MapboxDirections.swift v0.8.x as opposed to v0.9.0, which is incompatible. (#150)
- Renamed MapboxNavigation and MapboxNavigationUI to MapboxCoreNavigation and MapboxNavigation, respectively. MapboxNavigation provides the complete turn-by-turn navigation experience, including UI and voice announcements, while MapboxCoreNavigation provides the raw utilities for building your own UI. (#129)
- Exposed methods on NavigationMapView that you can override to customize the route line’s appearance on the map. (#116)
- Removed an unused dependency on MapboxGeocoder.swift. (#112)
- Fixed memory leaks. (#120)
- Adds MapboxNavigationUI for a drop in navigation experience
- Allows for Integration with AWS Polly for improved voice announcements
- Adds optional user snapping to route line. This option also snaps the users course
- Fixes an issue where announcements with
Continuewould not announce the way names correctly - Updates to Swift v3.1
- Fixed an issue where the route line was not inserted below labels after re-routing.
- Fixed an issue where a
finalHeadingjust below360and a user heading just above0, would not be less thanRouteControllerMaximumAllowedDegreeOffsetForTurnCompletion(#25) - Better specified the swift version (#26)
- Fixes CocoaPod installation error
Initial public release