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

補足情報

単体テスト、スレッドセーフ、依存関係の管理など、重要な補足情報を以下に示します。

単体テスト

HERE SDKを使用するアプリロジックの単体テストを簡単に記述できます。以下に、XCTestを使用した例を示します。

func testAngle() throws {
    // Static creation of angle object.
    let angle = Angle.fromRadians(angle: 0.174533)

    let angleInDegrees = angle.degrees
    // Round the test angle to 1 significant decimal.
    let roundedAngleInDegrees = round(angleInDegrees)

    let expectedAngleInDegrees: Double = 10
    XCTAssertEqual(roundedAngleInDegrees, expectedAngleInDegrees, "This is a message for a failed test.")
}

単体テストを記述する際に、HERE SDKを初期化する必要はありません。

「UnitTesting」サンプルアプリで、その他のユースケースの例を確認してください。

HERE SDKの使用状況統計情報を追跡する

HERE SDKは、UsageStatsを使用してネットワークの使用状況を監視する方法を提供します。このクラスは、アップロードおよびダウンロードされたデータに関する統計情報を収集します。sdkNativeEngine.getSdkUsageStats()sdkNativeEngine.enableUsageStats()を使用してネットワークの統計情報を取得します。カウンターをリセットするには、sdkNativeEngine.clearPersistentUsageStats()sdkNativeEngine.clearUsageStatsCache()を使用します。トラッキングを有効化するには、次を使用します。

SDKNativeEngine.sharedInstance?.enableUsageStats(enabled: true)

有効化すると、HERE SDKは異なるモジュール間でネットワーク使用状況を追跡します。追跡したデータを取得して記録するには、次のメソッドを使用します。

func logUsageStats() {
    let currentUsageStats: [UsageStats] = SDKNativeEngine.sharedInstance!.sdkUsageStats
    for usageStat in currentUsageStats {
        print("UsageStats: Network Usage for feature: \(usageStat.feature)")
        for currentNetworkUsage in usageStat.networkStats {
            print("UsageStats: Bytes sent: \(currentNetworkUsage.sentBytes)")
            print("UsageStats: Bytes received: \(currentNetworkUsage.receivedBytes)")
            print("UsageStats: Network requests sent: \(currentNetworkUsage.requestCounter)")
            print("UsageStats: For method: \(currentNetworkUsage.methodCall)")
        }
    }
}

使用されたある機能の出力例は次のようになる場合があります。この場合、renderingが使用されており、これはrenderingマップデータレイヤーに関連しています。

Network Usage for feature: rendering
Bytes sent: 12843
Bytes received: 257590
Network requests sent: 10
For method MapContent%RENDERING

UsageStatsには、RENDERINGSEARCHなどの各Featureに対応するNetworkStatsのリストが含まれます。各NetworkStatsエントリーには、sentBytesreceivedBytesrequestCounter、およびそれぞれのFeatureで対応するmethodCallが含まれます。UsageStatsは、現在のアプリセッションでのみ保持されます。

他の設定と同様に、enableUsageStats() の呼び出しは HERE SDK によって保持されません。そのため、UsageStats が実行時以前に有効になっており、ネットワーク統計の追跡を継続する場合は、HERE SDK を初期化する前に毎回これを有効にします。また、収集されたデータは、デバイス上で実行されたアプリの HERE SDK の使用量のみを集計していることに注意してください。

スレッド セーフ

HERE SDK はスレッド セーフであることは保証されておらず、メイン スレッドから SDK を呼び出す必要があります。内部的には、HERE SDK はほとんどの作業をバックグラウンド スレッドにオフロードしますが、コードへのコールバックは常にメイン スレッドで行われます。一般的に、スレッド セーフの確保は呼び出し元の責任です。たとえば、コードが同期されていない限り、さまざまなスレッドで 1 つのエンジンを再利用することは安全ではありません。

依存関係の管理

現在、CocoaPods を使用した依存関係管理はサポートされていません。つまり、HERE SDKフレームワークは、「利用開始」セクションで説明されているように、アプリケーションプロジェクトにローカルにコピーする必要があります。

HERE SDK を他のフレームワークと使用する

HERE SDK は他のフレームワークと併用できます。たとえば、希望する場合はオープン ストリート マップと SearchEngine を結合できます。

  • Xamarin:HERE SDK は Xamarin をサポートしていませんが、HERE SDK が提供する公開 API に Xamarin のラッパーを実装できます。HERE SDK に変更を加えて Xamarin 向けの関連するテスト ツールをサポートするお約束はできません。

  • React Native:React Native はサポートされていません。ただし、お客様ご自身でラッパーを実装することはできます。しかし、このようなタスクに対するサポートは提供していません。


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); })();