iOS용 Places Swift SDK로 이전

iOS용 Places SDK에서 iOS용 Places Swift SDK로의 마이그레이션은 간단하며 점진적으로 진행할 수 있습니다. iOS용 Places Swift SDK의 구조체는 Objective-C 기반의 구조체와 호환되지 않으므로 GMSPlacesClient의 API 사용을 기반으로 개별 기능 청크를 마이그레이션하는 것이 좋습니다.

프로젝트에 iOS용 Places Swift SDK 추가

iOS용 Places Swift SDK를 사용하려면 다음 단계를 따라야 합니다.

  1. Places API (신규)를 사용 설정합니다.
  2. 종속 항목에 Places Swift SDK 를 추가합니다. GooglePlaces, GooglePlacesSwift 또는 둘 다 설치하도록 선택할 수 있습니다.

  3. PlacesClient로 Places 클라이언트를 초기화합니다.

단계별 마이그레이션 예

예를 들어 iOS용 Places SDK를 사용하는 앱이 텍스트 입력을 기반으로 자동 완성 추천 용어를 수신한 다음 첫 번째 장소 추천 용어의 세부정보를 가져온다고 가정해 보겠습니다. iOS용 Places SDK를 사용하면 기존 코드가 다음과 같이 표시될 수 있습니다.

// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()

// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)

let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.origin = center
filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest)

let request = GMSAutocompleteRequest(query: "Sicilian piz")
request.filter = filter

client.fetchAutocompleteSuggestions(from: request) { (results, error) in
  guard let results, error == nil else {
    print("Autocomplete error: \(String(describing: error))")
    return
  }

  // Fetch Place Request.
  guard let placeID = results.first?.placeSuggestion?.placeID else { return }
  let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}

  let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)

  client.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
    guard let place, error == nil else { return }
    print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
  }
}

Places 클라이언트 이니셜라이저 업데이트

코드를 현대화하고 새 SDK의 기능을 활용하려면 GMSPlacesClient를 PlacesClient로 바꿔야 합니다. 또한 새 메서드에서 매개변수 이름이 변경되므로 매개변수를 with 대신 from으로 업데이트해야 합니다. 마지막으로 Places Swift SDK는 업그레이드된 AutocompleteRequest를 사용합니다.

업데이트된 코드

// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared

원본 코드

// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()

자동 완성 요청 업데이트

자동 완성 요청 흐름을 업데이트하는 것으로 시작할 수 있습니다. 이전 코드는 콜백을 사용하여 자동 완성 추천 용어를 요청하는 반면 새 코드는 switch/await 패턴을 사용합니다. 콜백을 사용하면 코드 구조와 오류 처리가 복잡해질 수 있습니다. 새 Places Swift SDK는 동시 실행을 지원하므로 비동기 작업을 간소화합니다.

// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared

// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)

let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
  switch results.first {
  case .place(let placeSuggestion):
    placeID = placeSuggestion.placeID
  case .none:
    fallthrough
  @unknown default:
    return
  }
case .failure(let placesError):
  print("Autocomplete error: \(placesError)")
  return
}

// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let placesClient = GMSPlacesClient.shared()

// Fetch Place Request.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}

let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)

placesClient.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
  guard let place, error == nil else { return }
  print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
}

지원 중단된 클래스, 메서드, typedef 바꾸기

iOS용 Places SDK의 다음 클래스, 메서드, typedef는 v10.4부터 지원 중단되었습니다. 2026년 3분기에 출시될 v11.0 버전에서는 더 이상 사용할 수 없습니다.

이 표에는 지원 중단된 메서드와 대체 메서드가 나와 있습니다.

지원 중단됨 대체
currentPlaceWithCallback 또는 findPlaceLikelihoodsFromCurrentLocationWithPlaceFields searchNearbyWithRequest
lookUpPlaceID 또는 fetchPlaceFromPlaceID fetchPlaceWithRequest
lookUpPhotosForPlaceID 또는 loadPlacePhoto fetchPhotoWithRequest
GMSAutocompletePrediction AutocompleteSuggestion
findAutocompletePredictionsFromQuery 또는 GMSAutocompleteFetcher fetchAutocompleteSuggestionsFromRequest
isOpenWithPlaceID 또는 isOpenWithPlace isOpenWithRequest
GMSAutocompleteResultsViewController, GMSAutocompleteTableDataSource, GMSAutocompleteViewController placeAutocomplete

메서드 및 클래스 이름 업데이트

마지막으로 fetchPlace 코드를 리팩터링하고 GMSPlacesClient 초기화와 GMSPlaceProperty 선언을 모두 삭제하여 마이그레이션을 완료합니다. Places Swift SDK에서 메서드 및 클래스 이름이 'GMS' 프리픽스를 삭제하도록 업데이트되었으므로 이에 따라 업데이트해야 합니다. 예: GMSFetchPlaceRequestFetchPlaceRequest가 됨.

유형 처리

fetchPlace 메서드는 개선된 유형 처리를 사용합니다. 이전 코드는 속성의 원시 값을 전달해야 했지만 새 코드는 개발자가 여기서 원시 값을 명시적으로 가져올 필요가 없으므로 간결성과 가독성이 향상됩니다.

동시 실행

또한 새 메서드는 동시 실행을 지원하므로 placesClient.fetchPlace의 콜백을 placesSwiftClient.fetchPlaceswitch/await 패턴으로 바꿀 수 있습니다.

// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared

// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)

let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
  switch results.first {
  case .place(let placeSuggestion):
    placeID = placeSuggestion.placeID
  case .none:
    fallthrough
  @unknown default:
    return
  }
case .failure(let placesError):
  print("Autocomplete error: \(placesError)")
  return
}

// Fetch Place Request.
let fetchPlaceRequest = FetchPlaceRequest(placeID: placeID, placeProperties: [.displayName, .websiteURL])
switch await placesSwiftClient.fetchPlace(with: fetchPlaceRequest) {
case .success(let place):
  print("Place found: \(place.displayName): \(String(describing: place.description))")

case .failure(let placesError):
  print("Place not found: \(placeID); \(placesError)")
}

최신 정보 받기

iOS용 Places Swift SDK의 출시 노트 페이지를 방문하여 새로운 기능과 변경사항을 알아보세요.