Depois de ativar o faturamento e criar uma chave de API, você poderá configurar o projeto Xcode usado para desenvolver seu app.
As notas da versão estão disponíveis para cada lançamento.
Etapa 1: instalar o software necessário
Para criar um projeto usando o SDK do Places para iOS, você vai precisar do seguinte:
- Xcode versão 15.0 ou mais recente
Etapa 2: criar o projeto do Xcode e instalar o SDK do Places para iOS
Gerenciador de pacotes do Swift
O SDK do Places para iOS pode ser instalado via Gerenciador de pacotes do Swift (em inglês). Para adicionar o SDK, verifique se você tem removeu todas as dependências atuais do SDK do Places para iOS.
Para adicionar o SDK a um projeto novo ou existente, siga estas etapas:
-
Abra seu Xcode
project
ouworkspace
e acesse File > Adicionar dependências de pacote. - Digite https://github.com/googlemaps/ios-places-sdk como o URL e pressione Enter para extrair o pacote e clicar em "Adicionar pacote".
-
Para instalar um
version
específico, defina o campo Regra de dependência como um dos as opções baseadas em versão. Para novos projetos, recomendamos especificar a versão mais recente e usando a "versão exata" é a melhor opção. Quando terminar, clique em "Adicionar pacote". -
Na janela Choose Package Products, verifique se
GooglePlaces
será adicionado a sua meta demain
designada. Quando terminar, clique em "Adicionar pacote". -
Para verificar sua instalação, navegue até o painel
General
do destino. Em Frameworks, bibliotecas e conteúdo incorporado, você verá os pacotes instalados. Também é possível consultar a página "Package Dependencies" do "Navegador do projeto" para verificar o pacote e sua versão.
Para atualizar o package
de um projeto existente, siga estas etapas:
Se você estiver fazendo upgrade de uma versão anterior à 9.0.0, será necessário remover das seguintes dependências:
GoogleMapsBase
,GoogleMapsCore
eGoogleMapsM4B
após o upgrade. Não remova a dependência deGoogleMaps
: Para mais informações, consulte a Notas de lançamento da versão 9.0.0.Nas configurações do seu projeto do Xcode, localize Frameworks, bibliotecas, e conteúdo incorporado. Use o sinal de menos(-) para remover o seguinte framework:
GoogleMapsBase
(apenas para upgrades de versões anteriores à 9.0.0)GoogleMapsCore
(apenas para upgrades de versões anteriores à 9.0.0)GoogleMapsM4B
(apenas para upgrades de versões anteriores à 9.0.0)
- No Xcode, acesse "File > Pacotes > Atualize para as versões mais recentes do pacote".
- Para verificar a instalação, vá para a seção Package Dependencies do Project Navigator para verificar o pacote e sua versão.
Para remover as dependências atuais do SDK do Places para iOS adicionadas usando o
CocoaPods
, siga estas etapas:
- Feche seu espaço de trabalho do Xcode. Abra o terminal e execute o seguinte comando:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Remova
Podfile
,Podfile.resolved
e Xcodeworkspace
, se você não estiver usando para algo diferente do CocoaPods.
-
Nas configurações do seu projeto do Xcode, localize Frameworks, bibliotecas,
e conteúdo incorporado. Use o sinal de menos(-) para remover o seguinte framework:
GooglePlaces.xcframework
-
No diretório de nível superior do seu projeto Xcode, remova o
GooglePlaces
feixe.
CocoaPods
O SDK do Places para iOS está disponível como um CocoaPod. pod, GooglePlaces, que contém todos os recursos de lugares.
O CocoaPods é um gerenciador de dependências de código aberto para projetos Cocoa em Swift e Objective-C. Se você ainda não tem a ferramenta CocoaPods, instale-a no Para macOS, execute o comando a seguir no terminal. Para mais detalhes, consulte Guia de iniciação do CocoaPods.
sudo gem install cocoapods
Crie um Podfile
para o SDK do Places para iOS e use
para instalar o SDK e as dependências dele:
- Se você ainda não tiver um projeto Xcode, crie um agora e salve-o no computador local. Se você tem pouca experiência no desenvolvimento para iOS, crie um novo projeto e selecione o modelo de app iOS.
- Crie um arquivo chamado
Podfile
no seu diretório do projeto para definir as dependências. - Edite o
Podfile
e adicione as dependências junto com as versões delas. Veja um que especifica o nome de destino do aplicativo, e o nome do o 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
Executepod outdated
regularmente para detectar quando há uma versão mais recente. para garantir que esteja sempre com a versão mais recente. - Salve o
Podfile
. Abra um terminal e acesse o diretório que contém o
Podfile
:cd <path-to-project>
Execute o comando
pod install
. Isso instalará as APIs especificadas noPodfile
e as respectivas dependências.pod install
Feche o Xcode e clique duas vezes no arquivo
.xcworkspace
do projeto para iniciar o programa. Depois disso, é preciso usar o arquivo.xcworkspace
para abrir o projeto.
Para atualizar a API de um projeto atual, siga estas etapas:
- Abra um terminal e acesse o diretório do projeto que contém o
Podfile
. - Execute o comando
pod update
. Isso vai atualizar todas as APIs especificado emPodfile
para a versão mais recente.
Instalação manual
Este guia mostra como adicionar manualmente o XCFramework que contém o SDK do Places para iOS ao seu projeto e defina suas configurações de compilação no Xcode. Um XCFramework é um pacote binário que pode ser usado em várias plataformas, incluindo máquinas usando o Apple Silicon.
- Faça o download dos seguintes arquivos binários e de recursos do SDK:
- Extraia os arquivos para acessar o XCFramework e os recursos.
- Inicialize o Xcode e abra ou crie um projeto. Se você tem pouca experiência com desenvolvimento para iOS, crie um novo projeto e Selecione o modelo de app iOS.
- Remova todas as versões anteriores do Maps do projeto.
-
Abra a guia Geral. Arraste o seguinte XCFramework para o projeto
em Estruturas, Bibliotecas e Conteúdo Incorporado. Confirme se
para selecionar Não incorporar:
GooglePlaces.xcframework
Arraste -
Copie o
GooglePlaces.bundle
do GooglePlacesResources. do qual você fez o download para o diretório de nível superior do seu projeto Xcode. Selecione Copie os itens para a pasta do grupo de destino quando solicitado. - Selecione seu projeto no Project Navigator e escolha seu de destino do aplicativo.
-
Abra a guia Fases de compilação. Em Vincular binário com
Bibliotecas, adicione os seguintes frameworks e bibliotecas:
CoreGraphics.framework
CoreLocation.framework
libc++.tbd
libz.tbd
QuartzCore.framework
UIKit.framework
-
Escolha seu projeto, em vez de um destino específico, e abra o Guia Configurações da versão. Na janela Vinculação - Geral -> Outro vinculador Seção "Flags", adicione
-ObjC
a "Debug". e em "Liberar". Se essas configurações não estiverem visíveis, altere o filtro na barra Configurações da versão de Básico para Todos.
GooglePlaces.bundle
dos GooglePlacesResources que você transferiu por download
GooglePlacesSwift
Você pode instalar o SDK do GooglePlacesSwift (pré-lançamento) usando o Gerenciador de pacotes do Swift, CocoaPods e manualmente. O as etapas de instalação em todos os processos refletem as etapas descritas para o SDK do Places para iOS, com as seguintes diferenças:
- O Xcode 15.3 é obrigatório.
- Se você estiver usando o Gerenciador de pacotes do Swift, substitua as instâncias do
GooglePlaces
comGooglePlacesSwift
. Isso inclui instruções de importação.- Substitua as instâncias de https://github.com/googlemaps/ios-places-sdk por https://github.com/googlemaps/ios-places-swift-sdk.
- Atualize o número da versão para 0.1.0.
- Se estiver instalando manualmente, faça o download dos seguintes binários e arquivos de recursos do SDK:
Por exemplo, se você estiver usando CocoaPods, o Podfile
editado ficaria assim:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.3' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GooglePlacesSwift', '0.1.0' end
Etapa 3: inspecionar o arquivo do Manifesto de privacidade da Apple
A Apple exige detalhes de privacidade de apps na App Store. Acesse a página de detalhes de privacidade da App Store da Apple para atualizações e mais informações.
O arquivo do Manifesto de privacidade da Apple está incluído no pacote de recursos do SDK. Para verificar se o arquivo do manifesto de privacidade foi incluído e inspecionar o conteúdo dele, crie um arquivo do seu app e gere um relatório de privacidade.
Etapa 4: adicionar a chave de API ao app
Nos exemplos a seguir, substitua YOUR_API_KEY
pela chave de API.
Swift
Inclua sua chave de API ao AppDelegate.swift
da seguinte maneira:
- Adicione a seguinte instrução de importação:
import GooglePlaces
- Adicione o seguinte ao seu
application(_:didFinishLaunchingWithOptions:)
substituindo YOUR_API_KEY pela chave de API:GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
Inclua sua chave de API ao AppDelegate.m
da seguinte maneira:
- Adicione a seguinte instrução de importação:
@import GooglePlaces;
- Adicione o seguinte ao seu
application:didFinishLaunchingWithOptions:
substituindo YOUR_API_KEY pela chave de API:[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
GooglePlacesSwift
Inclua sua chave de API ao AppDelegate.swift
da seguinte maneira:
- Adicione a seguinte instrução de importação:
import GooglePlacesSwift
- Adicione o seguinte ao seu
application(_:didFinishLaunchingWithOptions:)
substituindo YOUR_API_KEY pela chave de API:PlacesClient.shared.provideAPIKey("YOUR_API_KEY")
Etapa 5: começar a escrever o código
Os exemplos de código a seguir demonstram como encontrar o local atual.
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() } }
Próximas etapas
Depois de configurar o projeto, explore o aplicativos de exemplo.