Configurare un progetto Xcode

Dopo aver abilitato la fatturazione e creato una chiave API, puoi configurare progetto Xcode che utilizzi per sviluppare la tua app.

Le note di rilascio sono disponibili per ogni .

Passaggio 1: installa il software richiesto

Per creare un progetto utilizzando Places SDK per iOS, devi avere:

  • Xcode 15.0 o versioni successive

Passaggio 2: crea il progetto Xcode e installa l'SDK Places per iOS

Gestore pacchetti Swift

L'SDK Places per iOS può essere installato tramite Gestore pacchetti Swift. Per aggiungere l'SDK, assicurati di avere rimosso eventuali dipendenze di Places SDK for iOS esistenti.

Per aggiungere l'SDK a un progetto nuovo o esistente:

  1. Apri il file Xcode project o workspace, quindi seleziona File > Aggiungi dipendenze pacchetto.
  2. Inserisci https://github.com/googlemaps/ios-places-sdk come URL e premi Invio per estrarre il pacchetto e fai clic su "Aggiungi pacchetto".
  3. Per installare un'entità version specifica, imposta il campo Regola di dipendenza su uno dei le opzioni basate sulla versione. Per i nuovi progetti, ti consigliamo di specificare la versione più recente con la "versione esatta" . Al termine, fai clic su "Aggiungi pacchetto".
  4. Nella finestra Scegli i prodotti del pacchetto, verifica che verrà aggiunto GooglePlaces il target main designato. Al termine, fai clic su "Aggiungi pacchetto".
  5. Per verificare l'installazione, vai al riquadro General di destinazione. In Framework, librerie e contenuti incorporati dovresti vedere i pacchetti installati. Puoi anche visualizzare le "Dipendenze pacchetto" sezione di "Project Navigator" per verificare il pacchetto e la sua versione.

Per aggiornare package per un progetto esistente:

  1. Se esegui l'upgrade da una versione precedente alla 9.0.0, devi rimuovere le dipendenze seguenti: GoogleMapsBase, GoogleMapsCore e GoogleMapsM4B dopo l'upgrade. Non rimuovere la dipendenza per GoogleMaps. Per ulteriori informazioni, consulta Note di rilascio della versione 9.0.0.

    Dalle impostazioni di configurazione del progetto Xcode, individua Framework, Libraries, e Contenuti incorporati. Utilizza il segno meno(-) per rimuovere il seguente framework:

    • GoogleMapsBase (solo per gli upgrade da versioni precedenti alla 9.0.0)
    • GoogleMapsCore (solo per gli upgrade da versioni precedenti alla 9.0.0)
    • GoogleMapsM4B (solo per gli upgrade da versioni precedenti alla 9.0.0)
  2. Da Xcode, vai su "File > Pacchetti > Aggiorna alle ultime versioni del pacchetto".
  3. Per verificare l'installazione, vai alla sezione Dipendenze pacchetto di Project Navigator per verificare il pacchetto e la sua versione.

Per rimuovere le dipendenze di Places SDK per iOS esistenti aggiunte utilizzando CocoaPods, segui questi passaggi:

  1. Chiudi l'area di lavoro Xcode. Apri il terminale ed esegui questo comando:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. Rimuovi Podfile, Podfile.resolved e Esegui l'Xcode workspace se non lo utilizzi per scopi diversi da CocoaPods.

Per rimuovere l'SDK Places per iOS esistente installato manualmente, segui questi passaggi:
  1. Dalle impostazioni di configurazione del progetto Xcode, individua Framework, Libraries, e Contenuti incorporati. Utilizza il segno meno(-) per rimuovere il seguente framework:
      .
    • GooglePlaces.xcframework
  2. Dalla directory di primo livello del tuo progetto Xcode, rimuovi GooglePlaces gruppo.

CocoaPods

L'SDK Places per iOS è disponibile come CocoaPod GooglePlaces, che contiene tutte le funzionalità di Places.

CocoaPods è un gestore delle dipendenze open source per Swift e Objective-C progetti di cacao. Se non hai ancora lo strumento CocoaPods, installalo su macOS eseguendo questo comando dal terminale. Per maggiori dettagli, vedi consulta la guida introduttiva di CocoaPods.

sudo gem install cocoapods

Crea un'Podfile per l'SDK Places per iOS e utilizzala per installare l'SDK e le sue dipendenze:

  1. Se non hai ancora un progetto Xcode, creane uno ora e salvalo della macchina locale. Se non hai familiarità con lo sviluppo iOS, crea un nuovo progetto e seleziona Modello di app per iOS.
  2. Crea un file denominato Podfile nella directory del tuo progetto. Questo definisce le dipendenze del progetto.
  3. Modifica Podfile e aggiungi le dipendenze insieme alle relative versioni. Ecco un esempio che specifica il nome della destinazione dell'applicazione e il nome il pod GooglePlaces:
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '15.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GooglePlaces', '8.3.0'
    end
    
    Esegui regolarmente pod outdated per rilevare se sono disponibili per assicurarti di utilizzare sempre la versione più recente.
  4. Salva Podfile.
  5. Apri un terminale e vai alla directory contenente Podfile:

    cd <path-to-project>
  6. Esegui il comando pod install. Questa operazione installerà API specificate in Podfile, insieme a eventuali dipendenze che possono avere.

    pod install
  7. Chiudi Xcode, quindi apri (doppio clic) la sezione .xcworkspace per avviare Xcode. Da questo momento in poi, devi usare il file .xcworkspace per aprire il progetto.

