Xcode プロジェクトを設定する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

課金を有効にして API キーを作成したら、アプリの開発に使用する Xcode プロジェクトを設定する準備が整います。

ステップ 1: 必要なソフトウェアをインストールする

Maps SDK for iOS を使用してプロジェクトを作成するには、ダウンロードしてインストールする必要があります。

  • Xcodeバージョン 13.0 以降
  • Cocoapods または Carthage

ステップ 2: Xcode プロジェクトを作成し、Maps SDK for iOS をインストールする

CocoaPods を使用

Maps SDK for iOS は CocoaPods ポッドとして提供されています。CocoaPods は、Swift と Objective-C の Cocoa プロジェクトで依存関係を管理するためのオープンソース ツールです。

CocoaPods ツールがない場合は、ターミナルから以下のコマンドを実行して、macOS 上に CocoaPods ツールをインストールします。詳しくは、CocoaPods スタートガイドをご覧ください。

sudo gem install cocoapods

Maps SDK for iOS の Podfile を作成し、これを使用して API とその依存関係をインストールします。

  1. Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
    1. 新しいプロジェクトを作成します。
    2. [iOS] > [App] テンプレートを選択します。
    3. プロジェクト オプション画面で次の操作を行います。
      1. プロジェクト名を入力します。
      2. [Bundle ID] フィールドの値を記録します。この値を使用して、以下の API キーを制限できます。
      3. プロジェクトの [インターフェース] を [Storyboard] に設定します。
      4. [Language] を [Swift] または [Objective-C] に設定します。
  2. プロジェクトのディレクトリに、Podfile という名前のファイルを作成します。このファイルでプロジェクトの依存関係を定義します。
  3. Podfile を編集して、依存関係をそのバージョンとともに追加します。Maps SDK for iOS に必要な依存関係を含む例を以下に示します。
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '13.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleMaps', '7.4.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 が最新バージョンに更新されます。

Carthage を使用する

