启用结算功能并创建 API 密钥后,您就可以设置 您用来开发应用的 Xcode 项目。
每个版本都有相应的版本说明 发布。
第 1 步:安装所需的软件
如需使用 Places SDK for iOS 构建项目,您需要:
- Xcode 版本 15.0 或更高版本
第 2 步:创建 Xcode 项目并安装 Places SDK for iOS
Swift Package Manager
可以通过 安装 Places SDK for iOS Swift Package Manager 的相关文档。要添加 SDK,请确保您已 移除了所有现有的 Places SDK for iOS 依赖项。
如需将 SDK 添加到新项目或现有项目,请按以下步骤操作:
-
打开 Xcode
project
或workspace
,然后转到 File >添加软件包依赖项。 - 输入 https://github.com/googlemaps/ios-places-sdk 作为网址,然后按 Enter 键 以提取软件包,然后点击“Add Package”(添加软件包)。
-
如需安装特定的
version
,请将 Dependency Rule 字段设置为以下其中一项: 基于版本的选项对于新项目,我们建议您指定最新版本和 使用“确切版本”选项。完成后,点击“添加软件包”。 -
在 Choose Package Products(选择软件包产品)窗口中,验证
GooglePlaces
是否已添加到 您指定的main
目标。完成后,点击“添加软件包”。 -
如需验证安装,请前往目标的
General
窗格。 在框架、库和嵌入式内容中,您应该会看到已安装的软件包。 您还可以查看“Package Dependencies”“Project Navigator”部分 以验证软件包及其版本。
如需更新现有项目的 package
,请按以下步骤操作:
如果您要从 9.0.0 之前的版本升级,就必须移除 以下依赖项:
GoogleMapsBase
、GoogleMapsCore
和GoogleMapsM4B
。请勿移除GoogleMaps
。有关详情,请参阅 9.0.0 版版本说明。在您的 Xcode 项目配置设置中,找到 Frameworks, Libraries, 和嵌入式内容。使用减号(-) 移除以下框架:
GoogleMapsBase
(仅适用于从 9.0.0 之前的版本进行的升级)GoogleMapsCore
(仅适用于从 9.0.0 之前的版本进行的升级)GoogleMapsM4B
(仅适用于从 9.0.0 之前的版本进行的升级)
- 在 Xcode 中,转到“File”(文件)>文件包 >更新到最新的软件包版本”。
- 如需验证安装,请前往 Project Navigator 的 Package Dependencies 部分 以验证软件包及其版本。
如需移除使用以下代码添加的现有 Places SDK for iOS 依赖项,请按以下步骤操作:
CocoaPods
,请按以下步骤操作:
- 关闭 Xcode 工作区。打开终端并执行以下命令:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
移除
Podfile
、Podfile.resolved
和 Xcodeworkspace
(如果您不将其用于除 CocoaPods 之外的任何其他目的)。
-
在您的 Xcode 项目配置设置中,找到 Frameworks, Libraries,
和嵌入式内容。使用减号(-) 移除以下框架:
<ph type="x-smartling-placeholder">
- </ph>
GooglePlaces.xcframework
-
从 Xcode 项目的顶层目录中,移除
GooglePlaces
软件包。
CocoaPods
Places SDK for iOS 以 CocoaPod 的形式提供 Pod、GooglePlaces,其中包含所有地点功能。
CocoaPods 是一种适用于 Swift 和 Objective-C 的开源依赖项管理器 Cocoa 项目。如果您还没有 CocoaPods 工具,请在 macOS:从终端运行以下命令。有关详情,请参阅 CocoaPods 入门指南。
sudo gem install cocoapods
为 Places SDK for iOS 创建 Podfile
,并使用
安装 SDK 及其依赖项:
- 如果您尚未创建 Xcode 项目,请立即创建一个并将其保存到您的本地计算机上。如果您刚开始接触 iOS 开发,请创建一个新项目 然后选择 iOS 应用模板。
- 在您的项目目录中创建一个名为
Podfile
的文件。此文件可定义您项目的依赖项。 - 修改
Podfile
并添加您的依赖项及其版本。这里有一个 该示例指定了您的应用目标名称、GooglePlaces
pod:source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.0' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GooglePlaces', '8.3.0' end
确保定期运行pod outdated
,以检测何时有较新的 以确保您始终使用的是最新版本。 - 保存
Podfile
。 打开一个终端,然后转到包含
Podfile
的目录:cd <path-to-project>
运行
pod install
命令。此操作会安装Podfile
中指定的 API 及其可能具有的任何依赖项。pod install
关闭 Xcode,然后打开(双击)您项目的
.xcworkspace
文件以启动 Xcode。从此刻开始,您必须使用.xcworkspace
文件打开项目。
如需更新现有项目的 API,请按以下步骤操作:
- 打开终端,转到包含
Podfile
的项目目录。 - 运行
pod update
命令。这将更新所有 APIPodfile
中指定的版本更新到最新版本。
手动安装
本指南介绍了如何将包含 Places SDK for iOS 的 XCFramework 添加到 项目并在 Xcode 中配置您的构建设置。XCFramework 是一个二进制软件包,可在多个平台(包括机器)上使用 使用 Apple 芯片。
- 下载以下 SDK 二进制文件和资源文件:
- 解压缩文件以访问 XCFramework 和资源。
- 启动 Xcode,并打开现有的项目或创建新项目。如果您是刚开始接触 iOS 开发,请创建一个新项目并 选择 iOS 应用模板。
- 移除项目中之前版本的任何地图捆绑包。
-
打开常规标签页。将以下 XCFramework 拖到您的项目中
(在框架、库和嵌入式内容下)。请确保
以选择不嵌入:
<ph type="x-smartling-placeholder">
- </ph>
GooglePlaces.xcframework
从您下载的 GooglePlacesResources 中拖动 -
从 GooglePlacesResources 中复制
GooglePlaces.bundle
您下载到 Xcode 项目的顶级目录中。请务必选择 出现提示时,将内容复制到目标群组的文件夹。 - 从项目导航器中选择您的项目,然后选择 应用的目标
-
打开 Build Phases 标签页。在将二进制文件链接到
库,请添加以下框架和库:
<ph type="x-smartling-placeholder">
- </ph>
CoreGraphics.framework
CoreLocation.framework
libc++.tbd
libz.tbd
QuartzCore.framework
UIKit.framework
-
选择您的项目而不是特定目标,然后打开 Build Settings 标签页。在关联 - 常规 ->其他链接器 Flags 部分,将
-ObjC
添加到“Debug”和“发布”如果这些 设置不可见,请更改 Build Settings(构建设置)栏中的过滤条件 从基本改为全部。
GooglePlaces.bundle
GooglePlacesSwift
您可以使用 Swift Package Manager 和 CocoaPods 手动安装 GooglePlacesSwift(预览版)SDK。通过 所有进程中的安装步骤都与 Places SDK for iOS,以下是一些不同之处:
- 需要 Xcode 15.3。
- 如果使用 Swift Package Manager,则必须替换
GooglePlacesSwift
会员价为GooglePlaces
。这包括 import 语句。 - 将版本号更新为 0.1.0。
- 如要手动安装,请下载以下 SDK 二进制文件和资源文件:
例如,如果使用 CocoaPods,则修改后的 Podfile
将如下所示:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.3' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GooglePlacesSwift', '0.1.0' end
第 3 步:检查 Apple 隐私清单文件
Apple 要求为 App Store 中的应用提供应用隐私权详细信息。如需了解最新动态和更多信息,请访问 Apple App Store 隐私权详情页面。
Apple 隐私清单文件包含在 SDK 的资源包中。如需验证隐私清单文件是否包含在内,并检查其内容,请创建应用的归档,并从归档中生成隐私报告。
第 4 步:将 API 密钥添加到您的应用
在下例中,请将 YOUR_API_KEY
替换为您的 API 密钥。
Swift
按照以下方法向 AppDelegate.swift
添加 API 密钥:
- 添加以下 import 语句:
import GooglePlaces
- 将以下内容添加到您的
application(_:didFinishLaunchingWithOptions:)
中 方法,将 YOUR_API_KEY 替换为您的 API 密钥:GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
按照以下方法向 AppDelegate.m
添加 API 密钥:
- 添加以下 import 语句:
@import GooglePlaces;
- 将以下内容添加到您的
application:didFinishLaunchingWithOptions:
中 方法,将 YOUR_API_KEY 替换为您的 API 密钥:[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
GooglePlacesSwift
按照以下方法向 AppDelegate.swift
添加 API 密钥:
- 添加以下 import 语句:
import GooglePlacesSwift
- 将以下内容添加到您的
application(_:didFinishLaunchingWithOptions:)
中 方法,将 YOUR_API_KEY 替换为您的 API 密钥:PlacesClient.shared.provideAPIKey("YOUR_API_KEY")
第 5 步:开始编写代码
以下代码示例演示了如何获取当前地点。
Swift
import GooglePlaces import UIKit class GetStartedViewController : UIViewController { // Add a pair of UILabels in Interface Builder, and connect the outlets to these variables. @IBOutlet private var nameLabel: UILabel! @IBOutlet private var addressLabel: UILabel! private var placesClient: GMSPlacesClient! override func viewDidLoad() { super.viewDidLoad() placesClient = GMSPlacesClient.shared() } // Add a UIButton in Interface Builder, and connect the action to this function. @IBAction func getCurrentPlace(_ sender: UIButton) { let placeFields: GMSPlaceField = [.name, .formattedAddress] placesClient.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: placeFields) { [weak self] (placeLikelihoods, error) in guard let strongSelf = self else { return } guard error == nil else { print("Current place error: \(error?.localizedDescription ?? "")") return } guard let place = placeLikelihoods?.first?.place else { strongSelf.nameLabel.text = "No current place" strongSelf.addressLabel.text = "" return } strongSelf.nameLabel.text = place.name strongSelf.addressLabel.text = place.formattedAddress } } }
Objective-C
#import "GetStartedViewController.h" @import GooglePlaces; @interface GetStartedViewController () // Add a pair of UILabels in Interface Builder and connect the outlets to these variables @property (weak, nonatomic) IBOutlet UILabel *nameLabel; @property (weak, nonatomic) IBOutlet UILabel *addressLabel; @end @implementation GetStartedViewController { GMSPlacesClient *_placesClient; } - (void)viewDidLoad { [super viewDidLoad]; _placesClient = [GMSPlacesClient sharedClient]; } // Add a pair of UILabels in Interface Builder and connect the outlets to these variables. - (IBAction)getCurrentPlace:(UIButton *)sender { GMSPlaceField placeFields = (GMSPlaceFieldName | GMSPlaceFieldFormattedAddress); __weak typeof(self) weakSelf = self; [_placesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:placeFields callback:^(NSArray<GMSPlaceLikelihood *> * _Nullable likelihoods, NSError * _Nullable error) { __typeof__(self) strongSelf = weakSelf; if (strongSelf == nil) { return; } if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } GMSPlace *place = likelihoods.firstObject.place; if (place == nil) { strongSelf.nameLabel.text = @"No current place"; strongSelf.addressLabel.text = @""; return; } strongSelf.nameLabel.text = place.name; strongSelf.addressLabel.text = place.formattedAddress; }]; } @end
GooglePlacesSwift
struct ContentView: View { @State var place: Place? var body: some View { Button("Get Place") { // A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [.displayName, .formattedAddress] ) Task { switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): self.place = place case .failure(let placesError): // Handle error } Text(swiftPlace?.displayName ?? "No place yet") .padding() Text(swiftPlace?.formattedAddress ?? "No place yet") .padding() } }
后续步骤
配置完项目后,您可以探索 示例应用。