Configurar um projeto do Xcode

Depois de ativar o faturamento e criar uma chave de API, configure a 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:

  1. Abra seu Xcode project ou workspace e acesse File > Adicionar dependências de pacote.
  2. Digite https://github.com/googlemaps/ios-places-sdk como o URL e pressione Enter para extrair o pacote e clicar em "Adicionar pacote".
  3. 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".
  4. Na janela Choose Package Products, verifique se GooglePlaces será adicionado a sua meta de main designada. Quando terminar, clique em "Adicionar pacote".
  5. 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:

  1. Se você estiver fazendo upgrade de uma versão anterior à 9.0.0, será necessário remover das seguintes dependências: GoogleMapsBase, GoogleMapsCore e GoogleMapsM4B após o upgrade. Não remova a dependência de GoogleMaps: 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)
  2. No Xcode, vá para "File > Pacotes > Atualize para as versões mais recentes do pacote".
  3. 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:

  1. 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
  2. Remova Podfile, Podfile.resolved e Xcode workspace, se você não estiver usando para algo diferente do CocoaPods.

Para remover o SDK do Places para iOS instalado manualmente, faça o seguinte: siga estas etapas:
  1. 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
  2. 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:

  1. 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.
  2. Crie um arquivo chamado Podfile no seu diretório do projeto para definir as dependências.
  3. 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 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
    
    Execute pod outdated regularmente para detectar quando há uma versão mais recente. para garantir que esteja sempre com a versão mais recente.
  4. Salve o Podfile.
  5. Abra um terminal e acesse o diretório que contém o Podfile:

    cd <path-to-project>
  6. Execute o comando pod install. Isso instalará as APIs especificadas no Podfile e as respectivas dependências.

    pod install
  7. 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:

  1. Abra um terminal e acesse o diretório do projeto que contém o Podfile.
  2. Execute o comando pod update. Isso vai atualizar todas as APIs especificado em Podfile 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.

  1. Faça o download dos seguintes arquivos binários e de recursos do SDK:
  2. Extraia os arquivos para acessar o XCFramework e os recursos.
  3. 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.
  4. Remova todas as versões anteriores do Maps do projeto.
  5. 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
  6. Arraste GooglePlaces.bundle dos GooglePlacesResources que você transferiu por download
  7. 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.
  8. Selecione seu projeto no Project Navigator e escolha seu de destino do aplicativo.
  9. 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
  10. 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.

GooglePlacesSwift

Você pode instalar o SDK do GooglePlacesSwift (pré-lançamento) usando o Gerenciador de pacotes do Swift, CocoaPods e manualmente. A 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:

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.