このガイドでは、Navigation SDK for iOS を iOS アプリに統合します。
前提条件
- Navigation SDK for iOS を使用するには、請求先アカウントと Maps SDK for iOS が有効なプロジェクトが必要です。複数のプロジェクト オーナーと課金管理者を作成し、これらのロールをチーム内の誰かが必ず担えるようにすることをおすすめします。詳細については、Google Cloud プロジェクトを設定するをご覧ください。
- Navigation SDK for iOS を使用してプロジェクトをビルドするには、バージョン 15.0 以降の Xcode が必要です。
- Navigation SDK のターゲット iOS の最小バージョンは 14.0 です。
SDK をインストールする
Swift Package Manager
Navigation SDK は Swift Package Manager からインストールできます。SDK を追加するには、既存の Navigation SDK の依存関係がすべて削除されていることを確認します。
新規または既存のプロジェクトに SDK を追加する手順は次のとおりです。
-
Xcode の
project
またはworkspace
を開き、[File] > [Add Package Dependencies] に移動します。 - URL として「https://github.com/googlemaps/ios-navigation-sdk」と入力し、Enter キーを押してパッケージを取り込み、[Add Package] をクリックします。
-
特定の
version
をインストールするには、[依存関係ルール] フィールドをバージョン ベースのオプションのいずれかに設定します。新しいプロジェクトの場合は、最新バージョンを指定し、[正確なバージョン] オプションを使用することをおすすめします。完了したら、[パッケージを追加] をクリックします。 -
[Choose Package Products] ウィンドウで、指定した
main
ターゲットにGoogleNavigation
が追加されることを確認します。完了したら、[パッケージを追加] をクリックします。 -
インストールを確認するには、ターゲットの
General
ペインに移動します。[Frameworks, Libraries, and Embedded Content] 内に、インストールされているパッケージが表示されます。 [Project Navigator] の [Package Dependencies] セクションで、パッケージとそのバージョンを確認することもできます。
既存のプロジェクトの package
を更新する手順は次のとおりです。
- Xcode で、[File] > [Packages] > [Update To Latest Package Versions] に移動します。
- インストールを確認するには、Project Navigator の [Package Dependencies] セクションに移動して、パッケージとそのバージョンを確認します。
CocoaPods
を使用して追加された既存の Navigation SDK の依存関係を削除する手順は次のとおりです。
- Xcode ワークスペースを閉じます。ターミナルを開いて、次のコマンドを実行します。
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
CocoaPods 以外に使用していない場合は、
Podfile
、Podfile.resolved
、Xcode のworkspace
を削除します。
-
Xcode プロジェクトの構成設定で、[フレームワーク、ライブラリ、埋め込みコンテンツ] を見つけます。マイナス記号(-)を使用して、次のフレームワークを削除します。
GoogleMaps.xcframework
GoogleMapsBase.xcframework
GoogleMapsCore.xcframework
GoogleNavigation.xcframework
-
Xcode プロジェクトの最上位ディレクトリから、
GoogleMaps
バンドルを削除します。
CocoaPods
Navigation SDK for iOS は CocoaPods Pod として提供されています。CocoaPods は、Swift と Objective-C の Cocoa プロジェクトで依存関係を管理するためのオープンソース ツールです。
CocoaPods ツールがない場合は、ターミナルから以下のコマンドを実行して、macOS 上に CocoaPods ツールをインストールします。詳細については、CocoaPods スタートガイドをご覧ください。
sudo gem install cocoapods
Navigation SDK for iOS の Podfile
を作成し、それを使用して API とその依存関係をインストールします。
- Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
- 新しいプロジェクトを作成します。
- [iOS] > [App] テンプレートを選択します。
- プロジェクト オプション画面で、次の操作を行います。
- プロジェクト名を入力します。
- [バンドル ID] フィールドの値を記録します。その値を使用して、以下の API キーを制限できます。
- [Interface] を [Storyboard] に設定します。
- [言語] を Swift または Objective-C に設定します。
- プロジェクトのディレクトリに、
Podfile
という名前のファイルを作成します。このファイルでプロジェクトの依存関係を定義します。 Podfile
を編集し、依存関係とそのversionsを追加します。Navigation SDK for iOS に必要な依存関係を含む例を次に示します。 # Cocoapods インストール リファレンス #source 'https://github.com/CocoaPods/Specs.git' platform :ios, '14.0' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleNavigation', '5.3.1' 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 が最新バージョンに更新されます。
手動インストール
このガイドでは、Navigation SDK for iOS と Maps SDK for iOS を含む XCFrameworks をプロジェクトに手動で追加し、Xcode でビルド設定を構成する方法について説明します。XCFramework は、M1 チップセットを使用するマシンなど、複数のプラットフォームで使用できるバイナリ パッケージです。
Navigation SDK for iOS 用 XCFrameworks と Maps SDK for iOS をインストールする手順は次のとおりです。
- 次の SDK バイナリとリソース ファイルをダウンロードします。
- Xcode を起動し、既存のプロジェクトを開くか、新しいプロジェクトを作成します。iOS を初めて使用する場合は、新しいプロジェクトを作成し、iOS App テンプレートを選択します。
- 既存のマップ、ナビゲーション、プレイスの参照をプロジェクトからすべて削除します。
- 次の XCFrameworks をプロジェクトの [Frameworks, Libraries, and Embedded Content] の下にドラッグし、Maps SDK と Navigation SDK の両方をインストールします(プロンプトが表示されたら、[Copy items if needed] を選択します)。
GoogleMaps.xcframework
GoogleMapsBase.xcframework
GoogleMapsCore.xcframework
GoogleNavigation.xcframework
- ダウンロードした GoogleMapsResources から
GoogleMaps.bundle
を Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[Copy items if needed] が選択されていることを確認します。 - ダウンロードした GoogleNavigationResources から
GoogleNavigation.bundle
を Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[Copy items into destination group's folder] が選択されていることを確認します。 - プロジェクト ナビゲータからプロジェクトを選択し、アプリケーションのターゲットを選択します。
- [Build Phases] タブを開き、[Link Binary with Libraries] 内で、次のフレームワークとライブラリを追加します。
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
- アプリケーションのターゲットで、[Capabilities] タブを選択し、[Background Modes] をオンにして、次のモードを有効にします。
- オーディオ、AirPlay、ピクチャー イン ピクチャー
- 位置情報の更新
- 特定のターゲットではなくプロジェクトを選択し、[Build Settings] タブを開きます。[Other Linker Flags] セクションで、debug と release の両方に
‑ObjC
を追加します。これらの設定が表示されない場合は、[Build Settings] バーのフィルタを [Basic] から [All] に変更します。 Info.plist
を開き、次の Key-Value ペアを追加します。- キー:
NSLocationWhenInUseUsageDescription
(プライバシー - 使用中の位置情報の説明)
値: 「このアプリには、ターンバイターン方式のナビに位置情報を使用する権限が必要です。」 - キー:
NSLocationAlwaysAndWhenInUseUsageDescription
(プライバシー - 位置情報を常に使用する場合と使用中の場合の使用状況の説明)
値: 「ターンバイターン方式のナビで位置情報を使用する権限をこのアプリに付与する必要があります。」
- キー:
Apple のプライバシー マニフェスト ファイルを追加する
Apple は、App Store のアプリについて、アプリのプライバシーに関する詳細情報を求めています。最新情報や詳細については、Apple App Store の「プライバシーの詳細」ページをご覧ください。
- Navigation SDK for iOS のプライバシー マニフェスト バンドル GoogleNavigationPrivacy をダウンロードします。
- ファイルを解凍して
GoogleNavigationPrivacy.bundle
にアクセスします。 - 以下のいずれかの方法を使用して、
GoogleNavigationPrivacy.bundle
を Xcode プロジェクト ナビゲータに追加します。アプリのターゲットの [ターゲットに追加する] チェックボックスがオンになっていることを確認します。追加すると、PrivacyInfo ファイルがプロジェクト ナビゲータに表示され、値を調べることができます。 - アプリのアーカイブを作成し、そのアーカイブからプライバシー レポートを生成して、プライバシー マニフェストが追加されていることを確認します。
プロジェクトに API キーを追加する
次の例は、Xcode でプロジェクトに API キーを追加する方法を示しています。
Swift
次のように、API キーを AppDelegate.swift
に追加します。
- 次のインポート ステートメントを追加します。
import GoogleMaps import GoogleNavigation
application(_:didFinishLaunchingWithOptions:)
メソッドにGMSServices.provideAPIKey("YOUR_API_KEY")
を追加します。
Objective-C
次のように、API キーを AppDelegate.m
に追加します。
- 次のインポート ステートメントを追加します。
@import GoogleMaps; @import GoogleNavigation;
application:didFinishLaunchingWithOptions:
メソッドに[GMSServices provideAPIKey:@"YOUR_API_KEY"];
を追加します。
地図を追加する
このコードは、既存の 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 camera = GMSCameraPosition.camera(withLatitude: 47.67, longitude: -122.20, zoom: 14) mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) // 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]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; // 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 キーを指定していることを確認します。
モビリティ サービスのお客様の場合
モビリティ サービスのお客様は、モビリティに関するドキュメントで課金についてご確認ください。トランザクションの記録の詳細については、お支払い情報の設定をご覧ください。トランザクション ID を Navigation SDK の実装に追加する方法については、サービス利用をモビリティ トランザクションに関連付けるをご覧ください。