设置 Xcode 项目

启用结算功能并创建 API 密钥后,您就可以设置 Xcode 了 一个项目。

每个版本都有相应的版本说明 发布。

第 1 步:安装所需的软件

如需使用 Navigation SDK for iOS 构建项目,您必须下载并安装:

  • Xcode 15.0 版或更高版本

第 2 步:创建 Xcode 项目并安装 Navigation SDK

Swift Package Manager

Navigation SDK 可通过 Swift Package Manager 的相关文档。要添加 SDK,请确保您已 移除了所有现有的 Navigation SDK 依赖项。

如需将 SDK 添加到新项目或现有项目,请按以下步骤操作:

  1. 打开 Xcode projectworkspace,然后转到 File >添加软件包依赖项
  2. 输入 https://github.com/googlemaps/ios-navigation-sdk 作为网址,然后按 Enter 键 以提取软件包,然后点击“Add Package”(添加软件包)。
  3. 如需安装特定的 version,请将 Dependency Rule 字段设置为以下其中一项: 基于版本的选项对于新项目,我们建议您指定最新版本和 使用“确切版本”选项。完成后,点击“添加软件包”。
  4. Choose Package Products(选择软件包产品)窗口中,验证 GoogleNavigation 是否已添加到 您指定的main目标。完成后,点击“添加软件包”。
  5. 如需验证您的安装,请前往目标的 General 窗格。 在框架、库和嵌入式内容中,您应该会看到已安装的软件包。 您还可以查看“Package Dependencies”“Project Navigator”部分 以验证软件包及其版本。

如需更新现有项目的 package,请按以下步骤操作:

  1. 如果您要从 9.0.0 之前的版本升级,就必须移除 以下依赖项:GoogleMapsBaseGoogleMapsCoreGoogleMapsM4B。请勿移除 GoogleMaps。有关详情,请参阅 9.0.0 版版本说明

    在您的 Xcode 项目配置设置中,找到 Frameworks, Libraries, 和嵌入式内容。使用减号(-) 移除以下框架:

    • GoogleMapsBase(仅适用于从 9.0.0 之前的版本进行的升级)
    • GoogleMapsCore(仅适用于从 9.0.0 之前的版本进行的升级)
    • GoogleMapsM4B(仅适用于从 9.0.0 之前的版本进行的升级)
  2. 在 Xcode 中,转到“File”(文件)>文件包 >更新到最新的软件包版本”。
  3. 如需验证安装,请前往 Project NavigatorPackage Dependencies 部分 以验证软件包及其版本。

如需移除使用 CocoaPods,请按以下步骤操作:

  1. 关闭 Xcode 工作区。打开终端并执行以下命令:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. 移除 PodfilePodfile.resolved 和 Xcode workspace(如果您不将其用于 CocoaPods 之外的任何其他用途)。

如需移除手动安装的现有 Navigation SDK for iOS,请执行以下操作: 请按以下步骤操作: <ph type="x-smartling-placeholder">
    </ph>
  1. 在您的 Xcode 项目配置设置中,找到 Frameworks, Libraries, 和嵌入式内容。使用减号(-) 移除以下框架:
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  2. 从 Xcode 项目的顶级目录中,移除 GoogleMaps 软件包。

CocoaPods

Navigation SDK for iOS 可作为 CocoaPods Pod。 CocoaPods 是一种用于 Swift 和 Objective-C Cocoa 项目的开源依赖项管理器。

如果您尚未安装 CocoaPods 工具,请在 macOS 上从终端运行以下命令进行安装。有关详情,请参阅 CocoaPods 入门指南

sudo gem install cocoapods

