Po włączeniu płatności i utworzeniu klucza interfejsu API możesz skonfigurować projekt Xcode, którego używasz do programowania aplikacji.
W przypadku każdej wersji dostępne są informacje o 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 na iOS można zainstalować za pomocą menedżera pakietów Swift. Aby dodać pakiet SDK, usuń wszystkie zależności istniejącego pakietu SDK Miejsc dla iOS.
Aby dodać pakiet SDK do nowego lub istniejącego projektu, wykonaj te czynności:
-
Otwórz
project
lubworkspace
Xcode, a następnie wybierz File > Add Package Dependencies (Plik > Dodaj zależności pakietu). - Wpisz adres URL https://github.com/googlemaps/ios-places-sdk, naciśnij Enter, aby pobrać pakiet, i kliknij „Dodaj pakiet”.
-
Aby zainstalować określony element
version
, w polu Reguła zależności ustaw jedną z opcji zależnych od wersji. W przypadku nowych projektów zalecamy określenie najnowszej wersji i użycie opcji „Dokładna wersja”. Gdy skończysz, kliknij „Dodaj pakiet”. -
W oknie Wybierz produkty w pakiecie sprawdź, czy
GooglePlaces
zostanie dodany do wyznaczonegomain
celu. Gdy skończysz, kliknij „Dodaj pakiet”. -
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ć sekcję „Zależności pakietów” w „Nawigatorze projektu”, aby sprawdzić pakiet i jego wersję.
Aby zaktualizować package
w istniejącym projekcie, wykonaj te czynności:
Jeśli uaktualniasz aplikację z wersji wcześniejszej niż 9.0.0, po uaktualnieniu musisz usunąć te zależności:
GoogleMapsBase
,GoogleMapsCore
iGoogleMapsM4B
. Nie usuwaj zależności dla:GoogleMaps
. Więcej informacji znajdziesz w informacjach o wersji 9.0.0.W ustawieniach konfiguracji projektu Xcode znajdź Frameworks, biblioteki i Embedded Content. 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)
- W Xcode wybierz „File > Packages > Update to Latest Package Versions” (Plik > Pakiety> Aktualizuj do najnowszych wersji pakietu).
- Aby sprawdzić instalację, przejdź do sekcji Zależności pakietów w narzędziu Project Navigator i sprawdź pakiet i jego wersję.
Aby usunąć istniejące zależności Places SDK dla iOS dodane za pomocą CocoaPods
, wykonaj te czynności:
- Zamknij obszar roboczy Xcode. Otwórz terminal i wykonaj to polecenie:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Usuń
Podfile
,Podfile.resolved
i Xcodeworkspace
, jeśli nie używasz ich do niczego innego niż CocoaPods.
-
W ustawieniach konfiguracji projektu Xcode znajdź Frameworks, biblioteki i Embedded Content. Użyj znaku minusa(-), aby usunąć tę strukturę:
GooglePlaces.xcframework
-
Z katalogu najwyższego poziomu projektu Xcode usuń pakiet
GooglePlaces
.
CocoaPods
Pakiet Places SDK na iOS jest dostępny jako pod CocoaPod, GooglePlaces, który obejmuje wszystkie funkcje dotyczące miejsc.
CocoaPods to menedżer zależności open source na potrzeby projektów Swift i Objective-C Cocoa. Jeśli nie masz jeszcze narzędzia CocoaPods, zainstaluj je w systemie macOS, uruchamiając poniższe polecenie z terminala. Szczegółowe informacje znajdziesz w wprowadzeniu do CocoaPods.
sudo gem install cocoapods
Utwórz Podfile
dla pakietu Places SDK na iOS i użyj go do zainstalowania pakietu SDK wraz z zależnościami:
- Jeśli nie masz jeszcze projektu Xcode, utwórz go i zapisz na komputerze lokalnym. Jeśli dopiero zaczynasz programowanie na iOS, utwórz nowy projekt i wybierz szablon aplikacji na iOS.
- Utwórz w katalogu projektu plik o nazwie
Podfile
. Ten plik definiuje zależności projektu. - Edytuj obiekt
Podfile
i dodaj zależności wraz z ich wersjami. Oto przykład, który określa nazwę miejsca docelowego aplikacji i nazwę podaGooglePlaces
:source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.0' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GooglePlaces', '8.3.0' end
Pamiętaj, aby regularnie uruchamiać poleceniepod outdated
, aby wykryć dostępność nowszej wersji i mieć pewność, że zawsze masz najnowszą wersję. - Zapisz
Podfile
. Otwórz terminal i przejdź do katalogu zawierającego
Podfile
:cd <path-to-project>
Uruchom polecenie
pod install
. Spowoduje to zainstalowanie interfejsów API określonych w zadaniuPodfile
wraz z wszelkimi zależnościami.pod install
Zamknij Xcode, a następnie otwórz (kliknij dwukrotnie) plik
.xcworkspace
projektu, aby uruchomić Xcode. Od tej pory do otwierania projektu musisz używać pliku.xcworkspace
.
Aby zaktualizować interfejs API w istniejącym projekcie, wykonaj te czynności:
- Otwórz terminal i przejdź do katalogu projektu zawierającego
Podfile
. - Uruchom polecenie
pod update
. Spowoduje to zaktualizowanie wszystkich interfejsów API podanych wPodfile
do najnowszej wersji.
Instalacja ręczna
Z tego przewodnika dowiesz się, jak ręcznie dodać do projektu pakiet XCFramework zawierający pakiet Places SDK na iOS i skonfigurować ustawienia kompilacji w Xcode. XCFramework to pakiet binarny, którego możesz używać na wielu platformach, w tym na komputerach korzystających z Apple Silicon.
- Pobierz ten plik binarny i pliki zasobów pakietu SDK:
- Rozpakuj pliki, aby uzyskać dostęp do XCFramework i zasobów.
- Uruchom Xcode i otwórz istniejący projekt lub utwórz nowy. Jeśli dopiero zaczynasz programowanie na iOS, utwórz nowy projekt i wybierz szablon aplikacji na iOS.
- Usuń z projektu wszystkie pakiety Map z poprzednich wersji.
-
Otwórz kartę Ogólne. Przeciągnij poniższy element XCFramework do swojego projektu w sekcji Frameworks, Library, and Embedded Content. Pamiętaj, aby wybrać Do Not Embed (Nie umieszczaj):
GooglePlaces.xcframework
Przeciągnij -
Skopiuj
GooglePlaces.bundle
z GooglePlacesResources pobranego do katalogu najwyższego poziomu Twojego projektu Xcode. Gdy pojawi się odpowiedni komunikat, wybierz Kopiuj elementy do folderu grupy docelowej. - Wybierz projekt w narzędziu Project Navigator, a następnie wybierz miejsce docelowe aplikacji.
-
Otwórz kartę Etapy kompilacji. W sekcji Połącz plik binarny z bibliotekami dodaj te platformy i biblioteki:
CoreGraphics.framework
CoreLocation.framework
libc++.tbd
libz.tbd
QuartzCore.framework
UIKit.framework
-
Wybierz projekt zamiast konkretnego miejsca docelowego i otwórz kartę Ustawienia kompilacji. W sekcji Łączenie – ogólne -> Inne flagi łączące dodaj
-ObjC
do pól „Debugowanie” i „Wersja”. Jeśli te ustawienia nie są widoczne, zmień filtr na pasku Ustawienia kompilacji z Podstawowe na Wszystkie.
GooglePlaces.bundle
z pobranych GooglePlacesResources
GooglePlacesSwift
Pakiet SDK GooglePlacesSwift (wersja testowa) możesz zainstalować ręcznie za pomocą menedżera pakietów Swift, CocoaPods. Etapy instalacji we wszystkich procesach są takie same jak kroki dla pakietu Places SDK na iOS, z tymi różnicami:
- Wymagany jest format Xcode 15.3.
- Jeśli używasz menedżera pakietów Swift, musisz zastąpić instancje
GooglePlaces
elementemGooglePlacesSwift
. Obejmuje to instrukcje importu.- Zastąp wystąpienia https://github.com/googlemaps/ios-places-sdk adresem https://github.com/googlemaps/ios-places-swift-sdk.
- Zaktualizuj numer wersji do 0.1.0.
- Jeśli instalujesz pakiet ręcznie, pobierz te pliki binarne i pliki zasobów pakietu SDK:
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 tę instrukcję importu:
import GooglePlaces
- Dodaj do metody
application(_:didFinishLaunchingWithOptions:)
ten kod, zastępując YOUR_API_KEY swoim kluczem interfejsu API:GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
Dodaj klucz interfejsu API do AppDelegate.m
w ten sposób:
- Dodaj tę instrukcję importu:
@import GooglePlaces;
- Dodaj do metody
application:didFinishLaunchingWithOptions:
ten kod, zastępując YOUR_API_KEY swoim kluczem interfejsu API:[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
GooglePlacesSwift
Dodaj klucz interfejsu API do AppDelegate.swift
w ten sposób:
- Dodaj tę instrukcję importu:
import GooglePlacesSwift
- Dodaj do metody
application(_:didFinishLaunchingWithOptions:)
ten kod, zastępując YOUR_API_KEY swoim kluczem interfejsu API:PlacesClient.shared.provideAPIKey("YOUR_API_KEY")
Krok 5. Zacznij pisać kod
Poniższy przykładowy kod pokazuje, jak uzyskać 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 zapoznać się z przykładowymi aplikacjami.