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

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

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

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

  1. 9.0.0 より前のバージョンからアップグレードする場合は、アップグレード後に GoogleMapsBaseGoogleMapsCoreGoogleMapsM4B の依存関係を削除する必要があります。GoogleMaps の依存関係は削除しないでください。詳細については、バージョン 9.0.0 リリースノートをご覧ください。

    Xcode のプロジェクト構成で、[Frameworks, Libraries, and Embedded Content] を見つけます。マイナス記号(-)を使用して、次のフレームワークを削除します。

    • GoogleMapsBase(9.0.0 より前のバージョンからのアップグレードのみ)
    • GoogleMapsCore(9.0.0 より前のバージョンからのアップグレードのみ)
    • GoogleMapsM4B(9.0.0 より前のバージョンからのアップグレードのみ)
  2. Xcode で、[File] > [Packages] > [Update To Latest Package Versions] に移動します。
  3. インストールを確認するには、Project Navigator の [Package Dependencies] セクションに移動し、パッケージとそのバージョンを確認します。

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

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

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

  1. Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
    1. 新しいプロジェクトを作成する。
    2. [iOS] > [App] テンプレートを選択します。
    3. プロジェクト オプション画面で次の操作を行います。
      1. [Project Name] を入力します。
      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, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleNavigation', '9.0.0'
    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 と Maps SDK for iOS の XCFrameworks をインストールする手順は次のとおりです。

  1. 次の SDK バイナリとリソース ファイルをダウンロードします。
  2. Xcode を起動し、既存のプロジェクトを開くか、新しいプロジェクトを作成します。iOS を初めて使用する場合は、新しいプロジェクトを作成し、iOS アプリ テンプレートを選択します。
  3. プロジェクトから既存のマップ、ナビゲーション、プレイスの参照をすべて削除します。
  4. 次の XCFrameworks をプロジェクトの [フレームワーク、ライブラリ、埋め込みコンテンツ] の下にドラッグして、Maps SDK と Navigation SDK の両方をインストールします(プロンプトが表示されたら、[Copy items if needed] を選択します)。
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  5. ダウンロードした GoogleMapsResources から Xcode プロジェクトの最上位ディレクトリに GoogleMaps.bundle をドラッグします。プロンプトが表示されたら、[Copy items if needed] が選択されていることを確認します。
  6. ダウンロードした GoogleNavigationResources から Xcode プロジェクトの最上位ディレクトリに GoogleNavigation.bundle をドラッグします。プロンプトが表示されたら、[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[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 に追加します。

  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"];
    を追加します。

ステップ 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 の実装に追加する方法については、サービスの利用状況をモビリティ トランザクションに関連付けるをご覧ください。