为 Navigation SDK for iOS 创建 Podfile 并使用 安装 API 及其依赖项:

  1. 如果您还没有 Xcode 项目,请立即创建一个并将其保存到 本地机器如果您是 iOS 开发新手: <ph type="x-smartling-placeholder">
      </ph>
    1. 创建新项目。
    2. 选择 iOS >App 模板。
    3. 在项目选项屏幕上: <ph type="x-smartling-placeholder">
        </ph>
      1. 输入项目名称
      2. 记录 Bundle identifier 字段的值。 您可以使用该值在下方限制您的 API 密钥。
      3. 将项目的 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  2. 在您的项目目录中创建一个名为 Podfile 的文件。此文件可定义您项目的依赖项。
  3. 修改 Podfile 并添加您的依赖项及其依赖项 版本。 这是一个示例,其中包含创建 适用于 iOS 的 Navigation SDK: # Cocoapods 安装参考 #
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleNavigation', '9.0.0'
    end
            
    确保定期运行 pod outdated,以检测较新的 版本。如有必要,请升级 最新版本
  4. 保存 Podfile
  5. 打开终端并转到包含 Podfile 的目录:

    cd <path-to-project>
  6. 运行 pod install 命令。这会安装 Podfile 中指定的 API 以及所有依赖项。

    pod install
  7. 关闭 Xcode,然后打开(双击)您项目的 .xcworkspace 文件以启动 Xcode。从此刻开始,您必须使用 .xcworkspace 文件打开项目。

如需更新现有项目的 API,请按以下步骤操作:

  1. 打开终端,转到包含 Podfile 的项目目录。
  2. 运行 pod update 命令。这会更新 Podfile 中指定的版本更新到最新版本。

手动安装

本指南介绍了如何手动添加包含 将 Navigation SDK for iOS 和 Maps SDK for iOS 添加到您的项目中,并在 Xcode 中配置您的构建设置。XCFramework 是一个二进制软件包,可在多个平台(包括使用 M1 芯片组的机器)上使用

请按照以下步骤安装适用于 iOS 版 Navigation SDK 的 XCFrameworks。 和 Maps SDK for iOS:

  1. 下载以下 SDK 二进制文件和资源文件: <ph type="x-smartling-placeholder">
  2. 启动 Xcode,并打开现有的项目或创建新项目。如果您是第一次使用 iOS,请创建一个新项目,并选择 iOS 应用模板
  3. 从项目中移除所有现有的地图、导航和地点引用。
  4. 将以下 XCFrameworks 拖动到位于 框架、库和嵌入式内容:用于安装 Google 地图 和 Navigation SDK(当系统提示时,选择 Copy items if needed):
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  5. 从您下载的 GoogleMapsResources 中拖动 GoogleMaps.bundle 放入 Xcode 项目的顶级目录中当系统提示时 确保已选中 Copy items if needed
  6. 从您下载的 GoogleNavigationResources 中拖动 GoogleNavigation.bundle 放入 Xcode 项目的顶级目录中出现提示时,请确保 已选择将内容复制到目标群组的文件夹
  7. 从项目导航器中选择您的项目,然后选择 应用的目标
  8. 打开 Build Phases 标签,并在 将二进制文件与库相关联,添加以下框架和库:
    • Accelerate.framework
    • AudioToolbox.framework
    • AVFoundation.framework
    • Contacts.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libxml2.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • Security.framework
    • SystemConfiguration.framework
    • UIKit.framework
    • UserNotifications.framework
    • WebKit.framework
  9. 在应用的目标中,选择 Capabilities 标签页。 开启 Background Modes,然后启用以下模式:
    • 音频、AirPlay 和画中画
    • 位置信息更新
  10. 选择您的项目(而不是特定目标),然后打开 Build 设置标签页。在Other Linker Flags(其他链接器标记)部分中,执行以下操作: 为调试发布添加了 ‑ObjC。 如果看不到这些设置,请在以下位置更改过滤条件: Build Settings 栏从基本更改为全部
  11. 打开 Info.plist 并添加以下键值对:
    • NSLocationWhenInUseUsageDescription隐私权 - 使用时的位置说明
      :“此应用需要获得相关权限才能使用您的位置信息进行精细导航。”
    • 密钥NSLocationAlwaysAndWhenInUseUsageDescription隐私 - 始终及使用时的位置信息使用说明
      :“此应用需要获得相关权限才能使用您的位置信息进行精细导航。”

第 3 步:检查 Apple 隐私清单文件

Apple 要求为 App Store 中的应用提供应用隐私权详细信息。如需了解最新动态和更多信息,请访问 Apple App Store 隐私权详情页面

