Set up your project

Follow this guide to integrate the Navigation SDK for iOS into an iOS app.

Prerequisites

  • Before you start using the Navigation SDK for iOS, you need a project with a billing account and the Maps SDK for iOS enabled. We recommend creating multiple project owners and billing administrators, so that you'll always have someone with these roles available to your team. To learn more, see Set up your Google Cloud project.
  • To build a project using the Navigation SDK for iOS, you need version 14.0 or later of Xcode.
  • The minimum target iOS version for the navigation SDK is 14.0.

Installing the SDK

Use CocoaPods

The Navigation SDK for iOS is available as a CocoaPods pod. CocoaPods is an open source dependency manager for Swift and Objective-C Cocoa projects.

If you don't already have the CocoaPods tool, install it on macOS by running the following command from the terminal. For details, see the CocoaPods Getting Started guide.

sudo gem install cocoapods

Create a Podfile for the Navigation SDK for iOS and use it to install the API and its dependencies:

  1. If you don't have an Xcode project yet, create one now and save it to your local machine. If you're new to iOS development:
    1. Create a new project.
    2. Select the iOS > App template.
    3. On the project options screen:
      1. Enter the Project Name.
      2. Record the value of the Bundle identifier field. You can use that value to restrict your API key below.
      3. Set the project Interface to Storyboard.
      4. Set the Language to Swift or Objective-C.
  2. Create a file named Podfile in your project directory. This file defines your project's dependencies.
  3. Edit the Podfile and add your dependencies along with their versions. Here is an example which includes the dependency you need for the Navigation SDK for iOS:
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '14.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleNavigation', '5.3.1'
    end
            
    Make sure to regularly run pod outdated to detect newer versions. If necessary, upgrade to the latest version.
  4. Save the Podfile.
  5. Open a terminal and go to the directory containing the Podfile:

    cd <path-to-project>
  6. Run the pod install command. This installs the APIs specified in the Podfile, along with any dependencies.

    pod install
  7. Close Xcode, and then open (double-click) your project's .xcworkspace file to launch Xcode. From this time onwards, you must use the .xcworkspace file to open the project.

To update the API for an existing project, follow these steps:

  1. Open a terminal and go to the project directory containing the Podfile.
  2. Run the pod update command. This updates all the APIs specified in the Podfile to the latest version.

Install manually

This guide shows how to manually add the XCFrameworks containing the Navigation SDK for iOS, and the Maps SDK for iOS to your project and configure your build settings in Xcode. An XCFramework is a binary package that you can use on multiple platforms, including machines using the M1 chipset

Follow these steps to install the XCFrameworks for the Navigation SDK for iOS, and the Maps SDK for iOS:

  1. Download the following SDK binaries and resource files:
  2. Launch Xcode and either open an existing project, or create a new project. If you're new to iOS, create a new project and select the iOS App template.
  3. Remove all existing Maps, Navigation, and Places references from the project.
  4. Drag the following XCFrameworks into your project under Frameworks, Libraries, and Embedded Content to install both the Maps and Navigation SDKs (when prompted, select Copy items if needed):
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  5. Drag GoogleMaps.bundle from GoogleMapsResources you downloaded into the top level directory of your Xcode project. When prompted, ensure Copy items if needed is selected.
  6. Drag GoogleNavigation.bundle from GoogleNavigationResources you downloaded into the top level directory of your Xcode project. When prompted, ensure Copy items into destination group's folder is selected.
  7. Select your project from the Project Navigator, and choose your application's target.
  8. Open the Build Phases tab, and within Link Binary with Libraries, add the following frameworks and libraries:
    • Accelerate.framework
    • AudioToolbox.framework
    • AVFoundation.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. In your application's target, select the Capabilities tab, turn on Background Modes, and enable the following modes:
    • Audio, AirPlay, and Picture in Picture
    • Location updates
  10. Choose your project, rather than a specific target, and open the Build Settings tab. In the Other Linker Flags section, add ‑ObjC for both debug and release. If these settings are not visible, change the filter in the Build Settings bar from Basic to All.
  11. Open Info.plist and add the following key-value pairs:
    • Key: NSLocationWhenInUseUsageDescription (Privacy - Location When In Use Usage Description)
      Value: "This app needs permission to use your location for turn-by-turn navigation."
    • Key: NSLocationAlwaysAndWhenInUseUsageDescription (Privacy - Location Always and When In Use Usage Description)
      Value: "This app needs permission to use your location for turn-by-turn navigation."

Add an API key to your project

The following examples show how to add the API key to your project in Xcode:

Swift

Add your API key to your AppDelegate.swift as follows:

  1. Add the following import statements:
    import GoogleMaps
    import GoogleNavigation
  2. Add the following to your application(_:didFinishLaunchingWithOptions:) method:
    GMSServices.provideAPIKey("YOUR_API_KEY")

Objective-C

Add your API key to your AppDelegate.m as follows:

  1. Add the following import statements:
    @import GoogleMaps;
    @import GoogleNavigation;
  2. Add the following to your application:didFinishLaunchingWithOptions: method:
    [GMSServices provideAPIKey:@"YOUR_API_KEY"];

Add a map

This code demonstrates how to add a simple map to an existing ViewController, including some initial settings for navigation.

Before navigation can be enabled, the user must agree to the terms and conditions. To prompt the user, call GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(), then check to see whether the terms have been accepted. If the user rejects the terms, mapView.isNavigationEnabled = true has no effect, and mapView.navigator is 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

Run your application. You should see a map centered over Kirkland, Washington. If the map is not visible, confirm that you have provided the correct API key.

If you are a Mobility Services customer

If you are a Mobility Services customer, learn about billing in the Mobility documentation. For more information about recording transactions, see Set up billing. To learn how to add transaction IDs to your Navigation SDK implementation, see Associate your service usage to Mobility transactions.