Dopo aver abilitato la fatturazione e creato una chiave API, puoi configurare il progetto Xcode che utilizzi per sviluppare la tua app.
Le note di rilascio sono disponibili per ogni uscita.
Passaggio 1: installa il software richiesto
Per creare un progetto utilizzando l'SDK Places per iOS, hai bisogno di:
- Xcode 15.0 o versioni successive
Passaggio 2: crea il progetto Xcode e installa l'SDK Places per iOS
Gestione pacchetti Swift
L'SDK Places per iOS può essere installato tramite Swift Package Manager. Per aggiungere l'SDK, assicurati di aver rimosso tutte le dipendenze dell'SDK Places esistenti per iOS.
Per aggiungere l'SDK a un progetto nuovo o esistente:
-
Apri Xcode
project
oworkspace
, quindi vai a File > Aggiungi dipendenze pacchetto. - Inserisci https://github.com/googlemaps/ios-places-sdk come URL, premi Invio per estrarre il pacchetto e fai clic su "Aggiungi pacchetto".
-
Per installare un elemento
version
specifico, imposta il campo Regola di dipendenza su una delle opzioni basate sulle versioni. Per i nuovi progetti, ti consigliamo di specificare la versione più recente e di utilizzare l'opzione "Versione esatta". Al termine, fai clic su "Aggiungi pacchetto". -
Nella finestra Choose Package Products (Scegli prodotti in pacchetto), verifica che
GooglePlaces
verrà aggiunto alla destinazionemain
designata. Al termine, fai clic su "Aggiungi pacchetto". -
Per verificare l'installazione, vai al riquadro
General
della destinazione. In Framework, librerie e contenuti incorporati dovresti vedere i pacchetti installati. Puoi anche visualizzare la sezione "Dipendenze pacchetto" di "Navigatore progetti" per verificare il pacchetto e la sua versione.
Per aggiornare package
per un progetto esistente:
Se esegui l'upgrade da una versione precedente alla 9.0.0, devi rimuovere le seguenti dipendenze:
GoogleMapsBase
,GoogleMapsCore
eGoogleMapsM4B
dopo l'upgrade. Non rimuovere la dipendenza perGoogleMaps
. Per maggiori informazioni, consulta le note di rilascio della versione 9.0.0.Nelle impostazioni di configurazione del progetto Xcode, individua Frameworks, librerie 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)
- Da Xcode, vai a "File > Pacchetti > Aggiorna alle versioni più recenti dei pacchetti".
- Per verificare l'installazione, vai alla sezione Dipendenze pacchetto di Navigatore progetto per verificare il pacchetto e la relativa versione.
Per rimuovere le dipendenze dell'SDK Places esistenti per iOS aggiunte utilizzando CocoaPods
, segui questi passaggi:
- Chiudi l'area di lavoro Xcode. Apri terminale ed esegui questo comando:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Rimuovi
Podfile
,Podfile.resolved
e Xcodeworkspace
se non li utilizzi per scopi diversi da CocoaPods.
-
Nelle impostazioni di configurazione del progetto Xcode, individua Frameworks, librerie
e contenuti incorporati. Utilizza il segno meno(-) per rimuovere il seguente framework:
GooglePlaces.xcframework
-
Dalla directory di primo livello del progetto Xcode, rimuovi il bundle
GooglePlaces
.
CocoaPods
L'SDK Places per iOS è disponibile come pod CocoaPod, GooglePlaces, che contiene tutte le funzionalità di Places.
CocoaPods è un gestore delle dipendenze open source per i progetti Cocoa Swift e Objective-C. Se non hai ancora lo strumento CocoaPods, installalo su macOS eseguendo questo comando dal terminale. Per maggiori dettagli, consulta la guida introduttiva di CocoaPods.
sudo gem install cocoapods
Crea un Podfile
per l'SDK Places per iOS e utilizzalo per installare l'SDK e le sue dipendenze:
- Se non hai ancora un progetto Xcode, creane uno e salvalo nella tua macchina locale. Se non hai mai utilizzato lo sviluppo in iOS, crea un nuovo progetto e seleziona il modello di app per iOS.
- Crea un file denominato
Podfile
nella directory del progetto. Questo file definisce le dipendenze del progetto. - Modifica il
Podfile
e aggiungi le tue dipendenze insieme alle relative versions. Ecco un esempio che specifica il nome della destinazione dell'applicazione e il nome del podGooglePlaces
:source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.0' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GooglePlaces', '8.3.0' end
Assicurati di eseguire regolarmentepod outdated
per rilevare quando è disponibile una versione più recente e assicurarti di usare sempre quella più recente. - Salva
Podfile
. Apri un terminale e vai alla directory contenente
Podfile
:cd <path-to-project>
Esegui il comando
pod install
. Questa operazione installerà le API specificate inPodfile
, insieme alle eventuali dipendenze presenti.pod install
Chiudi Xcode, quindi apri (doppio clic) il file
.xcworkspace
del tuo progetto per avviare Xcode. Da questo momento in poi, dovrai utilizzare il file.xcworkspace
per aprire il progetto.
Per aggiornare l'API per un progetto esistente:
- Apri un terminale e vai alla directory del progetto contenente
Podfile
. - Esegui il comando
pod update
. Tutte le API specificate inPodfile
verranno aggiornate all'ultima versione.
Installazione manuale
Questa guida mostra come aggiungere manualmente al progetto l'XCFramework contenente l'SDK Places per iOS e come configurare le impostazioni di build in Xcode. Un XCFramework è un pacchetto binario che puoi utilizzare su più piattaforme, incluse le macchine che utilizzano Apple Silicon.
- Scarica i seguenti file binari e di risorse dell'SDK:
- Estrai i file per accedere a XCFramework e alle risorse.
- Avvia Xcode e apri un progetto esistente o creane uno nuovo. Se non hai mai utilizzato lo sviluppo in iOS, crea un nuovo progetto e seleziona il modello di app per iOS.
- Rimuovi dal tuo progetto eventuali bundle di Maps dalle release precedenti.
-
Apri la scheda Generali. Trascina i seguenti XCFramework nel progetto
in Framework, librerie e contenuti incorporati. Assicurati di selezionare Non incorporare:
GooglePlaces.xcframework
Trascina -
Copia
GooglePlaces.bundle
da GooglePlacesResources che hai scaricato nella directory di primo livello del tuo progetto Xcode. Assicurati di selezionare Copia elementi nella cartella del gruppo di destinazione quando richiesto. - Seleziona il progetto dal Navigatore progetti e scegli il target dell'applicazione.
-
Apri la scheda Fasi di creazione. In Collega file binario alle librerie, aggiungi i seguenti framework e librerie:
CoreGraphics.framework
CoreLocation.framework
libc++.tbd
libz.tbd
QuartzCore.framework
UIKit.framework
-
Scegli il tuo progetto anziché una destinazione specifica e apri la scheda Impostazioni build. Nella sezione Collegamento - Generale -> Altri flag linker, aggiungi
-ObjC
a "Debug" e "Release". Se queste impostazioni non sono visibili, modifica il filtro nella barra Impostazioni build da Di base a Tutti.
GooglePlaces.bundle
da GooglePlacesResources che hai scaricato
GooglePlacesSwift
Puoi installare l'SDK Google PlacesSwift (Anteprima) utilizzando Swift Package Manager, CocoaPods o manualmente. I passaggi per l'installazione in tutti i processi rispecchiano quelli descritti per l'SDK Places per iOS, con le seguenti differenze:
- Xcode 15.3 è obbligatorio.
- Per il gestore di pacchetti Swift, sostituisci anche le istanze
GooglePlaces
conGooglePlacesSwift
. Sono incluse le istruzioni di importazione. - Aggiorna il numero di versione a 0.1.0.
- Sostituisci le istanze di https://github.com/googlemaps/ios-places-sdk con https://github.com/googlemaps/ios-places-swift-sdk.
- Se esegui l'installazione manuale, devi aggiungere l'XCFramework e i file delle risorse di
GooglePlacesSwift
oltre all'XCFramework di Google Places e ai file delle risorse.
Ad esempio, se utilizzi CocoaPods, il valore Podfile
modificato sarebbe il seguente:
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 sulla privacy di Apple
Apple richiede i dettagli sulla privacy delle app disponibili per l'App Store. Visita la pagina dei dettagli sulla privacy dell'App Store di Apple per aggiornamenti e ulteriori informazioni.
Il file manifest sulla 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 esaminarne i contenuti, crea un archivio della tua app e genera un report 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 tua chiave API a AppDelegate.swift
come segue:
- Aggiungi la seguente istruzione di importazione:
import GooglePlaces
- Aggiungi quanto segue al tuo metodo
application(_:didFinishLaunchingWithOptions:)
, sostituendo YOUR_API_KEY con la tua chiave API:GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
Aggiungi la tua chiave API a AppDelegate.m
come segue:
- Aggiungi la seguente istruzione di importazione:
@import GooglePlaces;
- Aggiungi quanto segue al tuo metodo
application:didFinishLaunchingWithOptions:
, sostituendo YOUR_API_KEY con la tua chiave API:[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
GooglePlacesSwift
Aggiungi la tua chiave API a AppDelegate.swift
come segue:
- Aggiungi la seguente istruzione di importazione:
import GooglePlacesSwift
- Aggiungi quanto segue al tuo metodo
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 le app di esempio.