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

課金を有効にして API キーを作成したら、 アプリの開発に使用する Xcode プロジェクトです。

各バージョンのリリースノート なります。

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

Places SDK for iOS を使ってプロジェクトを作成するには、以下のものが必要です。

  • Xcode バージョン 15.0 以降

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

Swift Package Manager

Places SDK for iOS は、でインストールできます。 Swift Package Manager。SDK を追加するには、 既存の Places SDK for iOS の依存関係をすべて削除しました。

新規または既存のプロジェクトに SDK を追加する手順は次のとおりです。

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

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

  1. 9.0.0 より前のバージョンからアップグレードする場合は、 次の依存関係: GoogleMapsBaseGoogleMapsCore、 アップグレード後に GoogleMapsM4B。次の依存関係を削除しないでください。 GoogleMaps。詳しくは、 バージョン 9.0.0 リリースノート

    Xcode プロジェクト構成設定で、フレームワーク、ライブラリ、 および埋め込みコンテンツをご覧ください。マイナス記号(-)を使用して、次のフレームワークを削除します。

    • GoogleMapsBase(9.0.0 より前のバージョンからのアップグレードのみ)
    • GoogleMapsCore(9.0.0 より前のバージョンからのアップグレードのみ)
    • GoogleMapsM4B(9.0.0 より前のバージョンからのアップグレードのみ)
  2. Xcode で、[File] > [パッケージ >最新のパッケージ バージョンへの更新」を選択します。
  3. インストールを確認するには、Project Navigator の [Package Dependencies] セクションに移動します。 パッケージとそのバージョンを確認します。
で確認できます。 <ph type="x-smartling-placeholder">

以下を使用して、追加された既存の Places SDK for iOS 依存関係を削除するには、 CocoaPods の手順は次のとおりです。

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

手動でインストールした既存の Places SDK for iOS を削除するには、次の操作を行います。 手順は次のとおりです。
  1. Xcode プロジェクト構成設定で、フレームワーク、ライブラリ、 および埋め込みコンテンツをご覧ください。マイナス記号(-)を使用して、次のフレームワークを削除します。 <ph type="x-smartling-placeholder">
      </ph>
    • GooglePlaces.xcframework
  2. Xcode プロジェクトの最上位ディレクトリから、GooglePlaces を削除します。 あります。

CocoaPods

Places SDK for iOS は、CocoaPod として利用できます。 pod、GooglePlaces: すべてのプレイス機能が含まれます。

CocoaPods: Swift と Objective-C 用のオープンソース依存関係マネージャー Cocoa プロジェクト。CocoaPods ツールをまだインストールしていない場合は、 macOS の場合、ターミナルから次のコマンドを実行します。詳しくは、 CocoaPods スタートガイド

sudo gem install cocoapods

Places SDK for iOS 用の Podfile を作成し、 SDK とその依存関係をインストールします。

  1. Xcode プロジェクトをまだ作成していない場合は、ここで作成してローカルマシンに保存しますiOS 開発を初めて行う場合は、新しいプロジェクトを作成してください [iOS App template] を選択します。
  2. プロジェクトのディレクトリに、Podfile という名前のファイルを作成します。このファイルでプロジェクトの依存関係を定義します。
  3. Podfile を編集して、依存関係とそのバージョンを追加します。こちらの この例では、アプリケーションのターゲット名と、 GooglePlaces Pod に追加します。
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces', '8.3.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 コマンドを実行します。これにより、すべての API が更新されます Podfile で指定されたバージョンを最新バージョンに変更します。

手動インストール

このガイドでは、Places SDK for iOS を含む XCFramework を Xcode でビルド設定を構成します。XCFramework は、マシンを含む複数のプラットフォームで使用できるバイナリ パッケージ Apple Silicon を使用。

  1. 次の SDK バイナリとリソース ファイルをダウンロードします。
  2. ファイルを解凍して、XCFramework とリソースにアクセスします。
  3. Xcode を起動し、既存のプロジェクトを開くか、新しいプロジェクトを作成します。iOS 開発を初めて行う場合は、新しいプロジェクトを作成し、 [iOS App テンプレート] を選択します。
  4. プロジェクトから以前のリリースの Maps バンドルをすべて削除します。
  5. [全般] タブを開きます。次の XCFramework をプロジェクトにドラッグします [フレームワーク、ライブラリ、埋め込みコンテンツ] に移動します。確認事項 [Do Not Embed] を選択します。 <ph type="x-smartling-placeholder">
      </ph>
    • GooglePlaces.xcframework
  6. ダウンロードした GooglePlacesResources から GooglePlaces.bundle をドラッグします
  7. GooglePlaces.bundleGooglePlacesResources からコピーします。 Xcode プロジェクトの最上位ディレクトリにダウンロードしたファイルを使用します。必ず<ph type="x-smartling-placeholder"></ph>を選択してください プロンプトが表示されたら、コピー先グループのフォルダにアイテムをコピーします。
  8. プロジェクト ナビゲータでプロジェクトを選択し、 通信できます。
  9. [Build Phases] タブを開きます。リンクバイナリ内で ライブラリに、次のフレームワークとライブラリを追加します。 <ph type="x-smartling-placeholder">
      </ph>
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. 特定のターゲットではなくプロジェクトを選択して、 [Build Settings] タブ。[Linking - General ->]その他のリンカー フラグセクションに -ObjC を「Debug」に追加[リリース]を選択しますこれらの 設定が表示されない場合は、[Build Settings] バーでフィルタを変更してください。 [基本] から [すべて] に切り替えます。

GooglePlacesSwift

GooglePlacesSwift(プレビュー版)SDK は、Swift Package Manager、CocoaPods、または手動でインストールできます。「 すべてのプロセスでのインストール手順は、 Places SDK for iOS には以下の違いがあります。

たとえば、CocoaPods を使用する場合、編集後の Podfile は次のようになります。

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '15.3'

target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
  pod 'GooglePlacesSwift', '0.1.0'
end

ステップ 3: Apple のプライバシー マニフェスト ファイルを調べる

Apple が App Store のアプリについては、アプリのプライバシーに関する詳細情報を必要とします。最新情報などについては、Apple App Store のプライバシーの詳細ページをご覧ください。

Apple Privacy Manifest ファイルは、SDK のリソース バンドルに含まれています。プライバシー マニフェスト ファイルが含まれていることを確認し、その内容を検査するには、アプリのアーカイブを作成し、そのアーカイブからプライバシー レポートを生成します。

ステップ 4: アプリに API キーを追加する

以下の例で YOUR_API_KEY とある箇所は、実際の API キーに置き替えてください。

Swift

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

  • 次の import ステートメントを追加します。
    import GooglePlaces
  • application(_:didFinishLaunchingWithOptions:) に以下を追加します。 メソッドで指定し、YOUR_API_KEY を実際の API キーに置き換えます。
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

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

  • 次の import ステートメントを追加します。
    @import GooglePlaces;
  • application:didFinishLaunchingWithOptions: に以下を追加します。 メソッドで指定し、YOUR_API_KEY を実際の API キーに置き換えます。
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

GooglePlacesSwift

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

  • 次の import ステートメントを追加します。
    import GooglePlacesSwift
  • application(_:didFinishLaunchingWithOptions:) に以下を追加します。 メソッドで指定し、YOUR_API_KEY を実際の API キーに置き換えます。
    PlacesClient.shared.provideAPIKey("YOUR_API_KEY")

ステップ 5: コーディングを開始する

次のコードサンプルは、現在の場所を取得する方法を示しています。

Swift

  import GooglePlaces
  import UIKit

  class GetStartedViewController : UIViewController {

    // Add a pair of UILabels in Interface Builder, and connect the outlets to these variables.
    @IBOutlet private var nameLabel: UILabel!
    @IBOutlet private var addressLabel: UILabel!

    private var placesClient: GMSPlacesClient!

    override func viewDidLoad() {
      super.viewDidLoad()
      placesClient = GMSPlacesClient.shared()
    }

    // Add a UIButton in Interface Builder, and connect the action to this function.
    @IBAction func getCurrentPlace(_ sender: UIButton) {
      let placeFields: GMSPlaceField = [.name, .formattedAddress]
      placesClient.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: placeFields) { [weak self] (placeLikelihoods, error) in
        guard let strongSelf = self else {
          return
        }

        guard error == nil else {
          print("Current place error: \(error?.localizedDescription ?? "")")
          return
        }

        guard let place = placeLikelihoods?.first?.place else {
          strongSelf.nameLabel.text = "No current place"
          strongSelf.addressLabel.text = ""
          return
        }

        strongSelf.nameLabel.text = place.name
        strongSelf.addressLabel.text = place.formattedAddress
      }
    }
  }

  

