Places SDK for iOS(Objective-C)スタートガイド

1. 始める前に

コーディングを開始する前に、次の準備が必要になります。

Xcode

このチュートリアルでは、Apple の Xcode ツールと Objective-C 言語を使用して、エミュレータで実行するシンプルな iOS アプリを作成します。物理デバイスは必要ありません。Xcode は https://developer.apple.com/xcode/ からダウンロードできます。

CocoaPods

Places SDK for iOS は CocoaPods ポッドとして提供されています。CocoaPods は、Swift と Objective-C のプロジェクト向けのオープンソースの依存関係管理ツールです。このツールをまだお持ちでない場合は、インストールしてからインストールを続行する必要があります。次のようにターミナルからインストールできます。

sudo gem install cocoapods

CocoaPods の詳細については、CocoaPods スタートガイドをご覧ください。

SDK のインストール

SDK をインストールするには、プロジェクト ディレクトリに Podfile を作成する必要があります。CocoaPods は、必要な依存関係のダウンロードと構成に使用します。最も簡単な方法は、Xcode で新しいプロジェクトを作成し、それに Podfile を追加して、そこに Pod をインストールすることです。

Xcode を開くと [Welcome to Xcode] 画面が表示されます。ここでは、[Create a new Xcode project] を選択します。

2010473937c7b.png

次の画面では、新しいプロジェクトのテンプレートについて尋ねられます。[シングル ビュー アプリケーション](iOS の場合)を選択し、[次へ] をタップします。

プロダクト名の入力を求められたら、好みのものを選択できますが、生成されたバンドル ID を必ずメモしてください。これは後で必要になります。

72fbf25cb2db22ad.png

[次へ] をクリックすると、プロジェクトが作成されます。作成されたディレクトリをメモしておきます。Xcode を終了し、ターミナルを使用してそのディレクトリに移動します。

ターミナルを使用して、次のコマンドを入力します。

pod init

Podfile というファイルが作成されます。次のように編集して、Google マップの Pod を追加します。

target '{YOUR APP NAME}' do
pod 'GoogleMaps'
end

それを保存して、Xcode を閉じます。必ず閉じてください。次のステップで基盤となるプロジェクトを編集するためです。完了すると、別のプロジェクト ファイルが開きます。これは、デベロッパーが Xcode を閉じていなかった場合、どこにあるのか混乱してしまうことがよくあることです。ターミナルで、プロジェクト ディレクトリに移動し、「pod install&#39」を実行します。

789c5bc62817f68a.png

完了すると、Pod がインストールされ、新しい .xcworkspace ファイルが作成されます。今後は、このプロジェクトでこの ID を使用します。ただし、コーディングの前に必要なのは API キーです。

2. API キーを取得する

以下の有効化の手順では、Maps SDK for iOS を有効化します。

Google Maps Platform をセットアップする

課金を有効にした Google Cloud Platform アカウントとプロジェクトをまだ作成していない場合は、Google Maps Platform スタートガイドに沿って請求先アカウントとプロジェクトを作成してください。

  1. Cloud Console で、プロジェクトのプルダウン メニューをクリックし、この Codelab に使用するプロジェクトを選択します。

  1. Google Cloud Marketplace で、この Codelab に必要な Google Maps Platform API と SDK を有効にします。詳しい手順については、こちらの動画またはドキュメントをご覧ください。
  2. Cloud Console の [認証情報] ページで API キーを生成します。詳しい手順については、こちらの動画またはドキュメントをご覧ください。Google Maps Platform へのすべてのリクエストで API キーが必要になります。

3. Places API アプリの作成

コンソール プロジェクトを作成し、そのプロジェクトで Places API を有効にして API キーを取得したら、最初の Places API アプリのコーディングを開始する準備が整いました。

Pod ファイルをインストールすると、新しい .xcworkspace ファイルが作成されています。ダブルクリックして開きます。

19d62f34c08e645c.png

プロジェクト エクスプローラで、「Pod」という新しいフォルダが作成されます。正常に実行されると、フレームワークを含む GoogleMaps フォルダが表示されます。

1064884f64c61aa.png

4. Info.plist ファイルを編集します。

アプリを初めて実行する際に、位置情報サービスへのアクセス権をユーザーに要求するためのダイアログが iOS に表示されます。このダイアログは、定義した文字列を Info.plist ファイルに配置します。この文字列が存在しない場合、ダイアログは表示されず、アプリは動作しません。

Info.plist ファイルは、次のプロジェクト エクスプローラにあります。

c224c920ab3f1ef.png

選択すると、plist エディタが表示されます。

163-000859ca56f3b19da5.png

