设置 Xcode 项目

启用结算功能并创建 API 密钥后,您就可以设置用于开发应用的 Xcode 项目。

每个版本都有相应的版本说明

第 1 步:安装所需的软件

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

  • Xcode 版本 15.0 或更高版本

第 2 步:创建 Xcode 项目并安装 Maps SDK for iOS

Swift Package Manager

您可以通过 Swift Package Manager 安装 Maps SDK for iOS。如需添加 SDK,请确保您已移除所有现有的 Maps SDK for iOS 依赖项。

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

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

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

  1. 在 Xcode 中,转到“File(文件)> Packages”(软件包)>“Update To Latest Package Versions”(更新软件包版本)”。
  2. 如需验证安装,请前往项目导航器软件包依赖项部分,验证软件包及其版本。

如需移除使用 CocoaPods 添加的现有 Maps SDK for iOS 依赖项,请按以下步骤操作:

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

如需移除手动安装的现有 Maps SDK for iOS,请按以下步骤操作:
  1. 在 Xcode 项目配置设置中,找到 Frameworks、Libraries, and Embedded Content。使用减号(-) 移除以下框架:
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
  2. 从 Xcode 项目的顶级目录中,移除 GoogleMaps 软件包。

CocoaPods

Maps SDK for iOS 以 CocoaPods pod 的形式提供。CocoaPods 是一种用于 Swift 和 Objective-C Cocoa 项目的开源依赖项管理器。

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

sudo gem install cocoapods

为 Maps SDK for iOS 创建一个 Podfile,并使用它来安装 API 及其依赖项:

  1. 如果您还没有 Xcode 项目,请立即创建一个并将其保存到您的本地机器。如果您是 iOS 开发新手:
    1. 创建新项目。
    2. 依次选择 iOS > 应用模板。
    3. 在项目选项屏幕上:
      1. 输入项目名称
      2. 记录 Bundle identifier 字段的值。 您可以在下方使用该值来限制您的 API 密钥。
      3. 将项目 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  2. 在您的项目目录中创建一个名为 Podfile 的文件。此文件可定义您项目的依赖项。
  3. 修改 Podfile 并添加您的依赖项及其versions。以下示例包含 Maps SDK for iOS 所需的依赖项:
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleMaps', '8.4.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 中指定的所有 API 更新到最新版本。

手动安装

本指南介绍了如何将包含 Maps SDK for iOS 的 XCFrameworks 手动添加到您的项目中,以及如何在 Xcode 中配置构建设置。XCFramework 是一个可在多个平台(包括使用 Apple 芯片的机器)上使用的二进制软件包。
  1. 下载以下 SDK 二进制文件和资源文件:
  2. 解压缩文件以访问 XCFrameworks 和资源。
  3. 如果您还没有 Xcode 项目,请立即创建一个并将其保存到您的本地机器。如果您是 iOS 开发新手:
    1. 创建新项目。
    2. 依次选择 iOS > 应用模板。
    3. 在项目选项屏幕上:
      1. 输入项目名称
      2. 记录 Bundle identifier 字段的值。 您可以在下方使用该值来限制您的 API 密钥。
      3. 将项目 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  4. 打开常规标签页。将以下 XCFrameworks 拖动到 Frameworks、 Libraries, and Embedded Content 下的项目中。确保为每个 XCFramework 选择 Do Not Embed
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
  5. GoogleMaps.bundle 从您下载的 GoogleMapsResources 复制到 Xcode 项目的顶级目录中。确保出现提示时选择 Copy items into destination group's folder
  6. 从项目导航器中选择您的项目,然后选择应用的目标。
  7. 打开应用目标的 Build Phases 标签页。在将二进制文件与库相关联中,添加以下框架和库:
    • Accelerate.framework
    • Contacts.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
    • UIKit.framework
  8. 选择您的项目(而不是特定目标),并打开“Build Settings”(构建设置)标签页。Linking - General -> Other Linker Flags(链接 - 常规 -> 其他链接器标记)部分中,将 -ObjC 添加到“Debug”和“Release”。如果看不到这些设置,请将 Build Settings 栏中的过滤条件从 Basic 更改为 All

  9. 如需安装 Places SDK for iOS XCFramework,请参阅 Places SDK for iOS 使用入门

添加 Apple 隐私清单文件

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

  1. 下载 Maps SDK for iOS 的 Privacy Manifest 软件包:GoogleMapsPrivacy
  2. 解压缩该文件以访问 GoogleMapsPrivacy.bundle
  3. 使用这些方法中的一种GoogleMapsPrivacy.bundle 添加到 Xcode 项目导航器中。务必针对应用的目标选中“添加到目标”复选框。添加后,PrivacyInfo 文件会显示在“项目”导航器中,您可以检查相应的值。
  4. Xcode 隐私权信息屏幕截图
  5. 为您的应用创建归档,然后从归档中生成隐私报告,验证隐私清单是否已添加。

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

获取 API 密钥中,您为应用生成了一个 API 密钥。现在,将该密钥添加到您的 Xcode 项目中。

在下例中,请将 YOUR_API_KEY 替换为您的 API 密钥。

Swift

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

  1. 添加以下 import 语句:
    import GoogleMaps
  2. 使用您的 API 密钥,将以下内容添加到 application(_:didFinishLaunchingWithOptions:) 方法:
    GMSServices.provideAPIKey("YOUR_API_KEY")
  3. 如果您还使用 Places API,请再次添加密钥,如下所示:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

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

  1. 添加以下 import 语句:
    @import GoogleMaps;
  2. 使用您的 API 密钥,将以下内容添加到 application:didFinishLaunchingWithOptions: 方法:
    [GMSServices provideAPIKey:@"YOUR_API_KEY"];
  3. 如果您还使用 Places API,请再次添加密钥,如下所示:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

第 4 步:添加地图

Swift

/*
 *   Copyright 2020 Google Inc. All rights reserved.
 *
 *
 *   Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
 *   file except in compliance with the License. You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software distributed under
 *   the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 *   ANY KIND, either express or implied. See the License for the specific language governing
 *   permissions and limitations under the License.
 */

import UIKit
import GoogleMaps

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        // Create a GMSCameraPosition that tells the map to display the
        // coordinate -33.86,151.20 at zoom level 6.

        let options = GMSMapViewOptions()
        options.camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
        options.frame = self.view.bounds

        let mapView = GMSMapView(options: options)
        self.view.addSubview(mapView)

        // Creates a marker in the center of the map.
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = mapView
  }
}

Objective-C

/*
*   Copyright 2020 Google Inc. All rights reserved.
*
*
*   Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
*   file except in compliance with the License. You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
*   Unless required by applicable law or agreed to in writing, software distributed under
*   the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
*   ANY KIND, either express or implied. See the License for the specific language governing
*   permissions and limitations under the License.
*/

#import "ViewController.h"
#import <GoogleMaps/GoogleMaps.h>

@interface ViewController()

@end

@implementation ViewController

-   (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
  // Create a GMSCameraPosition that tells the map to display the
  // coordinate -33.86,151.20 at zoom level 6.
  GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
  options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
  options.frame = self.view.bounds;
  GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

  [self.view addSubview:mapView];

  // Creates a marker in the center of the map.
  GMSMarker *marker = [[GMSMarker alloc] init];
  marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
  marker.title = @"Sydney";
  marker.snippet = @"Australia";
  marker.map = mapView;
}

@end

第 5 步(可选):声明 API 使用的网址架构

从 iOS 9 和 Xcode 7 开始,应用可以通过在应用的 Info.plist 文件中指定架构来声明其想要打开的网址架构。当用户点击地图上的 Google 徽标时,Maps SDK for iOS 会打开 Google 地图移动应用,因此您的应用可以声明相关的网址架构。

如需声明 Maps SDK for iOS 使用的网址架构,请将以下几行代码添加到 Info.plist 中:

LSApplicationQueriesSchemes googlechromes comgooglemaps

下面的屏幕截图显示了 Xcode 用户界面中的配置:

Xcode 中的 LSApplicationQuerySchemes 配置

如果不进行上述声明,当用户点按地图上的 Google 徽标时,可能会出现以下错误:

-canOpen网址: 失败,网址“comgooglemaps://” - 错误:“此应用不得查询 comgooglemaps 架构”-canOpen网址: 失败,网址:“googlechromes://” - 错误:“此应用不得查询 googlechromes 架构”

为了消除这些错误,请将该声明添加到 Info.plist 中。

后续步骤

现在,您已经有了 API 密钥和 Xcode 项目,接下来便可以创建和运行应用了。Navigation SDK for iOS 提供了许多可帮助您顺利上手的教程和示例应用。如需了解详情,请参阅以下文档: