문서 / 설정 / iOS / HERE
HERE 설정
HERE SDK를 MapConductor에서 쓰는 절차입니다. Access Key ID와 Secret의 2가지로 초기화합니다.
PACKAGE
ios-for-here
API KEY
Key ID + Secret
MIN iOS
16.0
VIEW
HereMapView
시작하기 전에
Xcode 15 이상
HERE Platform의 계정
HERE SDK의 액세스 키 ID와 시크릿
디플로이 타깃 iOS 16.0 이상
STEP 01
인증 정보를 취득한다
- HERE Platform에 접속합니다.
- 프로젝트를 만들거나, 기존의 것을 고릅니다.
- HERE SDK용의 액세스 키를 만듭니다.
- 액세스 키 ID와 시크릿을 복사합니다.
STEP 02
Swift Package Manager로 추가한다
Xcode의 File > Add Package Dependencies에서 패키지 URL을 입력합니다. 네이티브 SDK는 의존 관계로서 자동으로 들어오므로, 별도로 추가할 필요는 없습니다.
Package URLSwift Package Manager
https://github.com/MapConductor/ios-for-here
Package.swiftSwift
dependencies: [
.package(url: "https://github.com/MapConductor/ios-sdk-core", from: "1.3.1"),
.package(url: "https://github.com/MapConductor/ios-for-here", from: "1.0.0"),
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "MapConductorCore", package: "ios-sdk-core"),
.product(name: "MapConductorForHERE", package: "ios-for-here"),
]
),
]STEP 03
SDK를 초기화한다
지도 뷰가 만들어지기 전에 initializeHERE(accessKeyId:accessKeySecret:)를 한 번만 호출합니다. 이 함수는 throw 하므로, 실패를 뭉개지 마세요.
MyApp.swiftSwift
import SwiftUI
import MapConductorForHERE
@main
struct MyApp: App {
init() {
do {
try initializeHERE(
accessKeyId: "YOUR_HERE_ACCESS_KEY_ID",
accessKeySecret: "YOUR_HERE_ACCESS_KEY_SECRET"
)
} catch {
assertionFailure("Failed to initialize HERE SDK: \(error)")
}
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}ContentView.swiftSwift
// Alternative: call it from the view's sdkInitialize closure
HereMapView(state: mapState, sdkInitialize: {
try? initializeHERE(
accessKeyId: "YOUR_HERE_ACCESS_KEY_ID",
accessKeySecret: "YOUR_HERE_ACCESS_KEY_SECRET"
)
})STEP 04
위치 정보의 권한을 더한다(필요한 경우)
HERE SDK에서 위치 정보 서비스를 쓰는 경우는 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()
}
}동작 확인
여기까지 보이면 완료
HERE의 지도가 나오고 줌과 팬이 들으면 완료입니다.
ContentView.swiftSwiftUI
import SwiftUI
import MapConductorCore
import MapConductorForHERE
struct ContentView: View {
@StateObject var mapState = HereMapViewState(
mapDesignType: HereMapDesign.NormalDay,
cameraPosition: MapCameraPosition(
position: GeoPoint(latitude: 35.6812, longitude: 139.7671),
zoom: 12.0
)
)
var body: some View {
HereMapView(state: mapState)
.ignoresSafeArea()
}
}지도 디자인
HereMapDesign은 HERE의 맵 스킴에 대응합니다.
HereMapDesign
Notes
NormalDay / NormalNight
표준 스타일의 낮・밤
Satellite
위성 화상
HybridDay
위성 화상+도로와 라벨
LiteDay
경량인 주간 스타일
LogisticsDay
물류용
RoadNetworkDay
도로 네트워크 중시
잘 안 될 때
지도가 새하얀 채로
- 액세스 키 ID와 시크릿이 올바른지 확인합니다.
- 지도 뷰보다 먼저 initializeHERE가 호출되고 있는지 확인합니다.
- 초기화의 throw를 잡아, 오류 내용을 로그에 냅니다.
빌드가 통과하지 않는다
- 빌드 폴더를 지웁니다(Cmd+Shift+K).
- ~/Library/Developer/Xcode/DerivedData를 삭제하고 다시 빌드합니다.
- Swift Package Manager의 의존을 갱신합니다. CocoaPods와의 병용은 피해 주세요.
다음
마커・폴리라인・폴리곤・원・그라운드 이미지・래스터 레이어・InfoBubble은 모두 공통 API로 쓸 수 있습니다. 폴리곤의 구멍은 HERE 쪽에 네이티브 대응이 없기 때문에, 마스크 타일을 생성해 그리고 있습니다. 호출하는 쪽의 코드는 다른 프로바이더와 같습니다.