MapboxNavigation 2.18.3

MapboxNavigation 2.18.3

测试已测试
语言语言 SwiftSwift
许可证 NOASSERTION
发布时间最新发布Aug 2024
SPM支持 SPM

Victor KononovMapbox 维护。



 
依赖
MapboxCoreNavigation= 2.18.3
MapboxMaps~> 10.17
Solar-dev~> 3.0
MapboxSpeech~> 2.0
 

Mapbox Navigation SDK for iOS

CircleCI codecov SPM compatible CocoaPods

Mapbox Navigation SDK

Mapbox Navigation 提供了您在 iOS 应用程序中添加语音导航所需的所有工具。

通过我们的内置语音导航 NavigationViewController,可以在几分钟内开始运行,或使用我们的路由和导航核心组件构建完全定制的语音导航应用程序。

功能

文档

需求

Mapbox导航SDK和核心导航库与使用Swift 5.5及以上版本编写、Xcode 13.1及以上版本编译的应用程序兼容。Mapbox导航和Mapbox核心导航库支持iOS 12.0及以上版本。

Mapbox导航SDK也适用于Android平台。更多信息

安装

使用Swift包管理器

要使用Swift包管理器安装MapboxNavigation框架,请访问Swift包管理器

  1. 访问您的Mapbox账户控制台,创建一个具有DOWNLOADS:READ范围的访问令牌。**请注意**:这不同于您的生产环境Mapbox API token。请确保将其保密,并不要将其插入任何Info.plist文件中。如果您的家目录中尚不存在,请创建一个名为.netrc的文件,然后在文件末尾添加以下行

    machine api.mapbox.com
      login mapbox
      password PRIVATE_MAPBOX_API_TOKEN
    

    其中PRIVATE_MAPBOX_API_TOKEN是具有DOWNLOADS:READ范围的Mapbox API token。

  2. 在Xcode中,转到文件(File) -> Swift包(Swift Packages) -> 添加依赖关系(Add Package Dependency)。

  3. https://github.com/mapbox/mapbox-navigation-ios.git 作为软件包仓库输入,然后点击“下一步”。

  4. 设置规则为“版本”,“直到下一个主版本”,并将最低版本要求输入为 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 框架

  1. 访问您的Mapbox账户控制台,创建一个具有DOWNLOADS:READ范围的访问令牌。**请注意**:这不同于您的生产环境Mapbox API token。请确保将其保密,并不要将其插入任何Info.plist文件中。如果您的家目录中尚不存在,请创建一个名为.netrc的文件,然后在文件末尾添加以下行

    machine api.mapbox.com
      login mapbox
      password PRIVATE_MAPBOX_API_TOKEN
    

    其中PRIVATE_MAPBOX_API_TOKEN是具有DOWNLOADS:READ范围的Mapbox API token。

  2. 创建一个带有以下指定的 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'
  3. 运行 pod repo update && pod install 并打开生成的 Xcode 工作区域。

使用 Carthage

要使用 0.38 或更高版本的 Carthage 安装 MapboxNavigation 框架

  1. 访问您的Mapbox账户控制台,创建一个具有DOWNLOADS:READ范围的访问令牌。**请注意**:这不同于您的生产环境Mapbox API token。请确保将其保密,并不要将其插入任何Info.plist文件中。如果您的家目录中尚不存在,请创建一个名为.netrc的文件,然后在文件末尾添加以下行

    machine api.mapbox.com
      login mapbox
      password PRIVATE_MAPBOX_API_TOKEN
    

    其中PRIVATE_MAPBOX_API_TOKEN是具有DOWNLOADS:READ范围的Mapbox API token。

  2. (可选) 清除你的 Carthage 缓存

    rm -rf ~/Library/Caches/carthage/ ~/Library/Caches/org.carthage.CarthageKit/binaries/{MapboxCommon-ios,MapboxNavigationNative,mapbox-ios-sdk-dynamic}
  3. 创建一个带有以下依赖项的 Cartfile

    # Latest stable release
    github "mapbox/mapbox-navigation-ios" ~> 2.14
    # Latest prerelease
    github "mapbox/mapbox-navigation-ios" "v2.14.0-rc.1"
    
  4. 运行 carthage bootstrap --platform iOS --use-xcframeworks --cache-builds --use-netrc

  5. 遵循 Carthage 的 iOS 集成说明。您的应用程序目标的目标“嵌入框架”构建阶段应包括 MapboxCoreNavigation.xcframeworkMapboxNavigationNative.xcframeworkMapboxCommon.xcframework

自 v2.0.0-alpha.1 版本起,MapboxNavigation 不再支持 Carthage。但是,如果您从头开始构建用户界面,您可以仅使用 Carthage 安装 MapboxCoreNavigation 框架

配置

  1. Mapbox API 和矢量瓦片需要一个 Mapbox 账户和 API 访问令牌。在项目编辑器中选择应用程序目标,然后转到“信息”选项卡。在“自定义 iOS 目标属性”部分下,将 MBXAccessToken 设置为您访问令牌。您可以从 Mapbox 账户页面 获取访问令牌。

  2. 为了确保SDK能够在用户沿着路线移动时跟踪用户的位置,将 NSLocationWhenInUseUsageDescription 设置为

    显示您的位置在地图上并有助于改进地图。

  3. 用户期望SDK即使在其他应用程序可见或设备锁定的情况下,也能持续跟踪用户的位置并发出语音指令。转到“签名与能力”标签页。在“后台模式”部分,启用“音频、AirPlay和画中画”以及“位置更新”。(或者,将值添加到“UIBackgroundModes”数组中,方法是在“信息”标签页中操作。)

现在导入相关模块,并呈现一个新的NavigationViewController。如果您应用程序的UI是用Interface Builder布局的,您也可以从故事板中推送一个导航视图控制器

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