プロジェクトをセットアップする

このガイドでは、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 を追加する手順は次のとおりです。

  1. Xcode の project または workspace を開き、[File] > [Add Package Dependencies] に移動します。
  2. URL として「https://github.com/googlemaps/ios-navigation-sdk」と入力し、Enter キーを押してパッケージを取り込み、[Add Package] をクリックします。
  3. 特定の version をインストールするには、[依存関係ルール] フィールドをバージョン ベースのオプションのいずれかに設定します。新しいプロジェクトの場合は、最新バージョンを指定し、[正確なバージョン] オプションを使用することをおすすめします。完了したら、[パッケージを追加] をクリックします。
  4. [Choose Package Products] ウィンドウで、指定した main ターゲットに GoogleNavigation が追加されることを確認します。完了したら、[パッケージを追加] をクリックします。
  5. インストールを確認するには、ターゲットの General ペインに移動します。[Frameworks, Libraries, and Embedded Content] 内に、インストールされているパッケージが表示されます。 [Project Navigator] の [Package Dependencies] セクションで、パッケージとそのバージョンを確認することもできます。

既存のプロジェクトの package を更新する手順は次のとおりです。

  1. Xcode で、[File] > [Packages] > [Update To Latest Package Versions] に移動します。
  2. インストールを確認するには、Project Navigator の [Package Dependencies] セクションに移動して、パッケージとそのバージョンを確認します。

CocoaPods を使用して追加された既存の Navigation SDK の依存関係を削除する手順は次のとおりです。

  1. Xcode ワークスペースを閉じます。ターミナルを開いて、次のコマンドを実行します。
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. CocoaPods 以外に使用していない場合は、PodfilePodfile.resolved、Xcode の workspace を削除します。

手動でインストールした既存の Navigation SDK for iOS を削除する手順は次のとおりです。
  1. Xcode プロジェクトの構成設定で、[フレームワーク、ライブラリ、埋め込みコンテンツ] を見つけます。マイナス記号(-)を使用して、次のフレームワークを削除します。
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  2. 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 とその依存関係をインストールします。

  1. Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
    1. 新しいプロジェクトを作成します。
    2. [iOS] > [App] テンプレートを選択します。
    3. プロジェクト オプション画面で、次の操作を行います。
      1. プロジェクト名を入力します。
      2. [バンドル ID] フィールドの値を記録します。その値を使用して、以下の API キーを制限できます。
      3. [Interface] を [Storyboard] に設定します。
      4. [言語] を Swift または Objective-C に設定します。
  2. プロジェクトのディレクトリに、Podfile という名前のファイルを作成します。このファイルでプロジェクトの依存関係を定義します。
  3. 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 を実行するようにしてください。必要に応じて、最新バージョンにアップグレードしてください。
  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 が最新バージョンに更新されます。

手動インストール

このガイドでは、Navigation SDK for iOS と Maps SDK for iOS を含む XCFrameworks をプロジェクトに手動で追加し、Xcode でビルド設定を構成する方法について説明します。XCFramework は、M1 チップセットを使用するマシンなど、複数のプラットフォームで使用できるバイナリ パッケージです。

Navigation SDK for iOS 用 XCFrameworks と Maps SDK for iOS をインストールする手順は次のとおりです。

  1. 次の SDK バイナリとリソース ファイルをダウンロードします。
  2. Xcode を起動し、既存のプロジェクトを開くか、新しいプロジェクトを作成します。iOS を初めて使用する場合は、新しいプロジェクトを作成し、iOS App テンプレートを選択します。
  3. 既存のマップ、ナビゲーション、プレイスの参照をプロジェクトからすべて削除します。
  4. 次の XCFrameworks をプロジェクトの [Frameworks, Libraries, and Embedded Content] の下にドラッグし、Maps SDK と Navigation SDK の両方をインストールします(プロンプトが表示されたら、[Copy items if needed] を選択します)。
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  5. ダウンロードした GoogleMapsResources から GoogleMaps.bundle を Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[Copy items if needed] が選択されていることを確認します。
  6. ダウンロードした GoogleNavigationResources から GoogleNavigation.bundle を Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[Copy items into destination group's folder] が選択されていることを確認します。
  7. プロジェクト ナビゲータからプロジェクトを選択し、アプリケーションのターゲットを選択します。
  8. [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
  9. アプリケーションのターゲットで、[Capabilities] タブを選択し、[Background Modes] をオンにして、次のモードを有効にします。
    • オーディオ、AirPlay、ピクチャー イン ピクチャー
    • 位置情報の更新
  10. 特定のターゲットではなくプロジェクトを選択し、[Build Settings] タブを開きます。[Other Linker Flags] セクションで、debugrelease の両方に ‑ObjC を追加します。これらの設定が表示されない場合は、[Build Settings] バーのフィルタを [Basic] から [All] に変更します。
  11. Info.plist を開き、次の Key-Value ペアを追加します。
    • キー: NSLocationWhenInUseUsageDescriptionプライバシー - 使用中の位置情報の説明
      値: 「このアプリには、ターンバイターン方式のナビに位置情報を使用する権限が必要です。」
    • キー: NSLocationAlwaysAndWhenInUseUsageDescriptionプライバシー - 位置情報を常に使用する場合と使用中の場合の使用状況の説明
      値: 「ターンバイターン方式のナビで位置情報を使用する権限をこのアプリに付与する必要があります。」

Apple のプライバシー マニフェスト ファイルを追加する

  1. Navigation SDK for iOS のプライバシー マニフェスト バンドル GoogleNavigationPrivacy をダウンロードします。
  2. ファイルを解凍して GoogleNavigationPrivacy.bundle にアクセスします。
  3. 以下のいずれかの方法を使用して、GoogleNavigationPrivacy.bundle を Xcode プロジェクト ナビゲータに追加します。アプリのターゲットの [ターゲットに追加する] チェックボックスがオンになっていることを確認します。追加すると、PrivacyInfo ファイルがプロジェクト ナビゲータに表示され、値を調べることができます。
  4. Xcode のプライバシー情報のスクリーンショット
  5. アプリのアーカイブを作成し、そのアーカイブからプライバシー レポートを生成して、プライバシー マニフェストが追加されていることを確認します。

プロジェクトに API キーを追加する

次の例は、Xcode でプロジェクトに API キーを追加する方法を示しています。

Swift

次のように、API キーを AppDelegate.swift に追加します。

  1. 次のインポート ステートメントを追加します。
    import GoogleMaps
    import GoogleNavigation
  2. application(_:didFinishLaunchingWithOptions:) メソッドに
    GMSServices.provideAPIKey("YOUR_API_KEY")
    を追加します。

Objective-C

次のように、API キーを AppDelegate.m に追加します。

  1. 次のインポート ステートメントを追加します。
    @import GoogleMaps;
    @import GoogleNavigation;
  2. 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 の実装に追加する方法については、サービス利用をモビリティ トランザクションに関連付けるをご覧ください。