Per aggiornare l'API per un progetto esistente:

  1. Apri un terminale e vai alla directory del progetto contenente l'Podfile.
  2. Esegui il comando pod update. Questo aggiornerà tutte le API specificato in Podfile alla versione più recente.

Installazione manuale

Questa guida spiega come aggiungere manualmente XCFramework contenente l'SDK Places per iOS al tuo progetto e configurare le impostazioni della build in Xcode. Un XCFramework è un pacchetto binario utilizzabile su più piattaforme, incluse le macchine utilizzando Apple Silicon.

  1. Scarica i seguenti file binari e di risorse dell'SDK:
  2. Estrai i file per accedere a XCFramework e alle risorse.
  3. Avvia Xcode e apri un progetto esistente o creane uno nuovo progetto. Se non hai familiarità con lo sviluppo iOS, crea un nuovo progetto e Seleziona il modello di app per iOS.
  4. Rimuovi dal progetto eventuali pacchetti di Maps dalle release precedenti.
  5. Apri la scheda Generali. Trascina il seguente XCFramework nel tuo progetto in Framework, librerie e contenuti incorporati. Assicurati che per selezionare Non incorporare:
      .
    • GooglePlaces.xcframework
  6. Trascina GooglePlaces.bundle da GooglePlacesResources scaricato
  7. Copia il valore GooglePlaces.bundle da GooglePlacesResources che hai scaricato nella directory di primo livello del tuo progetto Xcode. Assicurati di selezionare Copia gli elementi nella cartella del gruppo di destinazione quando richiesto.
  8. Seleziona il tuo progetto dal navigatore dei progetti e scegli target dell'applicazione.
  9. Apri la scheda Fasi di creazione. All'interno di Collega binario con Librerie, aggiungi i framework e le librerie seguenti:
      .
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. Scegli il tuo progetto, anziché una destinazione specifica, e apri Scheda Impostazioni build. Nella finestra Collegamento - Generale -> Altro linker Flag, aggiungi -ObjC a "Debug" e "Release". Se questi Se le impostazioni non sono visibili, cambia il filtro nella barra Impostazioni build. da Base a Tutte.

GooglePlacesSwift

Puoi installare l'SDK GooglePlacesSwift (anteprima) utilizzando il gestore pacchetti di Swift, CocoaPods e manualmente. La per l'installazione in tutti i processi rispecchiano i passaggi descritti per SDK Places per iOS, con le seguenti differenze:

Ad esempio, se utilizzi CocoaPods, il valore Podfile modificato avrà il seguente aspetto:

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

platform :ios, '15.3'

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

Passaggio 3: esamina il file manifest della privacy di Apple

Apple richiede informazioni sulla privacy per le app disponibili sull'App Store. Visita la pagina dei dettagli sulla privacy dell'App Store di Apple per aggiornamenti e ulteriori informazioni.

Il file manifest della privacy di Apple è incluso nel bundle di risorse per l'SDK. Per verificare che il file manifest per la privacy sia stato incluso e per controllarne i contenuti, crea un archivio della tua app e genera una segnalazione sulla privacy dall'archivio.

Passaggio 4: aggiungi la chiave API all'app

Negli esempi seguenti, sostituisci YOUR_API_KEY con la tua chiave API.

Swift

Aggiungi la chiave API a AppDelegate.swift nel seguente modo:

  • Aggiungi la seguente istruzione di importazione:
    import GooglePlaces
  • Aggiungi quanto segue al tuo application(_:didFinishLaunchingWithOptions:) sostituendo YOUR_API_KEY con la tua chiave API:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

Aggiungi la chiave API a AppDelegate.m nel seguente modo:

  • Aggiungi la seguente istruzione di importazione:
    @import GooglePlaces;
  • Aggiungi quanto segue al tuo application:didFinishLaunchingWithOptions: sostituendo YOUR_API_KEY con la tua chiave API:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

GooglePlacesSwift

Aggiungi la chiave API a AppDelegate.swift nel seguente modo:

  • Aggiungi la seguente istruzione di importazione:
    import GooglePlacesSwift
  • Aggiungi quanto segue al tuo application(_:didFinishLaunchingWithOptions:) sostituendo YOUR_API_KEY con la tua chiave API:
    PlacesClient.shared.provideAPIKey("YOUR_API_KEY")

Passaggio 5: inizia a scrivere il codice

I seguenti esempi di codice mostrano come ottenere il luogo attuale.

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()
    }
  }
  

Passaggi successivi

Dopo aver configurato il progetto, puoi esplorare app di esempio.