いずれかの要素にカーソルを合わせると、「+」アイコンが表示されます。押すと、新しいエントリが表示されます。値に「NSLocationAlwaysUsageDescription'」と入力します。

9fb225d6f5508794.png

Enter キーを押して新しいキーを追加します。次に、このキーの [値] 列をダブルクリックし、文字列を追加します。

0aefeb184187aa58.png

この文字列について詳しくは、こちらの Apple デベロッパー向けドキュメントをご覧ください。

5. App Delegate を編集する

プロジェクト エクスプローラで AppDelegate.m を見つけて開きます。これで、API キーが追加されます。

ファイルの先頭で、#import 行のすぐ下に追加します。

@import GoogleMaps;

次に、danFinishLaunchingWithOptions: 関数に「return YES'」行を追加します。

[GMSServices provideAPIKey:@"<Add your API Key>"];

必ず、先ほど生成した API キーを使用してください。

6. ストーリーボード ファイルを編集する

プロジェクト エクスプローラで Main.storyboard ファイルを開きます。右上のサイドバーを押して、サイドバーが有効になっていることを確認します。

2025/07/0533

次に、サイドバーの下部にあるオブジェクト ライブラリを選択して、ラベル コントロールを見つけます。

adec7051ae949531.png

左側にある View Controller のシーンで、[View'] が選択されていることを確認します。

e4827b92b5861e3e.png

次に、7 個のラベルをビューにドラッグ&ドロップします。以下に示すように配置を調整します。必ずサイズに合わせてドラッグしてください。ラベル内のテキストをダブルクリックし、必要な値を入力することにより、テキストを編集できます。

f8a9457772358069.png

一番下にあるラベル(非常に大きいラベル)については、プロパティ エディタに移動して、行数が 0 に設定されていることを確認します(デフォルトは 1)。これにより、複数の線をレンダリングできます。

a4abacf00d8888fe.png

7. 値のアウトレットを作成する

3 つの「値」ラベルに対応するアウトレットを作成する必要があります。これにより、コードを使用してその値を変更できます。それには、まずアシスタント エディタを有効にする必要があります。削除するには、まずプロパティ サイドバーをクリックして削除します。(このボタンは前のステップで表示されていました)。

アシスタント ボタンを選択します。ここに示されている二重の円はアシスタントのボタンです。

e92dcc4ceea20a51.png

ViewController.h ファイルをレンダリングしていることを確認します。設定していない場合は、アシスタント ウィンドウの上部にあるエディタを使用して変更できます。

d42f0fcc18b84703.png

次に、Ctrl キーを押したまま、アシスタントの ViewController.h ファイルの @interface 行の下に各ラベルをドラッグ&ドロップします。使用する接続の種類を尋ねるダイアログが表示されます。

a44b7888ed0f62b.png

設定が「接続: アウトレット」、「種類: UILabel」、「ストレージ: 弱い」であることを確認し、それぞれに名前を付けます。この Codelab では、経度、緯度、高度のラベルをそれぞれ lblLongitude、lblLatitude、lblAltidude と呼んでいます。また、下の大きなラベルを下からドラッグして、lblPlaces という名前を付けます。

完了すると、ViewController.h ファイルは次のようになります。

#import <UIKit/UIKit.h>
@import GoogleMaps;

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *lblLatitude;
@property (weak, nonatomic) IBOutlet UILabel *lblLongitude;
@property (weak, nonatomic) IBOutlet UILabel *lblAltitude;
@property (weak, nonatomic) IBOutlet UILabel *lblPlaces;

@end

8. Location API と Google Client API のヘッダー ファイルの編集

最後のステップ - Places API を使用するアプリをビルドする前に、ヘッダー ファイル(ViewController.h)にさらに変数をいくつか設定する必要があります。Core Location Manager と Core Location オブジェクトは次のとおりです。

@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;

Google API クライアントも必要です。

@property GMSPlacesClient *placesClient;

最後に、クラスが CLLocationManagerDelegate を実装するようにヘッダー ファイルを更新する必要があります。

@interface ViewController : UIViewController<CLLocationManagerDelegate>

完了すると、ヘッダー ファイルは次のようになります。

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <GoogleMaps/GoogleMaps.h>


@interface ViewController : UIViewController<CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;
@property (weak, nonatomic) IBOutlet UILabel *lblLongitude;
@property (weak, nonatomic) IBOutlet UILabel *lblLatitude;
@property (weak, nonatomic) IBOutlet UILabel *lblAltitude;
@property (weak, nonatomic) IBOutlet UILabel *lblPlaces;

@property GMSPlacesClient *placesClient;
@end

9. ビュー コントローラを編集する

まず、viewDidLoad 関数を編集して Location Manager を初期化し、位置情報へのアクセス許可をユーザーにリクエストし、最後に Location Manager を起動して現在地をトラッキングします。また、Google Places API クライアントを初期化します。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.locationManager = [[CLLocationManager alloc]init];
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
        // Or [self.locationManager requestWhenInUseAuthorization];
    }
    [self.locationManager startUpdatingLocation];
    
    self.locationManager.delegate = self;
    self.location = [[CLLocation alloc] init];
    self.placesClient = [GMSPlacesClient sharedClient];
}

