Configurar um projeto do Xcode

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 versão.

Etapa 1: instalar o software necessário

Para criar um projeto usando o SDK do Places para iOS, você precisa de:

  • Xcode versão 14.0 ou mais recente
  • Cocoapods
  • Etapa 2: criar o projeto Xcode e instalar o SDK do Places para iOS

    Para instalar a API em um novo projeto, siga estas etapas:

    Usar CocoaPods

    O SDK do Places para iOS está disponível como um pod do CocoaPod, GooglePlaces, que contém todas as funcionalidades 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 macOS executando o comando a seguir no terminal. Para ver mais detalhes, consulte o Guia de primeiros passos do CocoaPods.

    sudo gem install cocoapods

    Crie um Podfile para o SDK do Places para iOS e use-o 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ê não tem experiência com 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 com as versions. Veja um exemplo que especifica o nome do destino do aplicativo e o nome do pod GooglePlaces:
      source 'https://github.com/CocoaPods/Specs.git'
      
      platform :ios, '14.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 e garantir que você esteja sempre atualizado.
    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 existente, 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 especificadas no Podfile para a versão mais recente.

    Instalar manualmente

    Este guia mostra como adicionar manualmente o XCFramework que contém o SDK do Places para iOS ao seu projeto e definir as configurações do build no Xcode. Um XCFramework é um pacote binário que pode ser usado em várias plataformas, incluindo máquinas que usam o Apple Silicon.

    1. Faça o download dos seguintes arquivos binários e de recursos do SDK:
    2. Descompacte os arquivos compactados para acessar o XCFramework e os recursos.
    3. Inicialize o Xcode e abra ou crie um projeto. Se você não tem 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. Arraste o seguinte XCFramework para o projeto em Frameworks, bibliotecas e conteúdo incorporado. Selecione Não incorporar:
      • GooglePlaces.xcframework
    6. Arraste GooglePlaces.bundle de GooglePlacesResources transferido por download para o diretório de nível superior do seu projeto Xcode. Quando solicitado, verifique se a opção Copiar itens na pasta do grupo de destino está selecionada.
    7. Selecione o projeto no Project Navigator e escolha o destino do aplicativo.
    8. Abra a guia Fases de compilação, em Vincular binário à bibliotecas e adicione os seguintes frameworks e bibliotecas:
      • CoreGraphics.framework
      • CoreLocation.framework
      • libc++.tbd
      • libz.tbd
      • QuartzCore.framework
      • UIKit.framework
    9. Escolha o projeto, em vez de um destino específico, e abra a guia Build Settings.

    10. Na seção Outras sinalizações do vinculador, adicione -ObjC. Se essas configurações não estiverem visíveis, mude o filtro na barra Build Settings de Basic para All.

    Etapa 3: 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 método 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 método application:didFinishLaunchingWithOptions:, substituindo YOUR_API_KEY pela chave de API:
      [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

    Etapa 4: começar a escrever código

    Os exemplos de código a seguir demonstram como acessar o lugar 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
          

    Próximas etapas

    Depois de configurar o projeto, confira os apps de exemplo. Você precisará do Cocoapods v1.6.1 instalado.