Apple 隐私清单文件包含在 SDK 的资源包中。如需验证隐私清单文件是否包含在内并检查其内容,请创建应用的归档,并从归档中生成隐私报告

第 4 步:将您的 API 密钥添加到项目中

以下示例展示了如何在 Xcode 中将 API 密钥添加到项目中:

Swift

按照以下方法向 AppDelegate.swift 添加 API 密钥:

  1. 添加以下 import 语句:
    import GoogleMaps
    import GoogleNavigation
  2. 将以下内容添加到您的 application(_:didFinishLaunchingWithOptions:) 中 方法:
    GMSServices.provideAPIKey("YOUR_API_KEY")

Objective-C

按照以下方法向 AppDelegate.m 添加 API 密钥:

  1. 添加以下 import 语句:
    @import GoogleMaps;
    @import GoogleNavigation;
  2. 将以下内容添加到您的 application:didFinishLaunchingWithOptions: 中 方法:
    [GMSServices provideAPIKey:@"YOUR_API_KEY"];

第 5 步:添加地图

这段代码演示了如何向现有的 ViewController 添加简单的地图, 包括一些导航的初始设置

在启用导航之前,用户必须同意条款和 条件。如需提示用户,请调用 GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(),然后勾选到 查看条款是否已被接受。如果用户拒绝了条款 mapView.isNavigationEnabled = true 无任何影响,mapView.navigator 为 nil。

Swift

import UIKit
import GoogleNavigation

class ViewController: UIViewController {

  var mapView: GMSMapView!
  var locationManager: CLLocationManager!

  override func loadView() {
    locationManager = CLLocationManager()
    locationManager.requestAlwaysAuthorization()

    let options = GMSMapViewOptions()
    options.camera = camera
    options.frame = .zero
    mapView = GMSMapView(options: options)

    // Show the terms and conditions.
    let companyName = "Ride Sharing Co."
    GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
      withCompanyName: companyName) { termsAccepted in
      if termsAccepted {
        // Enable navigation if the user accepts the terms.
        self.mapView.isNavigationEnabled = true
      } else {
        // Handle the case when the user rejects the terms and conditions.
      }
    }

    view = mapView
  }

  // TODO: Add navigation code.

}

Objective-C

#import "ViewController.h"
@import GoogleNavigation;

@interface ViewController ()
@end

@implementation ViewController
GMSMapView *_mapView;
CLLocationManager *_locationManager;

-   (void)loadView {

  _locationManager = [[CLLocationManager alloc] init];
  [_locationManager requestAlwaysAuthorization];

  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:47.67
                                                          longitude:-122.20
                                                               zoom:14];
  GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
  options.frame = CGRectZero;
  options.camera = camera;
  options.mapID = mapID;
  _mapView = [[GMSMapView alloc] initWithOptions:options];

  // Show the terms and conditions.
  NSString *companyName = @"Ride Sharing Co.";
  [GMSNavigationServices
    showTermsAndConditionsDialogIfNeededWithCompanyName:companyName
    callback:^(BOOL termsAccepted) {
     if (termsAccepted) {
       // Enable navigation if the user accepts the terms.
       _mapView.navigationEnabled = YES;
     } else {
       // Handle the case when the user rejects the terms and conditions.
     }
   }];

  self.view = _mapView;
}

// TODO: Add navigation code.

@end

运行您的应用。您应该会看到一张以华盛顿州柯克兰为中心的地图。

如果看不到地图,请尝试以下操作:

  • 确认您提供的 API 密钥正确无误。
  • 检查是否已在 Cloud 控制台中启用 NavSDK。
  • 如果 Nav SDK 已安装,但您的项目未使用 Nav SDK API,请将其从二进制文件中移除。

如果您是移动服务客户

如果您是移动服务客户,请了解结算 。如需详细了解录制功能 请参阅 设置结算信息。 如需了解如何向 Navigation SDK 实现添加事务 ID,请参阅 将您的服务使用情况与移动事务相关联

后续步骤

现在,您已经有了 API 密钥和 Xcode 项目,接下来就可以创建和运行应用了。 iOS 版 Navigation SDK 提供了相关教程, 开始使用。如需了解详情,请参阅以下文档: