设置 Xcode 项目

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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

第 1 步:安装所需的软件

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

  • Xcode 版本 13.0 或更高版本
  • CocoaPodsCarthage

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

使用 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 > App 模板。
    3. 在项目选项屏幕上:
      1. 输入项目名称
      2. 记录软件包标识符字段的值。 您可以使用下面的值限制 API 密钥。
      3. 将项目 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  2. 在您的项目目录中创建一个名为 Podfile 的文件。此文件可定义您项目的依赖项。
  3. 修改 Podfile 并添加您的依赖项及其版本。 以下示例包含 Maps SDK for iOS 所需的依赖项:
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '13.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleMaps', '7.1.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 更新到最新版本。

使用 Carthage

Maps SDK for iOS 可与 Carthage 搭配使用,这是一个简单的分散式依赖项管理器,适用于 Swift 和 Objective-C Cocoa 项目。

  1. 安装 Carthage。有多种方法,因此请参阅 Carthage README 文件了解确切的步骤。
  2. 如果您还没有 Xcode 项目,请立即创建一个并将其保存到本地机器上。如果您是 iOS 开发新手:
    1. 创建新项目。
    2. 选择 iOS > App 模板。
    3. 在项目选项屏幕上:
      1. 输入项目名称
      2. 记录软件包标识符字段的值。 您可以使用下面的值限制 API 密钥。
      3. 将项目 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  3. 在您的项目目录中创建一个名为 Cartfile 的文件。此文件定义项目的依赖项。
  4. 修改 Cartfile 并添加您的依赖项及其版本
    binary "https://dl.google.com/geosdk/GoogleMaps.json" == 6.2.1
    请务必定期运行 carthage outdated,以检测是否有新版本,从而确保您始终使用的是最新版本。如有必要,请升级到最新版本
  5. 保存 Cartfile
  6. 在终端窗口中,转到包含 Cartfile 的目录:
    cd <path-to-project>
  7. 运行 carthage update 命令。此操作会安装 Cartfile 中指定的 API 及其可能具有的任何依赖项。
  8. 在 Finder 的项目目录中,转到 Carthage/Build/iOS 下的已下载框架文件。
  9. 将以下软件包拖动到您的项目中:(当系统提示时,选择 Copy items if needed, please use the same version as above.
    • GoogleMaps-x.x.x/Base/Frameworks/GoogleMapsBase.framework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMaps.framework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMapsCore.framework
    • (仅限高级计划客户)GoogleMaps-x.x.x/M4B/Frameworks/GoogleMapsM4B.framework
  10. 右键点击项目中的 GoogleMaps.framework,然后选择 Show In Finder(在查找器中显示)。
  11. GoogleMaps.bundleResources 文件夹拖动到 Xcode 项目的顶层目录中。出现提示时,确保选择将项目复制到目标组的文件夹
  12. 从项目导航器中选择项目,然后选择应用的目标。
  13. 打开应用的目标的 Build Phases 标签页,然后在 Link Binary with Libraries 中,添加以下框架和库:
    • Accelerate.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
  14. 选择项目而不是具体的目标,并打开“Build Settings”(构建设置)标签页。在“Other Linker Flags”(其他链接器标志)部分中,添加 -ObjC如果看不到这些设置,请将“Build Settings”(构建设置)栏中的过滤条件从“Basic”(基本)更改为“All”(全部)。

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

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

  1. 打开终端,然后转到包含 Cartfile 的项目目录。
  2. 运行 carthage update 命令。这会将 Cartfile 中指定的所有 API 更新到最新版本。

手动安装

本指南介绍了如何将 Maps SDK for iOS 手动添加到您的项目中,以及如何在 Xcode 中配置您的构建设置。

  1. 下载 SDK 源文件:GoogleMaps-7.1.0
  2. 解压缩源文件。
  3. 如果您还没有 Xcode 项目,请立即创建一个并将其保存到本地机器上。如果您是 iOS 开发新手:
    1. 创建新项目。
    2. 选择 iOS > App 模板。
    3. 在项目选项屏幕上:
      1. 输入项目名称
      2. 记录软件包标识符字段的值。 您可以使用下面的值限制 API 密钥。
      3. 将项目 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  4. 将以下软件包拖动到您的项目中:(当系统提示时,选择 Copy items if needed, please use the same version as above.
    • GoogleMaps-x.x.x/Base/Frameworks/GoogleMapsBase.framework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMaps.framework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMapsCore.framework
    • (仅限高级计划客户)GoogleMaps-x.x.x/M4B/Frameworks/GoogleMapsM4B.framework
  5. 右键点击项目中的 GoogleMaps.framework,然后选择 Show In Finder(在查找器中显示)。
  6. GoogleMaps.bundleResources 文件夹拖动到 Xcode 项目的顶层目录中。出现提示时,确保选择将项目复制到目标组的文件夹
  7. 从项目导航器中选择项目,然后选择应用的目标。
  8. 打开应用的目标的 Build Phases 标签页,然后在 Link Binary with Libraries 中,添加以下框架和库:
    • Accelerate.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
  9. 选择项目而不是具体的目标,并打开“Build Settings”(构建设置)标签页。在“Other Linker Flags”(其他链接器标志)部分中,添加 -ObjC如果看不到这些设置,请将“Build Settings”(构建设置)栏中的过滤条件从“Basic”(基本)更改为“All”(全部)。

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

安装 XCFramework

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

带 Carthage 专用

Maps SDK for iOS 可与 Carthage 搭配使用,这是一个简单的分散式依赖项管理器,适用于 Swift 和 Objective-C Cocoa 项目。

  1. 安装 Carthage。有多种方法,因此请参阅 Carthage README 文件了解确切的步骤。
  2. 如果您还没有 Xcode 项目,请立即创建一个并将其保存到本地机器上。如果您是 iOS 开发新手:
    1. 创建新项目。
    2. 选择 iOS > App 模板。
    3. 在项目选项屏幕上:
      1. 输入项目名称
      2. 记录软件包标识符字段的值。 您可以使用下面的值限制 API 密钥。
      3. 将项目 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  3. 在项目目录中创建一个名为 Cartfile 的文件。 此文件定义项目的依赖项。
  4. 修改 Cartfile 并添加您的依赖项及其版本

    binary "https://dl.google.com/geosdk/GoogleMaps.json" == 6.2.1-beta
  5. 保存 Cartfile
  6. 在终端窗口中,转到包含 Cartfile 的目录:
    cd <path-to-project>
  7. 运行 carthage update 命令。这将安装 Cartfile 中指定的 API 及其可能具有的任何依赖项。
  8. 在 Finder 的项目目录中,转到 Carthage/Build 下的已下载框架文件。
  9. 将以下 XCFrameworks 拖到框架、库和嵌入式内容下的项目中。确保为每个 XCFramework 选择 Do Not Embed
    • GoogleMaps-x.x.x/GoogleMapsBase.xcframework
    • GoogleMaps-x.x.x/GoogleMaps.xcframework
    • GoogleMaps-x.x.x/GoogleMapsCore.xcframework
    • (仅限高级计划客户)GoogleMaps-x.x.x/GoogleMapsM4B.xcframework
  10. 右键点击项目中的 GoogleMaps.xcframework,然后选择 Show In Finder
  11. GoogleMaps.bundleios-arm64_x86_64-simulator/GoogleMaps.framework/Resources 文件夹拖动到 Xcode 项目的顶层目录中。出现提示时,确保选择 Copy items if needed
  12. 从项目导航器中选择您的项目,然后选择应用的目标。
  13. 打开应用的目标下的 Build Phases 标签页,然后在 Link Binary with Libraries 中,并添加以下框架和库:
    • Accelerate.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
  14. 选择您的项目(而不是具体的目标),然后打开 Build Settings 标签页。在 Other Linker Flags 部分,添加 -ObjC。如果看不到这些设置,请将 Build Settings 栏中的过滤条件从 Basic 更改为 All

  15. 要安装 Places SDK for iOS XCFramework,请参阅 Places SDK for iOS 使用入门

手动

本指南介绍了如何将 Maps SDK for iOS 手动添加到您的项目中,以及如何在 Xcode 中配置您的构建设置。

  1. 下载 SDK 源文件:GoogleMaps-7.1.0-beta-xcframework
  2. 解压缩源文件。
  3. 如果您还没有 Xcode 项目,请立即创建一个并将其保存到本地机器上。如果您是 iOS 开发新手:
    1. 创建新项目。
    2. 选择 iOS > App 模板。
    3. 在项目选项屏幕上:
      1. 输入项目名称
      2. 记录软件包标识符字段的值。 您可以使用下面的值限制 API 密钥。
      3. 将项目 Interface 设置为 Storyboard
      4. 语言设置为 SwiftObjective-C
  4. 将以下 XCFrameworks 拖到框架、库和嵌入式内容下的项目中。确保为每个 XCFramework 选择 Do Not Embed
    • GoogleMaps-x.x.x/GoogleMapsBase.xcframework
    • GoogleMaps-x.x.x/GoogleMaps.xcframework
    • GoogleMaps-x.x.x/GoogleMapsCore.xcframework
    • (仅限高级计划客户)GoogleMaps-x.x.x/GoogleMapsM4B.xcframework
  5. 右键点击项目中的 GoogleMaps.xcframework,然后选择 Show In Finder
  6. GoogleMaps.bundleios-arm64_x86_64-simulator/GoogleMaps.framework/Resources 文件夹拖动到 Xcode 项目的顶层目录中。出现提示时,确保选择 Copy items if needed
  7. 从项目导航器中选择您的项目,然后选择应用的目标。
  8. 打开应用的目标下的 Build Phases 标签页,然后在 Link Binary with Libraries 中,并添加以下框架和库:
    • Accelerate.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
  9. 选择您的项目(而不是具体的目标),然后打开 Build Settings 标签页。在 Other Linker Flags 部分,添加 -ObjC。如果看不到这些设置,请将 Build Settings 栏中的过滤条件从 Basic 更改为 All

  10. 要安装 Places SDK for iOS XCFramework,请参阅 Places SDK for iOS 使用入门

第 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 步(可选):选择使用 Metal 渲染框架

借助 Maps SDK for iOS,您可以选择使用 Apple 提供的 Metal 渲染框架。如需在您的应用中试用 Metal 渲染程序,请先调用 Objective-C 中的 [GMSServices setMetalRendererEnabled:YES],或调用 Swift 中的 GMSServices.setMetalRendererEnabled(true),然后再创建任何地图视图。

如果您手动安装 SDK,还必须确保在 XCode 中添加 Metal.framework

第 5 步:添加地图

以下代码演示了如何将简单的地图添加到现有的 ViewController

  1. 在应用的默认 ViewController 中添加或更新方法,以创建并初始化 GMSMapView 的实例。

    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 camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
            let mapView = GMSMapView.map(withFrame: self.view.frame, camera: camera)
            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.
      GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
                                                              longitude:151.20
                                                                   zoom:6];
      GMSMapView *mapView = [GMSMapView mapWithFrame:self.view.frame camera:camera];
      mapView.myLocationEnabled = YES;
      [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
    
          
  2. 运行您的应用。您将看到一张带有在澳大利亚悉尼中心位置的标记。如果您看到该标记,但看不到地图,请确认您已提供 API 密钥。

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

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

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

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>googlechromes</string>
    <string>comgooglemaps</string>
</array>

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

Xcode 中的 LSApplicationQuerySchemes 配置

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

-canOpenURL: failed for URL: "comgooglemaps://" - error: "This app is not allowed to query for scheme comgooglemaps"
-canOpenURL: failed for URL: "googlechromes://" - error: "This app is not allowed to query for scheme googlechromes"

为了消除这些错误,请按照上文所述向您的 Info.plist 添加声明。

后续步骤

现在,您已经有了 API 密钥和 Xcode 项目,可以创建和运行应用了。Maps SDK for iOS 提供了许多可帮助您入门的教程和示例应用。如需了解详情,请参阅以下资源: