Konfigurowanie projektu Xcode

Gdy włączysz płatności i utworzysz klucz interfejsu API, możesz skonfigurować Projekt Xcode, którego używasz do programowania aplikacji.

Informacje o wersji są dostępne dla: wersji.

Krok 1. Zainstaluj wymagane oprogramowanie

Aby utworzyć projekt za pomocą pakietu SDK Miejsc na iOS, musisz mieć:

  • Xcode w wersji 15.0 lub nowszej,

Krok 2. Utwórz projekt Xcode i zainstaluj pakiet SDK Places na iOS

Menedżer pakietów Swift

Pakiet Places SDK dla iOS można zainstalować za pomocą Menedżer pakietów Swift. Aby dodać pakiet SDK, upewnij się, że masz usunęliśmy wszystkie zależności istniejącego pakietu Places SDK dla iOS.

Aby dodać pakiet SDK do nowego lub istniejącego projektu, wykonaj te czynności:

  1. Otwórz Xcode project lub workspace i przejdź do File > (Plik >). Dodaj zależności pakietów.
  2. Jako URL wpisz https://github.com/googlemaps/ios-places-sdk i naciśnij Enter. i pobierz pakiet, a potem kliknij „Dodaj pakiet”.
  3. Aby zainstalować określony element version, w polu Reguła zależności ustaw jedną z z użyciem opcji opartych na wersji. W przypadku nowych projektów zalecamy określenie najnowszej wersji i za pomocą opcji „Dokładna wersja” . Gdy skończysz, kliknij „Dodaj pakiet”.
  4. W oknie Wybierz produkty w pakiecie sprawdź, czy GooglePlaces zostanie dodany do wyznaczonej wartości docelowej main. Gdy skończysz, kliknij „Dodaj pakiet”.
  5. Aby sprawdzić instalację, przejdź do panelu General środowiska docelowego. W obszarze Frameworks, biblioteki i umieszczona treść powinny być widoczne zainstalowane pakiety. Możesz też wyświetlić „Zależności pakietów” w narzędziu „Project Navigator” aby zweryfikować pakiet i jego wersję.

Aby zaktualizować package w istniejącym projekcie, wykonaj te czynności:

  1. W przypadku uaktualnienia z wersji wcześniejszej niż 9.0.0 musisz usunąć te zależności: GoogleMapsBase, GoogleMapsCore oraz GoogleMapsM4B po uaktualnieniu. Nie usuwaj zależności dla GoogleMaps Więcej informacji: Informacje o wersji 9.0.0

    W ustawieniach konfiguracji projektu Xcode znajdź Frameworks, Libraries, i Umieszczone treści. Aby usunąć strukturę, użyj znaku minusa(-):

    • GoogleMapsBase (tylko w przypadku uaktualnień z wersji starszych niż 9.0.0)
    • GoogleMapsCore (tylko w przypadku uaktualnień z wersji starszych niż 9.0.0)
    • GoogleMapsM4B (tylko w przypadku uaktualnień z wersji starszych niż 9.0.0)
  2. W Xcode wybierz „File” (Plik > >) Pakiety > Zaktualizuj do najnowszych wersji pakietu”.
  3. Aby sprawdzić poprawność instalacji, przejdź do sekcji Zależności pakietów w narzędziu Project Navigator. aby zweryfikować pakiet i jego wersję.

Aby usunąć istniejące zależności Places SDK dla iOS dodane za pomocą CocoaPods, wykonaj te czynności:

  1. Zamknij obszar roboczy Xcode. Otwórz terminal i wykonaj to polecenie:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. Usuń Podfile, Podfile.resolved i Kod Xcode workspace, jeśli nie używasz ich do żadnych innych celów niż CocoaPods.

Aby usunąć ręcznie zainstalowany pakiet SDK Miejsc dla systemu iOS, wykonaj te czynności:
  1. W ustawieniach konfiguracji projektu Xcode znajdź Frameworks, Libraries, i Umieszczone treści. Aby usunąć strukturę, użyj znaku minusa(-):
    • GooglePlaces.xcframework
  2. W katalogu najwyższego poziomu projektu Xcode usuń GooglePlaces w pakiecie.

CocoaPods

Pakiet Places SDK na iOS jest dostępny jako CocoaPod pod, GooglePlaces, który zawiera wszystkie możliwości związane z miejscami.

CocoaPods to menedżer zależności open source dla rozwiązań Swift i Objective-C. Projekty Cocoa. Jeśli nie masz jeszcze narzędzia CocoaPods, zainstaluj je na: macOS, uruchamiając w terminalu to polecenie: Więcej informacji: przewodnika dla początkujących użytkowników CocoaPods.

sudo gem install cocoapods

Utwórz Podfile dla pakietu Places SDK na iOS i użyj go aby zainstalować pakiet SDK i jego zależności:

  1. Jeśli nie masz jeszcze projektu Xcode, utwórz go teraz i zapisz w na komputerze lokalnym. Jeśli jesteś osobą, która zajmuje się programowaniem na iOS, utwórz nowy projekt. i wybierz Szablon aplikacji na iOS.
  2. Utwórz w katalogu projektu plik o nazwie Podfile. Ten definiuje zależności projektu.
  3. Edytuj obiekt Podfile i dodaj zależności wraz z ich wersjami. Oto określający nazwę środowiska docelowego aplikacji oraz nazwę blok reklamowy 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
    
    Regularnie uruchamiaj aplikację pod outdated, aby wykryć, że jest dostępna nowsza wersja , by mieć pewność, że zawsze korzystasz z najnowszej wersji.
  4. Zapisz Podfile.
  5. Otwórz terminal i przejdź do katalogu zawierającego Podfile:

    cd <path-to-project>
  6. Uruchom polecenie pod install. Spowoduje to zainstalowanie Interfejsy API określone w Podfile wraz z zależnościami mogą mieć dostęp do treści.

    pod install
  7. Zamknij Xcode, a następnie otwórz projekt .xcworkspace, aby uruchomić Xcode. Od tej pory musisz otworzyć projekt za pomocą pliku .xcworkspace.

Aby zaktualizować interfejs API w istniejącym projekcie, wykonaj te czynności:

  1. Otwórz terminal i przejdź do katalogu projektu zawierającego Podfile.
  2. Uruchom polecenie pod update. Spowoduje to zaktualizowanie wszystkich interfejsów API określone w najnowszej wersji pliku Podfile.

Instalacja ręczna

W tym przewodniku pokazujemy, jak ręcznie dodać komponent XCFramework zawierający pakiet Places SDK dla iOS do projektu i skonfigurować ustawienia kompilacji w Xcode. XCFramework to pakiet binarny, którego można używać na wielu platformach, w tym na komputerach. przy użyciu silikonu Apple.

  1. Pobierz ten plik binarny i pliki zasobów pakietu SDK:
  2. Rozpakuj pliki, aby uzyskać dostęp do XCFramework i zasobów.
  3. Uruchom Xcode i otwórz istniejący projekt lub utwórz nowy w projektach AI. Jeśli zajmujesz się programowaniem na iOS, utwórz nowy projekt wybierz szablon aplikacji na iOS.
  4. Usuń z projektu wszystkie pakiety Map z poprzednich wersji.
  5. Otwórz kartę Ogólne. Przeciągnij poniższy element XCFramework do swojego projektu w sekcji Ramki, biblioteki i umieszczone treści. Upewnij się, aby wybrać Do Not Embed (Nie umieszczaj):
    • GooglePlaces.xcframework
  6. Przeciągnij GooglePlaces.bundle z pobranych GooglePlacesResources
  7. Skopiuj GooglePlaces.bundle z GooglePlacesResources pobrane do katalogu najwyższego poziomu projektu Xcode. Pamiętaj, aby wybrać Skopiuj elementy do folderu grupy docelowej, gdy pojawi się taka prośba.
  8. Wybierz projekt w narzędziu Project Navigator, a następnie jako cel aplikacji.
  9. Otwórz kartę Etapy kompilacji. W polu Połącz plik binarny z Biblioteki dodają następujące platformy i biblioteki:
    • CoreGraphics.framework
    • CoreLocation.framework
    • libc++.tbd
    • libz.tbd
    • QuartzCore.framework
    • UIKit.framework
  10. Wybierz projekt zamiast konkretnego miejsca docelowego i otwórz Na karcie Build Settings (Ustawienia kompilacji). W sekcji Łączenie – Ogólne -> Inny tag łączący Flagi, dodaj -ObjC do „Debugowanie”. i „Wycofaj”. Jeśli ustawienia nie są widoczne, zmień filtr na pasku Ustawienia kompilacji z Podstawowe na Wszystkie.

GooglePlacesSwift

Pakiet SDK GooglePlacesSwift (wersja testowa) możesz zainstalować ręcznie za pomocą menedżera pakietów Swift, CocoaPods. i które są takie same we wszystkich procesach, Pakiet SDK Miejsc na iOS z tymi różnicami:

Jeśli na przykład używasz CocoaPods, edytowany Podfile będzie wyglądać tak:

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

platform :ios, '15.3'

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

Krok 3. Sprawdź plik manifestu prywatności Apple

Apple wymaga podania informacji o ochronie prywatności w aplikacjach z App Store. Aktualizacje i inne informacje znajdziesz na stronie z informacjami o ochronie prywatności w Apple App Store.

Plik manifestu prywatności Apple jest zawarty w pakiecie zasobów SDK. Aby sprawdzić, czy plik manifestu prywatności został dołączony, i sprawdzić jego zawartość, utwórz archiwum aplikacji i wygeneruj raport o ochronie prywatności z archiwum.

Krok 4. Dodaj klucz interfejsu API do swojej aplikacji

W poniższych przykładach zastąp YOUR_API_KEY swoim kluczem interfejsu API.

Swift

Dodaj klucz interfejsu API do AppDelegate.swift w ten sposób:

  • Dodaj instrukcję importu:
    import GooglePlaces
  • Dodaj te elementy do: application(_:didFinishLaunchingWithOptions:) , zastępując YOUR_API_KEY Twoim kluczem interfejsu API:
    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

Objective-C

Dodaj klucz interfejsu API do AppDelegate.m w ten sposób:

  • Dodaj instrukcję importu:
    @import GooglePlaces;
  • Dodaj te elementy do: application:didFinishLaunchingWithOptions: , zastępując YOUR_API_KEY Twoim kluczem interfejsu API:
    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];

GooglePlacesSwift

Dodaj klucz interfejsu API do AppDelegate.swift w ten sposób:

  • Dodaj instrukcję importu:
    import GooglePlacesSwift
  • Dodaj te elementy do: application(_:didFinishLaunchingWithOptions:) , zastępując YOUR_API_KEY Twoim kluczem interfejsu API:
    PlacesClient.shared.provideAPIKey("YOUR_API_KEY")

Krok 5. Zacznij pisać kod

Poniższy przykładowy kod pokazuje, jak pobrać bieżące miejsce.

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

Dalsze kroki

Po skonfigurowaniu projektu możesz zobaczyć przykładowych aplikacji.