Настроить проект Xcode

После включения выставления счетов и создания ключа API вы готовы настроить проект Xcode, который вы используете для разработки своего приложения.

Примечания к выпуску доступны для каждого выпуска.

Шаг 1. Установите необходимое программное обеспечение

Чтобы создать проект с помощью Places SDK для iOS, вам необходимо:

  • Xcode версии 15.0 или новее

Шаг 2. Создайте проект Xcode и установите Places SDK для iOS.

Менеджер пакетов Swift

Places SDK для iOS можно установить через Swift Package Manager . Чтобы добавить SDK, убедитесь, что вы удалили все существующие зависимости Places SDK для iOS.

Чтобы добавить SDK в новый или существующий проект, выполните следующие действия:

  1. Откройте project или workspace Xcode, затем выберите «Файл» > «Добавить зависимости пакета» .
  2. Введите https://github.com/googlemaps/ios-places-sdk в качестве URL-адреса, нажмите Enter , чтобы получить пакет, и нажмите «Добавить пакет».
  3. Чтобы установить конкретную version , установите в поле «Правило зависимости» один из вариантов, зависящих от версии. Для новых проектов рекомендуем указывать последнюю версию и использовать опцию «Точная версия». После завершения нажмите «Добавить пакет».
  4. В окне «Выбор пакетных продуктов» убедитесь, что GooglePlaces будет добавлен к назначенной вами main цели. После завершения нажмите «Добавить пакет».
  5. Чтобы проверить установку, перейдите на панель General » целевой системы. В разделе «Платформы», «Библиотеки» и «Встроенный контент» вы должны увидеть установленные пакеты. Вы также можете просмотреть раздел «Зависимости пакетов» в «Навигаторе проекта», чтобы проверить пакет и его версию.

Чтобы обновить package для существующего проекта, выполните следующие действия:

  1. Если вы выполняете обновление с версии более ранней, чем 9.0.0, после обновления необходимо удалить следующие зависимости: GoogleMapsBase , GoogleMapsCore и GoogleMapsM4B . Не удаляйте зависимость для GoogleMaps . Дополнительную информацию см. в примечаниях к выпуску версии 9.0.0 .

    В настройках конфигурации проекта Xcode найдите Frameworks, Libraries и Embedded Content . Используйте знак минус (-), чтобы удалить следующую структуру:

    • GoogleMapsBase (только для обновлений с версий ранее 9.0.0)
    • GoogleMapsCore (только для обновлений с версий ранее 9.0.0)
    • GoogleMapsM4B (только для обновлений с версий ранее 9.0.0)
  2. В Xcode перейдите в «Файл» > «Пакеты» > «Обновить до последних версий пакетов».
  3. Чтобы проверить установку, перейдите в раздел «Зависимости пакетов» в «Навигаторе проекта» , чтобы проверить пакет и его версию.

Чтобы удалить существующие зависимости Places SDK для iOS, добавленные с помощью CocoaPods , выполните следующие действия:

  1. Закройте рабочую область Xcode. Откройте терминал и выполните следующую команду:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. Удалите Podfile , Podfile.resolved и workspace Xcode, если вы не используете их ни для чего, кроме CocoaPods.

Чтобы удалить существующий Places SDK для iOS, установленный вручную, выполните следующие действия:
  1. В настройках конфигурации проекта Xcode найдите Frameworks, Libraries и Embedded Content . Используйте знак минус (-), чтобы удалить следующую структуру:
    • GooglePlaces.xcframework
  2. Из каталога верхнего уровня вашего проекта Xcode удалите пакет GooglePlaces .

Какао-стручки

Places SDK для iOS доступен в виде модуля CocoaPod GooglePlaces , который содержит все возможности мест.

CocoaPods — это менеджер зависимостей с открытым исходным кодом для проектов Swift и Objective-C Cocoa. Если у вас еще нет инструмента CocoaPods, установите его в macOS, выполнив следующую команду из терминала. Подробности см. в руководстве по началу работы с CocoaPods .

sudo gem install cocoapods

Создайте Podfile для Places SDK для iOS и используйте его для установки SDK и его зависимостей:

  1. Если у вас еще нет проекта Xcode, создайте его сейчас и сохраните на своем локальном компьютере. Если вы новичок в разработке iOS, создайте новый проект и выберите шаблон приложения iOS .
  2. Создайте файл с именем Podfile в каталоге вашего проекта. Этот файл определяет зависимости вашего проекта.
  3. Отредактируйте Podfile и добавьте свои зависимости вместе с их версиями . Вот пример, в котором указывается целевое имя вашего приложения и имя модуля 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
    
    Обязательно регулярно запускайте pod outdated чтобы обнаружить появление более новой версии и всегда использовать последнюю версию.
  4. Сохраните Podfile .
  5. Откройте терминал и перейдите в каталог, содержащий Podfile :

    cd <path-to-project>
  6. Запустите команду pod install . При этом будут установлены API, указанные в Podfile , вместе со всеми зависимостями, которые они могут иметь.

    pod install
  7. Закройте Xcode, а затем откройте (дважды щелкните) файл .xcworkspace вашего проекта, чтобы запустить Xcode. С этого момента вы должны использовать файл .xcworkspace для открытия проекта.

