このガイドでは、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 バージョンは 15.0 です。
ステップ 1: 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
をインストールするには、[依存関係ルール] フィールドをバージョン ベースのオプションのいずれかに設定します。新しいプロジェクトの場合は、最新バージョンを指定して [正確なバージョン] オプションを使用することをおすすめします。完了したら、[Add Package] をクリックします。 -
[Choose Package Products] ウィンドウで、指定した
main
ターゲットにGoogleNavigation
が追加されることを確認します。完了したら、[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
を使用して追加された既存の Navigation SDK 依存関係を削除する手順は次のとおりです。
- 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] を見つけます。マイナス記号(-)を使用して、次のフレームワークを削除します。
GoogleMaps.xcframework
GoogleMapsBase.xcframework
GoogleMapsCore.xcframework
GoogleNavigation.xcframework
-
Xcode プロジェクトの最上位ディレクトリから、
GoogleMaps
バンドルを削除します。
CocoaPods
iOS 用の Navigation SDK は、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] テンプレートを選択します。
- プロジェクト オプション画面で次の操作を行います。
- [Project Name] を入力します。
- [バンドル ID] フィールドの値を記録します。この値を使用して、以下の API キーを制限できます。
- プロジェクトの [Interface] を [Storyboard] に設定します。
- [言語] を [Swift] または [Objective-C] に設定します。
- プロジェクトのディレクトリに、
Podfile
という名前のファイルを作成します。このファイルでプロジェクトの依存関係を定義します。 Podfile
を編集して、依存関係とそのversionsを追加します。Navigation SDK for iOS に必要な依存関係が含まれている例を次に示します。 # Cocoapods インストール リファレンス #source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.0' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleNavigation', '9.0.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 が最新バージョンに更新されます。
手動インストール
このガイドでは、Navigation SDK for iOS と Maps SDK for iOS を含む XCFrameworks をプロジェクトに手動で追加し、Xcode でビルド設定を構成する方法を説明します。XCFramework は、M1 チップセットを搭載したマシンなど、複数のプラットフォームで使用できるバイナリ パッケージです。
Navigation SDK for iOS と Maps SDK for iOS の XCFrameworks をインストールする手順は次のとおりです。
- 次の SDK バイナリとリソース ファイルをダウンロードします。
- Xcode を起動し、既存のプロジェクトを開くか、新しいプロジェクトを作成します。iOS を初めて使用する場合は、新しいプロジェクトを作成し、iOS アプリ テンプレートを選択します。
- プロジェクトから既存のマップ、ナビゲーション、プレイスの参照をすべて削除します。
- 次の XCFrameworks をプロジェクトの [フレームワーク、ライブラリ、埋め込みコンテンツ] の下にドラッグして、Maps SDK と Navigation SDK の両方をインストールします(プロンプトが表示されたら、[Copy items if needed] を選択します)。
GoogleMaps.xcframework
GoogleMapsBase.xcframework
GoogleMapsCore.xcframework
GoogleNavigation.xcframework
- ダウンロードした GoogleMapsResources から Xcode プロジェクトの最上位ディレクトリに
GoogleMaps.bundle
をドラッグします。プロンプトが表示されたら、[Copy items if needed] が選択されていることを確認します。 - ダウンロードした GoogleNavigationResources から Xcode プロジェクトの最上位ディレクトリに
GoogleNavigation.bundle
をドラッグします。プロンプトが表示されたら、[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
([Privacy - Location] と [When In Use Usage Description])
値: 「このアプリには、ターンバイターン方式のナビで位置情報を使用する許可が必要です。」
- キー:
ステップ 2: Apple のプライバシー マニフェスト ファイルを調べる
Apple が App Store のアプリについては、アプリのプライバシーに関する詳細情報を必要とします。最新情報などについては、Apple App Store のプライバシーの詳細ページをご覧ください。
Apple Privacy Manifest ファイルは、SDK のリソース バンドルに含まれています。プライバシー マニフェスト ファイルが含まれていることを確認し、その内容を検査するには、アプリのアーカイブを作成し、そのアーカイブからプライバシー レポートを生成します。
ステップ 3: プロジェクトに 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"];
を追加します。
ステップ 4: 地図を追加する
このコードは、ナビゲーションの初期設定を含むシンプルな地図を既存の 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 の実装に追加する方法については、サービスの利用状況をモビリティ トランザクションに関連付けるをご覧ください。