Maps SDK for iOS は、Swift プロジェクトと Objective-C Cocoa プロジェクト用のシンプルな分散型の依存関係マネージャーである Carthage と併用できます。

  1. Carthage をインストールします。いくつかの方法があります。正確な手順については、Carthage の README ファイルをご覧ください。
  2. Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
    1. 新しいプロジェクトを作成します。
    2. [iOS] > [App] テンプレートを選択します。
    3. プロジェクト オプション画面で次の操作を行います。
      1. プロジェクト名を入力します。
      2. [Bundle ID] フィールドの値を記録します。この値を使用して、以下の API キーを制限できます。
      3. プロジェクトの [インターフェース] を [Storyboard] に設定します。
      4. [Language] を [Swift] または [Objective-C] に設定します。
  3. プロジェクトのディレクトリに、Cartfile という名前のファイルを作成します。このファイルは、プロジェクトの依存関係を定義します。
  4. Cartfile を編集して、その依存関係とバージョンを追加します。
    binary "https://dl.google.com/geosdk/GoogleMaps.json" == 6.2.1
    定期的に carthage outdated を実行して新しいバージョンの有無を検出し、常に最新の状態が保たれるようにします。必要に応じて、最新バージョンにアップグレードします。
  5. Cartfile を保存します。
  6. ターミナル ウィンドウで、Cartfile があるディレクトリに移動します。
    cd <path-to-project>
  7. carthage update コマンドを実行します。Cartfile で指定した API とその依存関係がインストールされます。
  8. Finder のプロジェクト ディレクトリで、Carthage/Build/iOS の下にあるダウンロードしたフレームワーク ファイルに移動します。
  9. 次のバンドルをプロジェクトにドラッグします。(プロンプトが表示されたら、必要に応じて [アイテムをコピー] を選択します。上記と同じバージョンを使用してください。
    • GoogleMaps-x.x.x/Base/Frameworks/GoogleMapsBase.xcframework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMaps.xcframework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMapsCore.xcframework
    • (プレミアム プランをご利用のお客様のみ)GoogleMaps-x.x.x/M4B/Frameworks/GoogleMapsM4B.xcframework
  10. プロジェクトで GoogleMaps.xcframework を右クリックし、[Show In Finder] を選択します。
  11. GoogleMaps.bundleResources フォルダから Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[コピー先グループのフォルダにアイテムをコピーする] が選択されていないことを確認します。
  12. プロジェクト ナビゲータで目的のプロジェクトを選択し、アプリのターゲットを選択します。
  13. アプリのターゲットの [Build Phases] タブを開き、[Link Binary with Libraries] で、次のフレームワークとライブラリを追加します。
    • Accelerate.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
    • UIKit.framework
  14. (特定のターゲットではなく)プロジェクトを選択して、[Build Settings] タブを開きます。[Other Linker Flags] セクションで -ObjC を追加します。これらの設定が表示されない場合は、[Build Settings] バーのフィルタを [Basic] から [All] に変更します。

  15. Places SDK for iOS をインストールする方法は、Places SDK for iOS スタートガイドをご覧ください。

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

  1. ターミナルを開き、Cartfile を含むプロジェクト ディレクトリに移動します。
  2. carthage update コマンドを実行します。Cartfile で指定されたすべての API が最新バージョンに更新されます。

手動でインストールする

このガイドでは、Maps SDK for iOS を手動でプロジェクトに追加し、Xcode でビルド設定を行う方法について説明します。

  1. SDK ソースファイル(GoogleMaps-7.4.0)をダウンロードします。
  2. ダウンロードしたソースファイルを解凍します。
  3. Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
    1. 新しいプロジェクトを作成します。
    2. [iOS] > [App] テンプレートを選択します。
    3. プロジェクト オプション画面で次の操作を行います。
      1. プロジェクト名を入力します。
      2. [Bundle ID] フィールドの値を記録します。この値を使用して、以下の API キーを制限できます。
      3. プロジェクトの [インターフェース] を [Storyboard] に設定します。
      4. [Language] を [Swift] または [Objective-C] に設定します。
  4. 次のバンドルをプロジェクトにドラッグします。(プロンプトが表示されたら、必要に応じて [アイテムをコピー] を選択します。上記と同じバージョンを使用してください。
    • GoogleMaps-x.x.x/Base/Frameworks/GoogleMapsBase.xcframework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMaps.xcframework
    • GoogleMaps-x.x.x/Maps/Frameworks/GoogleMapsCore.xcframework
    • (プレミアム プランをご利用のお客様のみ)GoogleMaps-x.x.x/M4B/Frameworks/GoogleMapsM4B.xcframework
  5. プロジェクトで GoogleMaps.xcframework を右クリックし、[Show In Finder] を選択します。
  6. GoogleMaps.bundleResources フォルダから Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[コピー先グループのフォルダにアイテムをコピーする] が選択されていないことを確認します。
  7. プロジェクト ナビゲータで目的のプロジェクトを選択し、アプリのターゲットを選択します。
  8. アプリのターゲットの [Build Phases] タブを開き、[Link Binary with Libraries] で、次のフレームワークとライブラリを追加します。
    • Accelerate.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
    • UIKit.framework
  9. (特定のターゲットではなく)プロジェクトを選択して、[Build Settings] タブを開きます。[Other Linker Flags] セクションで -ObjC を追加します。これらの設定が表示されない場合は、[Build Settings] バーのフィルタを [Basic] から [All] に変更します。

  10. Places SDK for iOS をインストールする方法は、Places SDK for iOS スタートガイドをご覧ください。

XCFramework をインストールする

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

カルタッジ付き

Maps SDK for iOS は、Swift および Objective-C Cocoa プロジェクト用のシンプルな分散型の依存関係マネージャーである Carthage と併用できます。

  1. Carthage をインストールします。いくつかの方法があります。正確な手順については、Carthage の README ファイルをご覧ください。
  2. Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
    1. 新しいプロジェクトを作成します。
    2. [iOS] > [App] テンプレートを選択します。
    3. プロジェクト オプション画面で次の操作を行います。
      1. プロジェクト名を入力します。
      2. [Bundle ID] フィールドの値を記録します。この値を使用して、以下の API キーを制限できます。
      3. プロジェクトの [インターフェース] を [Storyboard] に設定します。
      4. [Language] を [Swift] または [Objective-C] に設定します。
  3. プロジェクト ディレクトリに Cartfile という名前のファイルを作成します。このファイルは、プロジェクトの依存関係を定義します。
  4. Cartfile を編集して、依存関係をそのバージョンとともに追加します。

    binary "https://dl.google.com/geosdk/GoogleMaps.json" == 6.2.1-beta
  5. Cartfile を保存します。
  6. ターミナル ウィンドウで、Cartfile があるディレクトリに移動します。
    cd <path-to-project>
  7. carthage update コマンドを実行します。これにより、Cartfile で指定された API と、それらの依存関係(存在する場合)がインストールされます。
  8. Finder のプロジェクト ディレクトリで、Carthage/Build の下にあるダウンロードしたフレームワーク ファイルに移動します。
  9. 次の XCFrameworks をプロジェクトの [Frameworks、ライブラリ、埋め込みコンテンツ] にドラッグします。XCFramework ごとに [Do Not Embed] を選択します。
    • GoogleMaps-x.x.x/GoogleMapsBase.xcframework
    • GoogleMaps-x.x.x/GoogleMaps.xcframework
    • GoogleMaps-x.x.x/GoogleMapsCore.xcframework
    • (プレミアム プランをご利用のお客様のみ)GoogleMaps-x.x.x/GoogleMapsM4B.xcframework
  10. プロジェクトで GoogleMaps.xcframework を右クリックし、[Find In Finder] を選択します。
  11. GoogleMaps.bundleios-arm64_x86_64-simulator/GoogleMaps.framework/Resources フォルダから Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[必要に応じてアイテムをコピー] が選択されていないことを確認します。
  12. プロジェクト ナビゲータからプロジェクトを選択し、アプリケーションのターゲットを選択します。
  13. アプリのターゲットの [Build Phases] タブを開き、[Link Binary with Libraries] で次のフレームワークとライブラリを追加します。
    • Accelerate.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
    • UIKit.framework
  14. 特定のターゲットではなくプロジェクトを選択し、[Build Settings] タブを開きます。[その他のリンカーフラグ] セクションで、-ObjC を追加します。これらの設定が表示されていない場合は、[Build Settings] バーのフィルタを [Basic] から [All] に変更します。

  15. Places SDK for iOS XCFramework をインストールするには、Places SDK for iOS のスタートガイドをご覧ください。

手動

このガイドでは、Maps SDK for iOS を手動でプロジェクトに追加し、Xcode でビルド設定を構成する方法について説明します。

  1. SDK ソースファイル(GoogleMaps-7.4.0)をダウンロードします。
  2. ソースファイルを展開します。[Frameworks] フォルダに移動して XCFramework にアクセスします。
  3. Xcode プロジェクトがまだない場合は、ここで作成してローカルマシンに保存します。iOS 開発を初めて行う場合:
    1. 新しいプロジェクトを作成します。
    2. [iOS] > [App] テンプレートを選択します。
    3. プロジェクト オプション画面で次の操作を行います。
      1. プロジェクト名を入力します。
      2. [Bundle ID] フィールドの値を記録します。この値を使用して、以下の API キーを制限できます。
      3. プロジェクトの [インターフェース] を [Storyboard] に設定します。
      4. [Language] を [Swift] または [Objective-C] に設定します。
  4. 次の XCFrameworks をプロジェクトの [Frameworks、ライブラリ、埋め込みコンテンツ] にドラッグします。XCFramework ごとに [Do Not Embed] を選択します。
    • GoogleMaps-x.x.x/GoogleMapsBase.xcframework
    • GoogleMaps-x.x.x/GoogleMaps.xcframework
    • GoogleMaps-x.x.x/GoogleMapsCore.xcframework
    • (プレミアム プランをご利用のお客様のみ)GoogleMaps-x.x.x/GoogleMapsM4B.xcframework
  5. プロジェクトで GoogleMaps.xcframework を右クリックし、[Find In Finder] を選択します。
  6. GoogleMaps.bundleios-arm64_x86_64-simulator/GoogleMaps.framework/Resources フォルダから Xcode プロジェクトの最上位ディレクトリにドラッグします。プロンプトが表示されたら、[必要に応じてアイテムをコピー] が選択されていないことを確認します。
  7. プロジェクト ナビゲータからプロジェクトを選択し、アプリケーションのターゲットを選択します。
  8. アプリのターゲットの [Build Phases] タブを開き、[Link Binary with Libraries] で次のフレームワークとライブラリを追加します。
    • Accelerate.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
    • UIKit.framework
  9. 特定のターゲットではなくプロジェクトを選択し、[Build Settings] タブを開きます。[その他のリンカーフラグ] セクションで、-ObjC を追加します。これらの設定が表示されていない場合は、[Build Settings] バーのフィルタを [Basic] から [All] に変更します。

  10. Places SDK for iOS XCFramework をインストールするには、Places SDK for iOS のスタートガイドをご覧ください。

ステップ 3: API キーをプロジェクトに追加する

API キーを取得するで、アプリ用の API キーを生成しました。次に、そのキーを Xcode プロジェクトに追加します。

次の例では、YOUR_API_KEY を API キーに置き換えます。

Swift

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

  1. 次の import ステートメントを追加します:
    import GoogleMaps
  2. API キーを使用して、application(_:didFinishLaunchingWithOptions:) メソッドに
    GMSServices.provideAPIKey("YOUR_API_KEY")
    を追加します。
  3. Places API も使用している場合は、次のようにキーを再度追加します。
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

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

  1. 次の import ステートメントを追加します:
    @import GoogleMaps;
  2. API キーを使用して、application:didFinishLaunchingWithOptions: メソッドに
    [GMSServices provideAPIKey:@"YOUR_API_KEY"];
    を追加します。
  3. Places API も使用している場合は、次のようにキーを再度追加します。
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

ステップ 4(省略可): メタル レンダリング フレームワークの使用を選択する

Maps SDK for iOS を使用すると、Apple の Metal レンダリング フレームワークの使用を有効にできます。アプリでメタル レンダラを試すには、地図ビューを作成する前に、Objective-C で [GMSServices setMetalRendererEnabled:YES]、Swift で GMSServices.setMetalRendererEnabled(true) を呼び出します。

SDK を手動でインストールする場合は、Xcode で Metal.framework も追加する必要があります。

ステップ 5: 地図を追加する

以下のコードは、シンプルな地図を既存の ViewController に追加する方法を示しています。

  1. アプリのデフォルトの ViewController にメソッドを追加または更新して、GMSMapView のインスタンスを作成して初期化します。

    Swift

    /*
     * Copyright 2020 Google Inc. All rights reserved.
     *
     *
     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
     * file except in compliance with the License. You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software distributed under
     * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
     * ANY KIND, either express or implied. See the License for the specific language governing
     * permissions and limitations under the License.
     */
    
    import UIKit
    import GoogleMaps
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
            // Create a GMSCameraPosition that tells the map to display the
            // coordinate -33.86,151.20 at zoom level 6.
            let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
            let mapView = GMSMapView.map(withFrame: self.view.frame, camera: camera)
            self.view.addSubview(mapView)
    
            // Creates a marker in the center of the map.
            let marker = GMSMarker()
            marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
            marker.title = "Sydney"
            marker.snippet = "Australia"
            marker.map = mapView
      }
    }
    
          

    Objective-C

    /*
    * Copyright 2020 Google Inc. All rights reserved.
    *
    *
    * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
    * file except in compliance with the License. You may obtain a copy of the License at
    *
    *     http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software distributed under
    * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
    * ANY KIND, either express or implied. See the License for the specific language governing
    * permissions and limitations under the License.
    */
    
    #import "ViewController.h"
    #import <GoogleMaps/GoogleMaps.h>
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
      // Do any additional setup after loading the view.
      // Create a GMSCameraPosition that tells the map to display the
      // coordinate -33.86,151.20 at zoom level 6.
      GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
                                                              longitude:151.20
                                                                   zoom:6];
      GMSMapView *mapView = [GMSMapView mapWithFrame:self.view.frame camera:camera];
      mapView.myLocationEnabled = YES;
      [self.view addSubview:mapView];
    
      // Creates a marker in the center of the map.
      GMSMarker *marker = [[GMSMarker alloc] init];
      marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
      marker.title = @"Sydney";
      marker.snippet = @"Australia";
      marker.map = mapView;
    }
    
    @end
    
          
  2. アプリを実行すると、オーストラリアのシドニーが中央に配置された 1 つのマーカーが配置された地図が表示されます。マーカーが表示されていても地図が表示されない場合は、API キーを指定していることを確認します。

