문서 / 설정 / iOS / Google Maps
Google Maps 설정
Google Maps SDK for iOS를 MapConductor에서 쓰는 절차입니다. 이미 Google Maps에 의존하고 있는 앱이나, GoogleMapDesign의 맵 타입이 필요한 경우에 고릅니다.
PACKAGE
ios-for-googlemaps
API KEY
필요
MIN iOS
16.0
VIEW
GoogleMapView
시작하기 전에
Xcode 15 이상
Google Cloud Console 계정
Maps SDK for iOS가 활성화된 Google Cloud 프로젝트
디플로이 타깃 iOS 16.0 이상
STEP 01
API 키를 취득한다
- Google Cloud Console에 접속합니다.
- 프로젝트를 만들거나, 기존의 것을 고릅니다.
- Maps SDK for iOS를 활성화합니다.
- 「인증 정보」에서 API 키를 만듭니다.
- 키를 앱의 번들 ID로 제한합니다.
STEP 02
Swift Package Manager로 추가한다
Xcode의 File > Add Package Dependencies에서 패키지 URL을 입력합니다. 네이티브 SDK는 의존 관계로서 자동으로 들어오므로, 별도로 추가할 필요는 없습니다.
Package URLSwift Package Manager
https://github.com/MapConductor/ios-for-googlemaps
Package.swiftSwift
dependencies: [
.package(url: "https://github.com/MapConductor/ios-sdk-core", from: "1.3.1"),
.package(url: "https://github.com/MapConductor/ios-for-googlemaps", from: "1.0.0"),
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "MapConductorCore", package: "ios-sdk-core"),
.product(name: "MapConductorForGoogleMaps", package: "ios-for-googlemaps"),
]
),
]STEP 03
SDK를 초기화한다
지도 뷰가 만들어지기 전에 GMSServices.provideAPIKey(_:)를 한 번만 호출합니다. @main의 App 구조체가 권장되는 장소입니다.
MyApp.swiftSwift
import SwiftUI
import GoogleMaps
import MapConductorForGoogleMaps
@main
struct MyApp: App {
init() {
GMSServices.provideAPIKey("YOUR_GOOGLE_MAPS_API_KEY")
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}ContentView.swiftSwift
// Alternative: call it from the view's sdkInitialize closure
GoogleMapView(state: mapState, sdkInitialize: {
GMSServices.provideAPIKey("YOUR_GOOGLE_MAPS_API_KEY")
})주의
API 키를 소스에 그대로 적어 넣지 마세요. xcconfig나 환경 변수에서 빌드 시에 주입하고, 저장소에는 넣지 않도록 합니다.
STEP 04
위치 정보의 권한을 더한다(필요한 경우)
Google Maps에서 위치 정보 서비스를 쓰는 경우는 Info.plist에 용도를 쓰고, 앱 쪽에서 허가를 요청합니다.
Info.plistXML
<key>NSLocationWhenInUseUsageDescription</key> <string>We need your location to display on the map</string>
LocationManager.swiftSwift
import CoreLocation
final class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
}
func requestPermission() {
manager.requestWhenInUseAuthorization()
}
}동작 확인
여기까지 보이면 완료
이 ContentView로 빌드해 실행하고, 지도가 나오고 줌과 팬이 들으면 완료입니다.
ContentView.swiftSwiftUI
import SwiftUI
import MapConductorCore
import MapConductorForGoogleMaps
struct ContentView: View {
@StateObject var mapState = GoogleMapViewState(
cameraPosition: MapCameraPosition(
position: GeoPoint(latitude: 35.6762, longitude: 139.6503),
zoom: 12.0
)
)
var body: some View {
GoogleMapView(state: mapState)
.ignoresSafeArea()
}
}지도 디자인
GoogleMapDesign은 Google의 맵 타입에 대응합니다.
GoogleMapDesign
Notes
Normal
통상의 도로 지도
Satellite
위성 화상
Hybrid
위성 화상+도로와 라벨
Terrain
지형도
잘 안 될 때
지도가 나오지 않는다(회색 화면)
- 지도 뷰가 만들어지기 전에 GMSServices.provideAPIKey(_:)가 호출되고 있는지 확인합니다.
- Console에서 Maps SDK for iOS가 활성화되어 있는지 확인합니다.
- 키의 번들 ID 제한이 실제의 번들 ID와 일치하는지 확인합니다.
- 디플로이 타깃이 iOS 16.0 이상인지 확인합니다.
빌드가 통과하지 않는다
- 빌드 폴더를 지웁니다(Cmd+Shift+K).
- ~/Library/Developer/Xcode/DerivedData를 삭제하고 다시 빌드합니다.
- Swift Package Manager의 의존을 갱신합니다. CocoaPods와의 병용은 피해 주세요.
다음
GoogleMapView가 나오면, Marker・Polyline・Circle은 공통 API로 쓸 수 있습니다. 프로바이더를 바꿔도 거기는 다시 쓰지 않아도 됩니다.