課金を有効にして 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] > [Add Package Dependencies] に移動します。 - URL として「https://github.com/googlemaps/ios-places-sdk」と入力し、Enter キーを押してパッケージを取得して、[Add Package] をクリックします。
-
特定の
version
をインストールするには、[依存関係ルール] フィールドをバージョン ベースのオプションのいずれかに設定します。新しいプロジェクトの場合は、最新バージョンを指定して [正確なバージョン] オプションを使用することをおすすめします。完了したら、[Add Package] をクリックします。 -
[Choose Package Products] ウィンドウで、指定した
main
ターゲットにGooglePlaces
が追加されることを確認します。完了したら、[Add Package] をクリックします。 -
インストールを確認するには、ターゲットの
General
ペインに移動します。[Frameworks, Libraries, and Embedded Content] に、インストールされたパッケージが表示されます。 [Project Navigator] の [Package Dependencies] セクションで、パッケージとそのバージョンを確認することもできます。
既存のプロジェクトの package
を更新する手順は次のとおりです。
9.0.0 より前のバージョンからアップグレードする場合は、アップグレード後に
GoogleMapsBase
、GoogleMapsCore
、GoogleMapsM4B
の依存関係を削除する必要があります。GoogleMaps
の依存関係は削除しないでください。詳細については、バージョン 9.0.0 リリースノートをご覧ください。Xcode のプロジェクト構成で、[Frameworks, Libraries, and Embedded Content] を見つけます。マイナス記号(-)を使用して、次のフレームワークを削除します。
GoogleMapsBase
(9.0.0 より前のバージョンからのアップグレードのみ)GoogleMapsCore
(9.0.0 より前のバージョンからのアップグレードのみ)GoogleMapsM4B
(9.0.0 より前のバージョンからのアップグレードのみ)
- Xcode で、[File] > [Packages] > [Update To Latest Package Versions] に移動します。
- インストールを確認するには、Project Navigator の [Package Dependencies] セクションに移動し、パッケージとそのバージョンを確認します。
CocoaPods
を使用して追加された既存の Places SDK for iOS 依存関係を削除する手順は次のとおりです。
- Xcode ワークスペースを閉じます。ターミナルを開いて、次のコマンドを実行します。
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Podfile
、Podfile.resolved
、Xcode のworkspace
を CocoaPods 以外に使用していない場合は、削除します。
-
Xcode のプロジェクト構成で、[Frameworks, Libraries, and Embedded Content] を見つけます。マイナス記号(-)を使用して、次のフレームワークを削除します。
GooglePlaces.xcframework
-
Xcode プロジェクトの最上位ディレクトリから、
GooglePlaces
バンドルを削除します。
CocoaPods
Places SDK for iOS は、すべてのプレイス機能を含む GooglePlaces の CocoaPod Pod として利用できます。
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
コマンドを実行します。これにより、Podfile
で指定されたすべての API が最新バージョンに更新されます。
手動インストール
このガイドでは、Places SDK for iOS を含む XCFramework をプロジェクトに手動で追加し、Xcode でビルド設定を構成する方法について説明します。XCFramework は、Apple シリコンを使用するマシンなど、複数のプラットフォームで使用できるバイナリ パッケージです。
- 次の SDK バイナリとリソース ファイルをダウンロードします。
- ファイルを解凍して、XCFramework とリソースにアクセスします。
- Xcode を起動し、既存のプロジェクトを開くか、新しいプロジェクトを作成します。iOS 開発を初めて行う場合は、新しいプロジェクトを作成し、iOS アプリ テンプレートを選択します。
- プロジェクトから以前のリリースの Maps バンドルをすべて削除します。
-
[全般] タブを開きます。次の XCFramework を、[Frameworks, Libraries, and Embedded Content] の下のプロジェクトにドラッグします。必ず [埋め込みしない] を選択してください。
GooglePlaces.xcframework
ダウンロードした GooglePlacesResources から -
ダウンロードした GooglePlacesResources から
GooglePlaces.bundle
を Xcode プロジェクトの最上位ディレクトリにコピーします。プロンプトが表示されたら、[ Copy items into destination group's folder] を選択します。 - プロジェクト ナビゲータからプロジェクトを選択し、アプリのターゲットを選択します。
-
[Build Phases] タブを開きます。[Link Binary with Libraries] 内で、以下のフレームワークとライブラリを追加します。
CoreGraphics.framework
CoreLocation.framework
libc++.tbd
libz.tbd
QuartzCore.framework
UIKit.framework
-
特定のターゲットではなくプロジェクトを選択し、[Build Settings] タブを開きます。[Linking - General] -> [Other Linker Flags] セクションで、[Debug] と [Release] に
-ObjC
を追加します。これらの設定が表示されない場合は、[Build Settings] バーのフィルタを [Basic] から [All] に変更します。
GooglePlaces.bundle
をドラッグします。
GooglePlacesSwift
GooglePlacesSwift(プレビュー版)SDK は、Swift Package Manager、CocoaPods、または手動でインストールできます。どのプロセスでもインストール手順は Places SDK for iOS の手順と同じですが、次の点が異なります。
- Xcode 15.3 が必要です。
- Swift Package Manager を使用している場合は、
GooglePlaces
のインスタンスをGooglePlacesSwift
に置き換える必要があります。これには 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 Privacy Manifest ファイルは、SDK のリソース バンドルに含まれています。プライバシー マニフェスト ファイルが含まれていることを確認し、その内容を検査するには、アプリのアーカイブを作成し、そのアーカイブからプライバシー レポートを生成します。
ステップ 4: アプリに API キーを追加する
以下の例で YOUR_API_KEY
とある箇所は、実際の API キーに置き替えてください。
Swift
次のように、API キーを AppDelegate.swift
に追加します。
- 次の import ステートメントを追加します。
import GooglePlaces
- 次の内容を
application(_:didFinishLaunchingWithOptions:)
メソッドに追加し、YOUR_API_KEY を実際の API キーに置き換えます。GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
次のように、API キーを AppDelegate.m
に追加します。
- 次の import ステートメントを追加します。
@import GooglePlaces;
- 次の内容を
application:didFinishLaunchingWithOptions:
メソッドに追加し、YOUR_API_KEY を実際の API キーに置き換えます。[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
GooglePlacesSwift
次のように、API キーを AppDelegate.swift
に追加します。
- 次の 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() } }
次のステップ
プロジェクトを構成したら、サンプルアプリを探索できます。