ガイド変更履歴HERE SDK API references
ガイド

以前のバージョンから更新する

HERE SDKを最新の状態に保つことで、最新の機能、改善点、マップデータを利用できます。

HERE SDKフレームワークを置き換えることで、HERE SDKを新しいバージョンに更新できます。

  1. 最新のHERE SDKリリースを入手します。詳細については、「利用開始」を参照してください。
  2. アプリのルートフォルダーにheresdk.xcframeworkフォルダーをコピーします。
  3. Xcode で [アプリ] ターゲットの [全般] 設定を開き、heresdk.xcframework をフレームワーク、ライブラリ、埋め込みコンテンツのセクションに追加します ([+] をクリックしてから、Add other -> Add files をクリックします)。
  4. 必要に応じて、アプリケーションのソース コードを最新の API 変更に適合させます。

HERE SDKリリースの統合についての詳細は、「利用開始」ガイドをご覧ください。

最新の HERE SDK バージョンを入手する

SDKBuildInformation から、現在統合されている HERE SDK フレームワークのバージョンを取得できます。

print("HERE SDK version: " + SDKBuildInformation.sdkVersion().versionName)

HERE SDKのバージョンはSDKによって自動的に記録されます。

自動的に更新する (Navigateでのみ使用可能)

HERE SDKバージョンは、新しいHERE SDKリリースをアプリケーションに統合することによってのみ更新できます。

プログラムによってマップ バージョンを更新する方法を以下に示します。現在統合されている HERE SDK バージョンとは無関係に、マップ バージョンを更新できます。

マップ バージョンによって、オンラインとオフラインの両方の使用向けに取得されるデータが決まります。このデータには、地図の視覚化に関連する情報と、検索、ルート検索、ナビゲーションに使用されるデータが含まれます。取得するデータを指定するには、デフォルトの LayerConfiguration を変更します。

アプリの更新で HERE SDK の新しいバージョンが統合されると、多くの場合、新しいマップ バージョンも統合されます。ただし、マップ データは自動的に更新されません。

  • mapUpdater.getCurrentMapVersion() を呼び出して、現在使用されている地図のバージョンを確認します。
  • マップ バージョンの更新が利用可能かどうかを確認するには、mapUpdater.retrieveCatalogsUpdateInfo() を呼び出します。

各アプリケーションの起動時などに、最新のマップ バージョンに自動的に更新することはできるでしょうか。

  • これは、インストールされている地域がない場合は可能です。これがどのように行われるかをお読みください。
  • インストールされている地域がある場合は、mapUpdater.updateCatalog() を使用して更新する必要があります。詳細は「オフライン マップ」セクションを参照してください。インストールされている地域がない場合は、CatalogVersionHint を設定することで更新できます。

CatalogConfiguration を作成するときに、CatalogVersionHint を設定できます (上記も参照)。

// We want to start with the latest catalog version.
let ignoreCachedData = true
let versionHint = CatalogVersionHint.latest(ignoreCachedData: ignoreCachedData)

実際には、HERE SDK を初期化する起動ごとに、キャッシュに保存されたマップ データが自動的に更新されます。デフォルトでは、マップのOCM IDを設定する必要があります (カスタムマップを使用する場合以外は、上記を参照)。

let defaultOCMHRN = "hrn:here:data::olp-here:ocm"
let defaultOCMCatalog = DesiredCatalog(hrn: defaultOCMHRN, version: versionHint)
let defaultCatalogConfiguration = CatalogConfiguration(catalog: defaultOCMCatalog)
catalogConfigurations.append(defaultCatalogConfiguration)

patchHrn値が設定されていない場合、地図の増分更新が無効になることに注意してください。地域をインストールしている場合は、mapUpdater.updateCatalog()を使用して更新する必要があります。「オフラインマップ」セクションを参照してください。地図の増分更新は、地域がインストールされている場合にのみ適用されます。

次のステップとして、HERE SDKを初期化し、SDKOptionsを使用してcatalogConfigurationsを設定します。

let authenticationMode = AuthenticationMode.withKeySecret(accessKeyId: accessKeyID, accessKeySecret: accessKeySecret)
var options = SDKOptions(authenticationMode: authenticationMode)
options.catalogConfigurations = catalogConfigurations

do {
    try SDKNativeEngine.makeSharedInstance(options: options)
} catch let e as InstantiationErrorCode {
    fatalError("Initialization of HERE SDK failed: \(e.localizedDescription)")
}

デバイスにインストールされている地域がある場合は、キャッシュに保存されたマップデータはこのコードで更新されないことに注意してください。デバイスに存在するキャッシュに保存されたデータ (たとえば、マップ キャッシュ内のデータや、PrefetchAroundLocation または PrefetchAroundRouteOnIntervals によってキャッシュに保存されたデータなど) は、新しいマップ バージョンが利用可能になると使われなくなります。このようなデータは、LRU 方式により時間の経過ともに削除されます。つまり、キャッシュはすぐには削除されませんが、必要に応じて新しいデータが使用され、キャッシュがいっぱいになると古いデータが削除されます。そのため、これが起動時間に与える影響はまったくないか、非常に限られています。

キャッシュに保存された、HERE SDK (Navigate) などのOCMベースのマップデータを自動的に更新するには、上述のコードスニペットに示されているように、DesiredCatalog内でデフォルトのHRN値"hrn:here:data::olp-here:ocm"を使用します。

ignoreCachedDataのフラグを使用して、マップバージョンを更新しようとするときに、デバイスに存在するキャッシュデータをどのように処理するかを指定できます。false に設定すると、HERE SDK はキャッシュに保存されたマップ データがまったくなく (たとえば、最初のインストール時やキャッシュを消去した後など)、さらにインストールされたマップ データがない場合にのみ、最新バージョンを使用するように自動更新されます。これ以外の場合は、効果はありません。