10. 位置情報の更新を処理する

ロケーション マネージャーが、dedUpdateLocations 関数を呼び出すことで、位置情報の更新データを使用してビュー コントローラにコールバックします。これを ViewController.m に追加する必要があります。関数は次のようになります。

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    // Enter code here
}

この関数ではいくつかの処理を行う必要があります。

まず、最後に受信した場所とともに位置情報をキャッシュに保存します。

self.location = locations.lastObject;

次に、緯度、経度、標高の 3 つのラベルを

self.lblLatitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.latitude];

self.lblLongitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.longitude];

self.lblAltitude.text = [NSString stringWithFormat:@"%f", self.location.altitude];

次に、Places Client を使用して Places API を呼び出します。これを行うには、場所の可能性のリストを取得するコールバック関数を指定します。Places API は、ユーザーの現在地に基づいて、ユーザーが特定の場所にいる可能性を判断します。可能性のある場所の名前と、ユーザーがその場所にいる可能性を示す 0 ~ 1 の値が返されます。

[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {

その後、コールバックを実装できます。場所の可能性や場所の可能性を順に追加していきます。

[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {

  if (error != nil) {
    NSLog(@"Current Place error %@", [error localizedDescription]);
    return;
  }
  NSMutableString *strPlaces = [NSMutableString stringWithString:@""];

  for (GMSPlaceLikelihood *likelihood in likelihoodList.likelihoods) {
    GMSPlace* place = likelihood.place;
    NSLog(@"Current Place name %@ at likelihood %g", place.name,
            likelihood.likelihood);
    NSLog(@"Current Place address %@", place.formattedAddress);
    NSLog(@"Current Place attributions %@", place.attributions);
    NSLog(@"Current PlaceID %@", place.placeID);
    [strPlaces appendString:place.name];
    [strPlaces appendString:@" "];
    [strPlaces appendFormat:@"%g",likelihood.likelihood];
    [strPlaces appendString:@"\n"];
  }
  self.lblPlaces.text = strPlaces;
}];

完了すると、dedUpdateLocations 関数は次のようになります。

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    self.location = locations.lastObject;
    self.lblLatitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.latitude];
    self.lblLongitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.longitude];
    self.lblAltitude.text = [NSString stringWithFormat:@"%f", self.location.altitude];
    
    NSLog(@"%@", self.location.description);
    
    [self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {

        if (error != nil) {
            NSLog(@"Current Place error %@", [error localizedDescription]);
            return;
        }
        NSMutableString *strPlaces = [NSMutableString stringWithString:@""];
        
        for (GMSPlaceLikelihood *likelihood in likelihoodList.likelihoods)  
        {
            GMSPlace* place = likelihood.place;
            NSLog(@"Current Place name %@ at likelihood %g", place.name, likelihood.likelihood);
            NSLog(@"Current Place address %@", place.formattedAddress);
            NSLog(@"Current Place attributions %@", place.attributions);
            NSLog(@"Current PlaceID %@", place.placeID);
            [strPlaces appendString:place.name];
            [strPlaces appendString:@" "];
            [strPlaces appendFormat:@"%g",likelihood.likelihood];
            [strPlaces appendString:@"\n"];
        }
        self.lblPlaces.text = strPlaces;
    }];
}

これで、アプリを実行してテストする準備が整いました。

11. エミュレータでアプリを実行する

タイトルバーの実行ボタンを使用してアプリを実行します。また、実行タイプも選択できます。ご覧のとおり、iPhone 6 でエミュレータを使用してテストを行っています。

bbbe0b8820c8a913.png

実行ボタンを押すと、アプリがビルドされ、起動します。事前に指定したカスタム文字列を含め、アプリに位置情報へのアクセスを許可するリクエストが表示されます。

b9bb2ace7e68f186.png

これを行うと、緯度と経度の更新が表示されます。場所を変更するには、[デバッグ] メニューを選択して場所を選択します。たとえば、「高速道路ドライブ」を選択できます。

dcb1ce091d780f56.png

変更すると場所が更新され、高速道路の運転をシミュレートできます。

649e3eeb2321ae03.png

これで完了です。iOS で Google Places API を使用して、現在の場所の詳細にアクセスしました。