Чтобы обновить API для существующего проекта, выполните следующие действия:

  1. Откройте терминал и перейдите в каталог проекта, содержащий Podfile .
  2. Запустите команду pod update . Это обновит все API, указанные в Podfile до последней версии.

Ручная установка

В этом руководстве показано, как вручную добавить XCFramework, содержащий Places SDK для iOS, в ваш проект и настроить параметры сборки в Xcode. XCFramework — это двоичный пакет, который можно использовать на нескольких платформах, включая машины, использующие Apple Silicon .

  1. Загрузите следующие двоичные файлы SDK и файлы ресурсов:
  2. Извлеките файлы, чтобы получить доступ к XCFramework и ресурсам.
  3. Запустите Xcode и либо откройте существующий проект, либо создайте новый проект. Если вы новичок в разработке iOS, создайте новый проект и выберите шаблон приложения iOS .
  4. Удалите из проекта все пакеты Карт из предыдущих выпусков.
  5. Откройте вкладку «Общие» . Перетащите следующий XCFramework в свой проект в разделе «Платформы, библиотеки и встроенный контент» . Обязательно выберите «Не вставлять» :
    • GooglePlaces.xcframework
  6. Перетащите GooglePlaces.bundle из загруженных вами ресурсов GooglePlacesResources .
  7. Скопируйте файл GooglePlaces.bundle из загруженного вами GooglePlacesResources в каталог верхнего уровня вашего проекта Xcode. При появлении запроса обязательно выберите «Копировать элементы в папку целевой группы» .
  8. Выберите свой проект в Навигаторе проектов и выберите цель своего приложения.
  9. Откройте вкладку «Фазы сборки» . В Link Binary with Libraries добавьте следующие платформы и библиотеки:
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. Выберите свой проект, а не конкретную цель, и откройте вкладку «Настройки сборки» . В разделе «Связывание — Общие -> Другие флаги компоновщика» добавьте -ObjC в поля «Отладка» и «Выпуск». Если эти параметры не отображаются, измените фильтр на панели «Настройки сборки» с «Базовый» на «Все» .

GooglePlacesSwift

Вы можете установить SDK GooglePlacesSwift (Preview) с помощью диспетчера пакетов Swift, CocoaPods или вручную. Шаги по установке во всех процессах повторяют шаги, описанные для Places SDK для iOS, со следующими отличиями:

  • Требуется Xcode 15.3.
  • Для диспетчера пакетов Swift также замените экземпляры GooglePlaces на GooglePlacesSwift . Сюда входят операторы импорта.
  • Обновите номер версии до 0.1.0.
  • Замените экземпляры https://github.com/googlemaps/ios-places-sdk на https://github.com/googlemaps/ios-places-swift-sdk .
  • При установке вручную необходимо добавить GooglePlacesSwift XCFramework и файлы ресурсов в дополнение к GooglePlaces XCFramework и файлам ресурсов.

Например, при использовании CocoaPods отредактированный Podfile будет следующим:

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

platform :ios, '15.3'

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

Шаг 3. Проверьте файл манифеста конфиденциальности Apple.

Apple требует предоставить информацию о конфиденциальности для приложений в App Store. Посетите страницу сведений о конфиденциальности Apple App Store для получения обновлений и дополнительной информации.

Файл манифеста конфиденциальности Apple включен в пакет ресурсов для SDK. Чтобы убедиться, что файл манифеста конфиденциальности включен, и проверить его содержимое, создайте архив своего приложения и создайте отчет о конфиденциальности из архива.

Шаг 4. Добавьте ключ API в свое приложение.

В следующих примерах замените YOUR_API_KEY своим ключом API.

Быстрый

Добавьте свой ключ API в AppDelegate.swift следующим образом:

  • Добавьте следующий оператор импорта:
    import GooglePlaces
  • Добавьте в свой application(_:didFinishLaunchingWithOptions:) следующее, заменив YOUR_API_KEY своим ключом API:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Цель-C

Добавьте свой ключ API в свой AppDelegate.m следующим образом:

  • Добавьте следующий оператор импорта:
    @import GooglePlaces;
  • Добавьте в свое application:didFinishLaunchingWithOptions: заменив YOUR_API_KEY своим ключом API:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

GooglePlacesSwift

Добавьте свой ключ API в AppDelegate.swift следующим образом:

  • Добавьте следующий оператор импорта:
    import GooglePlacesSwift
  • Добавьте в свой application(_:didFinishLaunchingWithOptions:) следующее, заменив YOUR_API_KEY своим ключом API:
    PlacesClient.shared.provideAPIKey("YOUR_API_KEY")

Шаг 5. Начните писать код

Следующие примеры кода демонстрируют, как получить текущее место.

Быстрый

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

  

Цель-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()
    }
  }
  

Следующие шаги

После настройки проекта вы можете изучить примеры приложений .