Mapbox Directions for Swift
Mapbox Directions for Swift makes it easy to connect your iOS, macOS, tvOS, or watchOS application to the Mapbox Directions and Map Matching APIs. Quickly get driving, cycling, or walking directions, whether the trip is nonstop or it has multiple stopping points, all using a simple interface reminiscent of MapKit’s MKDirections
API. Fit a GPX trace to the OpenStreetMap road network. The Mapbox Directions and Map Matching APIs are powered by the OSRM and Valhalla routing engines. For more information, see the Mapbox Navigation homepage.
Mapbox Directions pairs well with MapboxGeocoder.swift, MapboxStatic.swift, the Mapbox Navigation SDK for iOS, and the Mapbox Maps SDK for iOS or macOS SDK.
Installation
Specify the following dependency in your Carthage Cartfile:
github "mapbox/mapbox-directions-swift" ~> 2.0
Or in your CocoaPods Podfile:
pod 'MapboxDirections', '~> 2.0'
Or in your Swift Package Manager Package.swift:
.package(url: "https://github.com/mapbox/mapbox-directions-swift.git", from: "0.30.0")
Then import MapboxDirections
.
Configuration
You’ll need a Mapbox access token in order to use the API. If you’re already using the Mapbox Maps SDK for iOS or macOS SDK, Mapbox Directions automatically recognizes your access token, as long as you’ve placed it in the MBXAccessToken
key of your application’s Info.plist file.
Starting points
Directions
is the main class that represents the Mapbox Directions and Map Matching APIs. To calculate directions between coordinates, configure a RouteOptions
object and pass it into Directions.calculate(_:completionHandler:)
. Similarly, to match a trace to the road network, configure a MatchOptions
object and pass it into either Directions.calculate(_:completionHandler:)
or Directions.calculateRoutes(matching:completionHandler:)
. These methods asynchronously send requests to the API, then form Route
or Match
objects that correspond to the API’s response.
A Route
object is composed of one or more RouteLeg
s between waypoints, which in turn are composed of one or more RouteStep
s between maneuvers. Depending on the request, a RouteStep
may additionally contain objects representing intersection- and segment-level data. A Match
object is structured similarly, except that it provides additional details about how the trace matches the road network.
For further details, consult the guides and examples included with this API reference. To integrate real-time turn-by-turn navigation into your iOS application, see “Navigation SDK”. If you have any questions, please see our help page. We welcome your bug reports, feature requests, and contributions.
Changes in version 2.0.0
Packaging
- To gain access to the Mapbox Directions and Map Matching APIs, set
MBXAccessToken
in your Info.plist.MGLMapboxAccessToken
is still supported but is now deprecated. (#522) - MapboxDirections now requires Turf v2.x. (#571, #608)
- Carthage v0.38 or above is now required for installing this SDK if you use Carthage. (#548)
- Xcode 12.0 or above is now required to build MapboxDirections from source. (#548)
- You can fully build this SDK on Macs with Apple Silicon. (#548)
- The
mapbox-directions-swift
command line tool can no longer be built using Carthage. It now requires swift-argument-parser v1.0.0 or above. (#606)
Other changes
- The
Incident.impact
property is now anIncident.Impact
value instead of a string. (#519) RouteOptions.alleyPriority
,RouteOptions.walkwayPriority
, andRouteOptions.speed
are now optional. Set them explicitly if you want to include them in the HTTP request. RenamedDirectionsOptions.default
toDirectionsOptions.medium
. (#557)- Removed the
DirectionsResult.routeIdentifier
property. Use theRouteResponse.identifier
property in conjunction with an index into theRouteResponse.routes
array instead. (#562) - Added the
Intersection.preferredApproachLanes
andIntersection.usableLaneIndication
properties that indicate preferred lane usage.VisualInstruction.Component.lane(indications:isUsable:)
has been renamed toVisualInstruction.Component.lane(indications:isUsable:preferredDirection:)
. (#529) - Comparing two
Intersection
s with==
now considers whether theIntersection.restStop
,Intersection.regionCode
, andIntersection.outletMapboxStreetsRoadClass
properties are equal. (#529) - Added the
Waypoint.allowsSnappingToClosedRoad
property to allow snapping the waypoint’s location to a closed part of a road. (#583) - Added
AttributeOptions.numericCongestionLevel
,RouteLeg.segmentNumericCongestionLevels
,RouteLeg.Attributes.segmentNumericCongestionLevels
andNumericCongestionLevel
to support receiving the numeric value for congestion level along each segment of aRouteLeg
. (#575) - Added a
RouteOptions.roadClassesToAllow
property that enables the resulting routes to use HOV-only roads or high-occupancy toll roads. (#598) - Added new optional parameters to the
Directions(credentials:urlSession:processingQueue:)
initializer that allow you to provide a customURLSession
and GCD processing queue. (#613) - Fixed an issue where
RouteStep.exitIndex
was always unset. (#567) - Fixed an issue where
RouteLeg.segmentRangesByStep
contained a range that was off by one for the arrival step of a leg. (#587)