문서 / 설정 / 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
같은 프로바이더, 다른 플랫폼AndroidReact

시작하기 전에

Xcode 15 이상
HERE Platform의 계정
HERE SDK의 액세스 키 ID와 시크릿
디플로이 타깃 iOS 16.0 이상
STEP 01

인증 정보를 취득한다

  1. HERE Platform에 접속합니다.
  2. 프로젝트를 만들거나, 기존의 것을 고릅니다.
  3. HERE SDK용의 액세스 키를 만듭니다.
  4. 액세스 키 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 쪽에 네이티브 대응이 없기 때문에, 마스크 타일을 생성해 그리고 있습니다. 호출하는 쪽의 코드는 다른 프로바이더와 같습니다.