Mapbox Navigation SDK for iOS
Mapbox Navigation 提供了将实时导航添加到你的 iOS 应用所需的全部工具。
只需几分钟内,使用我们的嵌入式 NavigationViewController
开始使用步进导航,或是使用我们的路线和导航核心组件完全自定义你的导航应用。
特性
- 适用于 iPhone、iPad 和 CarPlay 的完整版步进导航界面,可以轻松添加到你的应用中
- 针对白天和夜间驾驶的专业设计地图样式 Professional map styles for daytime and nighttime driving
- 全球的驾驶、骑行和步行路线,由 开放数据 和用户反馈提供支持
- 基于 55 个国家当前状况的规避交通和主动重新规划路线功能
- 由 Amazon Polly 提供的自然声音转向指令(无需配置)
- 支持二十多种语言
文档
要求
Mapbox 导航 SDK 和 Core 导航与 Swift 5.5 在 Xcode 13.1 及更高版本中编写的应用程序兼容。Mapbox 导航和 Mapbox Core 导航框架在 iOS 12.0 及更高版本上运行。
Mapbox 导航 SDK 还可在 Android 上使用。
安装
使用 Swift 包管理器
要使用 Swift 包管理器 在应用程序中安装 MapboxNavigation 框架
-
前往您的 Mapbox 账户仪表板 创建一个具有
DOWNLOADS:READ
范围的访问令牌。**请注意:这不同于您生产环境中的 Mapbox API 令牌。请确保将其保持私密,不要将其插入任何 Info.plist 文件中。** 如果您的主目录中尚不存在,请创建一个名为.netrc
的文件,然后将以下行添加到文件末尾machine api.mapbox.com login mapbox password PRIVATE_MAPBOX_API_TOKEN
其中 PRIVATE_MAPBOX_API_TOKEN 是具有
DOWNLOADS:READ
范围的 Mapbox API 令牌。 -
在 Xcode 中,转到文件 ‣ Swift 包 ‣ 添加包依赖项。
-
将
https://github.com/mapbox/mapbox-navigation-ios.git
作为包存储库输入,然后单击“下一步”。 -
将规则设置为版本编号,直到下一个大版本,并将
2.14.0
作为最低版本要求。单击“下一步”。
要在其他包中而不是应用程序中安装MapboxNavigation框架,请运行swift package init
以创建Package.swift,然后添加以下依赖项
// Latest stable release
.package(name: "MapboxNavigation", url: "https://github.com/mapbox/mapbox-navigation-ios.git", from: "2.14.0")
// Latest prerelease
.package(name: "MapboxNavigation", url: "https://github.com/mapbox/mapbox-navigation-ios.git", .exact("2.14.0-rc.1"))
使用CocoaPods
要使用CocoaPods安装MapboxNavigation框架
-
前往您的 Mapbox 账户仪表板 创建一个具有
DOWNLOADS:READ
范围的访问令牌。**请注意:这不同于您生产环境中的 Mapbox API 令牌。请确保将其保持私密,不要将其插入任何 Info.plist 文件中。** 如果您的主目录中尚不存在,请创建一个名为.netrc
的文件,然后将以下行添加到文件末尾machine api.mapbox.com login mapbox password PRIVATE_MAPBOX_API_TOKEN
其中 PRIVATE_MAPBOX_API_TOKEN 是具有
DOWNLOADS:READ
范围的 Mapbox API 令牌。 -
创建以下规范的Podfile
# Latest stable release pod 'MapboxCoreNavigation', '~> 2.14' pod 'MapboxNavigation', '~> 2.14' # Latest prerelease pod 'MapboxCoreNavigation', :git => 'https://github.com/mapbox/mapbox-navigation-ios.git', :tag => 'v2.14.0-rc.1' pod 'MapboxNavigation', :git => 'https://github.com/mapbox/mapbox-navigation-ios.git', :tag => 'v2.14.0-rc.1'
-
运行
pod repo update && pod install
并打开生成的Xcode workspace。
使用Carthage
要使用Carthage v0.38或更高版本安装MapboxNavigation框架
-
前往您的 Mapbox 账户仪表板 创建一个具有
DOWNLOADS:READ
范围的访问令牌。**请注意:这不同于您生产环境中的 Mapbox API 令牌。请确保将其保持私密,不要将其插入任何 Info.plist 文件中。** 如果您的主目录中尚不存在,请创建一个名为.netrc
的文件,然后将以下行添加到文件末尾machine api.mapbox.com login mapbox password PRIVATE_MAPBOX_API_TOKEN
其中 PRIVATE_MAPBOX_API_TOKEN 是具有
DOWNLOADS:READ
范围的 Mapbox API 令牌。 -
(可选) 清理Carthage缓存
rm -rf ~/Library/Caches/carthage/ ~/Library/Caches/org.carthage.CarthageKit/binaries/{MapboxCommon-ios,MapboxNavigationNative,mapbox-ios-sdk-dynamic}
-
创建以下依赖项的Cartfile
# Latest stable release github "mapbox/mapbox-navigation-ios" ~> 2.14 # Latest prerelease github "mapbox/mapbox-navigation-ios" "v2.14.0-rc.1"
-
运行
carthage bootstrap --platform iOS --use-xcframeworks --cache-builds --use-netrc
。 -
按照Carthage的iOS集成说明操作。确保应用程序目标中“Embed Frameworks”构建阶段包括
MapboxCoreNavigation.xcframework
、MapboxNavigationNative.xcframework
和MapboxCommon.xcframework
。
从v2.0.0-alpha.1版开始,MapboxNavigation不再支持Carthage。但是,如果您正在从头开始构建用户界面,您可以仅使用Carthage安装MapboxCoreNavigation框架。
配置
-
Mapbox API和矢量瓦片需要Mapbox账户和API访问令牌。在项目编辑器中,选择应用程序目标,然后转到“Info”选项卡。在“自定义iOS目标属性”部分下,将
MBXAccessToken
设置为您的访问令牌。您可以从Mapbox账户页面获取访问令牌。 -
为了让SDK能够跟踪用户移动时的位置,请将
NSLocationWhenInUseUsageDescription
设置为在地图上显示您的位置并帮助改进地图。
-
用户期望SDK即使当可见其他应用或设备处于锁定状态时也能继续跟踪用户的地理位置并提供语音指令。转到“签名与能力”选项卡。在“后台模式”部分,启用“音频、AirPlay和画中画”以及“位置更新”。(或者,将
audio
和location
值添加到“信息”标签下的UIBackgroundModes
数组中。)
现在导入相关模块,呈现一个新的NavigationViewController
。如果您使用Interface Builder布局应用程序的UI,也可以从Storyboard中将导航视图控制器推入。
import MapboxDirections
import MapboxCoreNavigation
import MapboxNavigation
// Define two waypoints to travel between
let origin = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.9131752, longitude: -77.0324047), name: "Mapbox")
let destination = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.8977, longitude: -77.0365), name: "White House")
// Set options
let routeOptions = NavigationRouteOptions(waypoints: [origin, destination])
// Request a route using MapboxDirections
Directions.shared.calculate(routeOptions) { [weak self] (session, result) in
switch result {
case .failure(let error):
print(error.localizedDescription)
case .success(let response):
guard let strongSelf = self else {
return
}
// Pass the generated route response to the the NavigationViewController
let viewController = NavigationViewController(for: response, routeIndex: 0, routeOptions: routeOptions)
viewController.modalPresentationStyle = .fullScreen
strongSelf.present(viewController, animated: true, completion: nil)
}
}
请参阅API参考以获取更多详细信息。
示例
API参考包括实现常见任务的示例代码。您可以在navigation-ios-examples项目中运行这些示例。
此存储库还包含测试床应用程序,该应用程序锻炼了导航SDK的各种功能。有关安装和运行此应用程序的说明,请参阅贡献指南。
自定义
样式
您可以根据需要自定义外观以融入应用程序的其余部分。查看DayStyle.swift
中的所有可样式元素。
class CustomStyle: DayStyle {
required init() {
super.init()
mapStyleURL = URL(string: "mapbox://styles/mapbox/satellite-streets-v9")!
styleType = .nightStyle
}
override func apply() {
super.apply()
BottomBannerView.appearance(for: UITraitCollection(userInterfaceIdiom: .phone)).backgroundColor = .orange
BottomBannerView.appearance(for: UITraitCollection(userInterfaceIdiom: .pad)).backgroundColor = .orange
}
}
然后使用您的样式或样式初始化NavigationViewController
。
let navigationOptions = NavigationOptions(styles: [CustomStyle()])
NavigationViewController(for: routeResponse, routeIndex: routeIndex, routeOptions: routeOptions, navigationOptions: navigationOptions)
从头开始
如果你的应用程序需要完全定制的功能,例如仅语音体验或非常规的用户界面,请查阅核心导航安装指南。
参与贡献
我们欢迎反馈和代码贡献!请参阅 CONTRIBUTING.md 了解详情。
许可协议
Mapbox Navigation SDK for iOS 在 Mapbox 服务条款下发布。有关详细信息,请参阅 LICENSE.md。