Objective-C

  #import "GetStartedViewController.h"
  @import GooglePlaces;

  @interface GetStartedViewController ()
  // Add a pair of UILabels in Interface Builder and connect the outlets to these variables
  @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
  @property (weak, nonatomic) IBOutlet UILabel *addressLabel;
  @end

  @implementation GetStartedViewController {
    GMSPlacesClient *_placesClient;
  }

  - (void)viewDidLoad {
    [super viewDidLoad];
    _placesClient = [GMSPlacesClient sharedClient];
  }

  // Add a pair of UILabels in Interface Builder and connect the outlets to these variables.
  - (IBAction)getCurrentPlace:(UIButton *)sender {
    GMSPlaceField placeFields = (GMSPlaceFieldName | GMSPlaceFieldFormattedAddress);

    __weak typeof(self) weakSelf = self;
    [_placesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:placeFields callback:^(NSArray<GMSPlaceLikelihood *> * _Nullable likelihoods, NSError * _Nullable error) {
      __typeof__(self) strongSelf = weakSelf;
      if (strongSelf == nil) {
        return;
      }

      if (error != nil) {
        NSLog(@"An error occurred %@", [error localizedDescription]);
        return;
      }

      GMSPlace *place = likelihoods.firstObject.place;
      if (place == nil) {
        strongSelf.nameLabel.text = @"No current place";
        strongSelf.addressLabel.text = @"";
        return;
      }

      strongSelf.nameLabel.text = place.name;
      strongSelf.addressLabel.text = place.formattedAddress;
    }];
  }

  @end
  

GooglePlacesSwift

  struct ContentView: View {
    @State var place: Place?

    var body: some View {
      Button("Get Place") {
        // A hotel in Saigon with an attribution.
        let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"
        let fetchPlaceRequest = FetchPlaceRequest(
          placeID: placeID,
          placeProperties: [.displayName, .formattedAddress]
        )
        Task {
          switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
          case .success(let place):
            self.place = place
          case .failure(let placesError):
            // Handle error
        }
      Text(swiftPlace?.displayName ?? "No place yet")
        .padding()
      Text(swiftPlace?.formattedAddress ?? "No place yet")
        .padding()
    }
  }
  

次のステップ

プロジェクトの構成が完了したら、 サンプルアプリ