ドキュメント / セットアップ / 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.1.4"),
    .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 側にネイティブの対応がないため、マスクタイルを生成して描画しています。呼び出し側のコードは他プロバイダと同じです。