以前のバージョンにダウングレードする (Navigateでのみ使用可能)

下位のマップバージョンを選択することもできます。たとえば、現在のカタログよりも古い特定のカタログバージョンで起動する場合などです。

var catalogConfigurations = [CatalogConfiguration]()
let versionHint = CatalogVersionHint.specific(version: 57)

この後は、HERE SDK を初期化するときに、前のセクションと同じ手順を実行します。

これは、キャッシュに保存されたマップ データや保持されたマップ データ (インストールされた地域のもの) がない場合にのみ効果があることに注意してください。たとえば、次のように呼び出すことで、アプリケーションを終了する前にキャッシュを消去できます。

SDKCache.fromEngine(SDKNativeEngine.sharedInstance!).clearCache { mapLoaderError in
    if (mapLoaderError != nil) {
        print("clearCache failed: " + mapLoaderError.debugDescription)
    }

    // Free HERE SDK resources before the application shuts down.
    // Usually, this should be called only on application termination.
    // Afterwards, the HERE SDK is no longer usable unless it is initialized again.
    SDKNativeEngine.sharedInstance = nil
}

初めてインストールする場合はこれを行う必要はありません (マップ ビューを表示する前やルート データを取得する前にこれを行う場合)。

HERE SDK では、インストールされた Region マップ データをダウングレードしたり、自動更新したりすることは許可されていません。MapUpdaterでは、オフラインマップデータ (およびキャッシュ) を最新バージョンに更新することのみが可能です。

廃止版とベータ版

HERE SDK のチームは、一貫したインターフェースとともに柔軟性と使いやすさの両方を提供するため、利用可能な API を継続的に見直し、改善しています。

リリース全体で安定した API を確保するため、当社では廃止プロセスを遵守しています。廃止 API は、ChangeLog で廃止が発表された後、その次のメジャー リリースから数えた 2 つのメジャー バージョンでは維持されます。この期間は通常 6 ~ 9 か月です。「APIリファレンス」では、インターフェースが廃止とマークされたときに影響を受けるバージョンをいつでも確認できます。iOS、Android、Flutterのサポートされているバージョンへの更新は個別に扱われ、少なくとも1つ前のメジャーリリースの時点で、ChangeLogにて告知されています。

一部の新しいAPIや不安定になる可能性のあるAPIは、「APIリファレンス」で「ベータ」として指定されています。ベータリリースは、特に明記されている場合を除き、廃止のプロセスに従いません。ベータAPIを使用する場合は、バグが含まれている可能性があり、予期しない動作を示す可能性があることに注意してください。

HERE SDKで使用されるHEREバックエンドサービスについては、機能ライフサイクルポリシーを参照してください。

私たちはユーザーの皆様のフィードバックを大切にしており、さらなる改善のための提案に常に耳を傾けています。


EN 日本語

HERE documentation

Find answers to your product and technical questions

Documentation

What's new

Videos

EN 日本語

HERE ドキュメント

製品や技術に関する質問の答えを見つけましょう。より多くの内容と最新の情報については、英語版をご覧ください。

ドキュメント

ダイナミックマップ

動的コンテンツ関連のAPIをアプリやサービスに活用して、ドライバーが安全・快適かつ予定どおりに目的地へ到着できるよう支援します。

地図とデータ

世界中を走行する多数のマッピング車両から得られる最新の位置情報データを活用し、精度の高い地図やカスタムレイヤーを構築できます。

最新情報

動画

(function () { const input = document.querySelector('input[data-typeahead]'); if (!input) return; // Prevent the form from submitting/navigating input.closest('form')?.addEventListener('submit', e => e.preventDefault()); input.addEventListener('input', function () { const q = this.value.trim().toLowerCase(); document.querySelectorAll('.nav-group-name').forEach(group => { let anyVisible = false; group.querySelectorAll('.nav-group-task').forEach(task => { const text = task.textContent.trim().toLowerCase(); const show = !q || text.includes(q); task.style.display = show ? '' : 'none'; if (show) anyVisible = true; }); // Hide the whole group header if nothing matches group.style.display = anyVisible || !q ? '' : 'none'; }); }); })(); (function () { function onTokenClick(event) { var link = event.target.closest('.sdk-for-ios .item .token'); if (!link) return; event.preventDefault(); console.log('token clicked', link.textContent.trim()); var item = link.closest('.item'); if (!item) return; var content = item.querySelector('.height-container'); if (!content) { console.log('no .height-container found for item', item); return; } var isHidden = window.getComputedStyle(content).display === 'none'; content.style.display = isHidden ? 'block' : 'none'; link.classList.toggle('token-open', isHidden); var href = link.getAttribute('href'); if (href) { if (history.pushState) history.pushState({}, '', href); else location.hash = href; } } function openHashTarget() { var hash = window.location.hash.slice(1); if (!hash) return; var anchor = document.querySelector('.sdk-for-ios a[name="' + hash + '"]'); if (!anchor) return; var item = anchor.closest('.item'); if (!item) return; var link = item.querySelector('.token'); var content = item.querySelector('.height-container'); if (!link || !content) return; content.style.display = 'block'; link.classList.add('token-open'); } function init() { console.log('HERE SDK accordion init'); openHashTarget(); } document.removeEventListener('click', onTokenClick); document.addEventListener('click', onTokenClick); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } window.addEventListener('hashchange', openHashTarget); window.addEventListener('pageLoad', init); })();