ステップ 6(省略可): API で使用する URL スキームを宣言する

iOS 9 と Xcode 7 以降では、アプリの Info.plist ファイルでスキームを指定することにより、アプリが開く対象の URL スキームを宣言できます。Maps SDK for iOS は、ユーザーが地図上の Google ロゴをクリックすると Google マップ モバイルアプリを開き、関連する URL スキームを宣言できます。

Maps SDK for iOS で使用される URL スキームを宣言するには、次の行を Info.plist に追加します。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>googlechromes</string>
    <string>comgooglemaps</string>
</array>

次のスクリーンショットは、Xcode でのユーザー インターフェースでの設定を示しています。

Xcode の LSApplicationQueriesSchemes 構成

上記の宣言がない場合、ユーザーが地図上の Google ロゴをタップすると、以下のエラーが発生する可能性があります。

-canOpenURL: failed for URL: "comgooglemaps://" - error: "This app is not allowed to query for scheme comgooglemaps"
-canOpenURL: failed for URL: "googlechromes://" - error: "This app is not allowed to query for scheme googlechromes"

これらのエラーを排除するには、前述のように Info.plist に宣言を追加します。

次のステップ

API キーと Xcode プロジェクトが作成されたので、アプリを作成して実行できます。Maps SDK for iOS には、利用開始に役立つ多くのチュートリアルとサンプルアプリが用意されています。詳しくは以下をご覧ください。