利用開始
このガイドでは、 HERE SDK を使用してアプリを構築するための最初のステップについて説明します。 HERE SDK は、 HERE platform からモバイルアプリケーションに最適な最新のアセットを提供できるようにカスタマイズされています。
作業を開始する前に、以下の内容を確認してください。
情報
開発を開始するには、HERE SDK パッケージを取得する必要があります。 内容は次のとおりです。
- HERE SDK は、 sdk.xcframework を継承しています。 これは、アプリに含める HERE SDK バイナリバンドルです。
- 複数のドキュメントアセットとサンプルアプリ。
- アプリ に含める必要がある here_notice ファイル。オープンソースに関する通知参照してください。
HERE SDK パッケージの入手
ご利用のプランに応じ て、 HERE SDK は、 1 か月あたりのトランザクション数および月間アクティブユーザー (MAU) などのその他のパラメータに基づいて請求されます。
資格情報の取得
注
評価版資格情報を含むアクセス権を取得するには、弊社にお問い合わせください。 基本プランの資格情報では動作しません。 Navigate Edition は、 HERE platform ポータル経由で商業契約に署名したお客様のみが利用できます。
HERE SDK でアプリ を認証するには、次の 2 つの文字列が必要です。
- アクセスキー ID (
AccessKeyId
):アカウントの一意の ID 。 - アクセスキーシークレット (
AccessKeySecret
): 秘密キー。作成時に 1 回だけ表示されます。 ページから移動する前に、メモしておいてください。
HERE SDK を使用するために、他の資格情報 またはトークンは必要ありません。
注
これらの資格情報 は、プラットフォーム に関係なく再利用できます。さらに、これらの資格情報 を複数のアプリ に使用できます。たとえば、これらのアプリは、ダウンロードしたパッケージにあるすべてのサンプルアプリで動作しますが、複数のエディションで資格情報 を交換することはできません。 Navigate Edition の場合、 HERE の担当者に連絡 して、一連の評価資格情報 を生成する必要があります。 ただし 、Navigate Editionの資格情報 は Exploreでも動作しますが、その逆はできません。
資格情報 を取得すると、 HERE .client.id または アプリ ID も 表示されます。 これらの ID は、 HERE SDK の公開 API では必要ありませんが、 HERE サポートチームに連絡する場合に役立ちます。
アプリの資格情報の設定方法の詳細については、以下の「アプリケーションの認証」セクションも参照してください。
サンプルアプリの試用
利用開始をする最も簡単 な方法は、 HERE SDK で利用できる多くのサンプルプロジェクトのいずれかを試すことです。
好みの例を選択してから、次の操作を行います。
- HERE SDK フレームワークの追加 アプリのルートフォルダーにフォルダー
heresdk.xcframework
をコピーします。 このフォルダには、 1 つのファイルInfo.plist
と 2 つのフォルダ (ios-arm64
,ios-arm64_x86_64-simulator
) を含む、より多くのファイルが含まれていることに注意してください。 - HERE Credentials (
AccessKeyId
および AccessKeySecret
) を プロジェクトのファイル AppDelegate.swift
に追加します。
これで、 Xcode プロジェクトを開く準備 ができました。また、お使いのデバイスまたはシミュレータでアプリを即座に実行できます。
注
この開発者ガイドのほぼすべてのトピックが実行可能なアプリとして利用できることをご存知でしたか ?
サンプルのコードを自由に試用以下のガイドを参照して、 HERE SDK でアプリを開発する方法についてより詳細に説明することもできます。
新しい iOS プロジェクトの作成
最初のステップバイステップの例として、 -yes を表示する "Hello Map" iOS アプリケーションを開発します。 - 地図。 SDK を既存のアプリケーションに統合する場合は、この手順を省略できます。 特定の SDK コードはここには含まれていません。 Xcode を IDE として使用することをお勧めします。 iOS の開発に慣れていない場合 は、 developer.apple.com のガイドに従って、最初のステップを実行してください。
注
「 HelloMap 」のサンプルコードは、 こちらです。
Xcodeを起動し(このガイドではバージョン14.2を使用しています)、 新しいXcodeプロジェクトを作成します。
- テンプレートで は、 iOS => Application => Single View アプリを選択するだけで十分です。
- [ 次へ ] をクリックし
- プロジェクト名を入力します ( 例 : ) 「 HelloMap 」と入力し 、言語として Swift を選択します。
- 「次へ」をクリックして、プロジェクトを保存する適切なディレクトリを選択します。
新しく作成したプロジェクトで 、アプリケーションの実行先としてシミュレータまたは実際の機器 ( 推奨 ) を選択します。
以下の例では、デフォルトの方向設定を保持しています。 既存のサンプルアプリを実行する場合 は、展開ターゲットがインストール済みのバージョンに設定されていることを確認してください。 iOS 12.4 が使用されています。
ここで 、現在のスキームをビルドして実行 し、プレーンプロジェクトが期待どおりに実行されることを確認します。 すべて問題が解決した場合は、内容のない空白のビューが表示されます。
Hello Map!の表示
iOS アプリが動作するようになったら、 HERE SDK を追加して、シミュレータまたはデバイスにマップを表示します。 次のステップの概要を示します。
- HERE SDKの統合
- 必要な資格情報の設定
- マップ ビューをコードで追加するか、ストーリーボードに追加
- 最初のマップ シーンをロードするコードの追加
注
HERE SDK のすべての機能にシミュレータからアクセスできますが、実際のデバイスの使用を強くお勧めします。 全体的なパフォーマンスが向上し、マルチタッチ対応のハードウェアではジェスチャなどの一部の機能が簡単に使用できます。 マップ ビューのレンダリングは、モバイル機器用GPU に最適化されています。
まず、最初のステップで、 HERE SDK をプロジェクトに追加する方法を確認しましょう。
HERE SDK の統合
On here-tech.skawa.fun you can find the latest release artifacts including the HERE SDK framework to include in your application (named xx.yy.zz.release_date).
heresdk.xcframework
アプリのルートフォルダーにフォルダーをコピーします。 このフォルダには、 1 つのファイルInfo.plist
と 2 つのフォルダ (ios-arm64
,ios-arm64_x86_64-simulator
) を含む、より多くのファイルが含まれていることに注意してください。
Xcode でApp targetのGeneral設定を開き、「Frameworks、Libraries、およびembedded content」セクションに heresdk.xcframework
を追加します(「+」をクリックしてから、「Add other...」をクリックします)。-> 「Add files ... 」)。
注
このガイドは、こちらのSDKバージョン4.13.4.0に基づいています。 フレームワークのバージョンがこのガイドで使用されているバージョンと異なる場合、手順が異なる場合があり、サンプルのソースコードを調整する必要がある場合があります。
HERE 資格情報の設定
HERE SDK を使用する場合は、一連の資格情報 でアプリケーションを認証する必要があります。
情報
ヒント : 「主な概念 」セクションでは、 HERE SDK を初期化するためのその他の方法を見つけることができます。
資格情報を手元に用意したら、HERE SDK を初期化する際に、プログラムで資格情報セットを追加します (次のステップを参照) 。
注
資格情報は、アプリの名前ではなく、資格情報の取得に使用されたアカウントに関連付けられています。 これにより、複数のアプリで同じ資格情報のセットを使用できます。
HERE SDK の初期化
HERE SDK は自動的には初期化されなくなりました。 代わりに、 HERE SDK を初期化する時点を自由に決定できるようになりました。 初期化はメインスレッドで同期的に行われ、約 100 ミリ秒かかります。
HERE SDK を初期化するには、 HERE SDK を使用する前に次のメソッドを実行します。
private func initializeHERESDK() {
let accessKeyID = "YOUR_ACCESS_KEY_ID"
let accessKeySecret = "YOUR_ACCESS_KEY_SECRET"
let options = SDKOptions(accessKeyId: accessKeyID, accessKeySecret: accessKeySecret)
do {
try SDKNativeEngine.makeSharedInstance(options: options)
} catch let engineInstantiationError {
fatalError("Failed to initialize the HERE SDK. Cause: \(engineInstantiationError)")
}
}
HERE プログラムで資格情報 を挿入できます。 makeSharedInstance()
を呼び出すことで 、 HERE SDK を使用するために必要なものをすべて初期化できます。 HERE SDK のコアクラスは、SDKNativeEngine
と呼ばれています。内部的には、このインスタンスは HERE SDK によって提供される他のエンジンによって使用されます。
メインスレッドでこのコードを呼び出してください。
注
4.12.1.0 よりも前の古い HERE SDK バージョンから移行する場合は 、ファイルplist
から資格情報 タグも削除してください ( 存在する場合 ) 。
以下に、レイアウトから MapView
にアクセスする前に、 AppDelegate
の application(_ application:launchOptions:)
メソッドで initializeHERESDK()
を呼び出す方法の例を示します。
initializeHERESDK()
と同様に、 HERE SDK を廃棄してリソースを解放することもできます。
private func disposeHERESDK() {
SDKNativeEngine.sharedInstance = nil
}
以下に 、AppDelegate
の applicationWillTerminate(application:)
メソッドでdisposeHERESDK()
を呼び出す方法の例を示します。
マップ ビューの追加
SDK がプロジェクトに統合され、必要な資格情報が追加されたので 、新しいインスタンスMapView
を追加できます。
これを行うには、 2 つの方法があります。 まず 、プログラムで MapView
を追加する方法を示します 。次に、 Storyboard を使用してMapView
を追加する方法を示します。
注
複数 のインスタンスMapView
を同じ画面で作成してレンダリングできます。
いずれの方法を選択した場合も 、次のモジュールのインポート行をファイルに追加する必要があります。ViewController.swift
import heresdk
マップ ビューをプログラムで追加
次の変数宣言をクラスViewController
に追加して、マップ ビュー変数を追加します。
var mapView: MapView!
メソッドviewDidLoad()
で、次のコードを追加してマップ ビューを初期化します。
override func viewDidLoad() {
super.viewDidLoad()
mapView = MapView(frame: view.bounds)
view.addSubview(mapView)
}
これにより、親ビューと同じサイズのMapView
になり、サブビューとして追加されます。
ストーリーボードにマップ ビューを追加
上記のようにプログラムによってMapView
を初期化するのでは なく、ストーリーボードを使用して Xcode の Interface Builder から UI を構築することをお勧めします。 この場合、上記の行を View Controller に追加する必要はありません。
代わりに、 Main.storyboard
を開き、メインビュー (ViewController
の下にネストされています ) を選択します。 Identity Inspectorの Custom Class
で、MapView
と入力 します。 Moduleにheresdk
と入力 します。
次に、アシスタントエディターを開き、 Ctrl キーを押しながらマップ ビューをクリックして、アウトレット を作成するために。ViewController
にドラッグします。 アウトレットウィンドウがポップアップ表示されます。名前として、 mapView
と入力し、 connect
をクリックします。 これにより、 View Controller に次の行が追加されます。
@IBOutlet var mapView: MapView!
View Controller からIBOutlet
にアクセスできるようになり、使用できるようになりました。 この手順には、 SDK 固有のアクションは含まれていません。 MapView
は、他の UIView
アクションとまったく同じように動作します。
Swift UI を使用してマップ ビュー の追加
または、マップ ビュー と Swift UI を併用してください。
マップ ビューはサブクラス UIView
です。このチュートリアルで示すように、 プロトコルUIViewRepresentable
に準拠した SwiftUI ビューでビューをラップできます。
情報
Swift UI を利用するには、 iOS 13 以降が必要です。
以下に、このプロトコルUIViewRepresentable
に準拠した構造体を作成する方法を示します。
struct HelloMapSwiftUIView: UIViewRepresentable {
func makeUIView(context: Context) -> MapView {
let mapView = MapView()
return mapView
}
func updateUIView(_ mapView: MapView, context: Context) {
}
マップ シーンのロード
HERE SDK を使用するこの最初のアプリでは、 SDK に付属しているデフォルトのマップスタイルのいずれかをロードします。
ViewController
の viewDidLoad()
メソッドでは、次のコードを追加して、 マップ レンダリングスタイルnormalDay
を表すマップ スキームを含むシーンを読み込みます
mapView.mapScene.loadScene(mapScheme: MapScheme.normalDay, completion: onLoadScene)
完了ハンドラとして、必要に応じて、シーンの読み込みが成功したことを通知するメソッドを実装できます。
private func onLoadScene(mapError: MapError?) {
guard mapError == nil else {
print("Error: Map scene not loaded, \(String(describing: mapError))")
return
}
let camera = mapView.camera
let distanceInMeters = MapMeasure(kind: .distance, value: 1000 * 10)
camera.lookAt(point: GeoCoordinates(latitude: 52.518043, longitude: 13.405991),
zoom: distanceInMeters)
}
シーンの読み込みが完了すると、メインスレッドで完了ハンドラが呼び出されます。 nil
以外の MapError
値は、問題の内容を示します。
MapView
から Camera
にアクセスして 、マップを中央に配置する場所などのカスタムマップパラメータ、およびカメラから地球までの距離で指定されたズーム レベルを設定できます。
let camera = mapView.camera
let distanceInMeters = MapMeasure(kind: .distance, value: 1000 * 10)
camera.lookAt(point: GeoCoordinates(latitude: 52.518043, longitude: 13.405991),
zoom: distanceInMeters)
注
Camera
インスタンスが使用可能になるとすぐに MapView
を設定できます。 ただし、変更が有効になるのは、シーンをロードするための完了ハンドラーが終了した後でのみ確認できます。一般的に、シーンがロードされるまでマップ操作を待機することをお勧めします。 たとえば、カメラ操作はシーンがロードされるまでキューに入れられる一方、他の操作はマップ シーンがないとまったく効果がない可能性があります。
演習として、上記のマップ スキームを次のよう に置き換えることができます。.satellite
何を手に入れますか? 通常の夜間 の設定など、他のマップの設定も試してみてください。
または、利用可能な地図レイヤーのいずれかを試してください。 たとえば、目立つランドマークのテクスチャ付き 3D モデルを有効にするには、次のコード行をアプリ に追加します。
mapView.mapScene.enableFeatures([MapFeatures.landmarks : MapFeatureModes.landmarksTextured])
また、クラスAppDelegate
に次のものを追加することをお勧めします。
func applicationWillTerminate(_ application: UIApplication) {
MapView.deinitialize()
disposeHERESDK()
}
MapView.deinitialize()
を呼び出すと 、アプリケーションの終了時に HERE Rendering Engine のリソースが解放されます。 また、SDKNativeEngine
の共有インスタンスをnil に設定することも推奨されます。これにより、共有インスタンスは保持されなくなります。 ここでは上で示したように、このメソッドdisposeHERESDK()
を使用できます。
オプションで、MapView.pause()
と MapView.resume()
は、アクティブなアプリ内の非表示のマップ ビューのエネルギー消費を節約するためにアプリが GPU 呼び出しを停止するユースケースに使用できます。たとえば、タブ付きマップ ビューのインスタンスを切り替えるときや、スクロール可能なビューに複数のマップが保持されている場合などです。 インスタンスを表示します。このような場合にMapView.pause()
と MapView.resume()
が呼び出されると、次 のイベントハンドラ関数でアプリ がフォアグラウンドとバックグラウンドを切り替えるときにpause()
とresume()
も呼び出す必要があります。
func applicationWillResignActive(_ application: UIApplication) {
MapView.pause()
}
func applicationDidBecomeActive(_ application: UIApplication) {
MapView.resume()
}
最後 に、 View Controller の didReceiveMemoryWarning()
を処理することをお勧めします。 HERE SDK で は、未使用のリソースが OS から要求されたときに安全にクリーンアップする方法handleLowMemory()
を提供します。
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
mapView.handleLowMemory()
}
次に、アプリを構築して実行します。 問題が解決した場合は、画面の全領域をカバーする HERE マップが表示されます。 おめでとうございます。 HERE SDK for iOS の使用に関する最初のステップを習得しました。
スクリーンショット: メインマップ スキームの表示
スクリーンショット : 3D ランドマークの表示。
スクリーンショット: 衛星マップ スキームの表示 配布用にアプリを準備
HERE SDKフレームワークは 、デバイス(arm64) と シミュレータ(x86_64)用に構築されたファットバイナリです。 したがって、両方のアーキテクチャが含まれています。 これにより、シミュレータ および 実際のデバイスに簡単に導入できます。 また、Xcodeのクラッシュを示すデバッグシンボルも含まれています。
HERE SDK フレームワークは Apple の XCFramework バンドルタイプ (XCFW) に準拠しているため、アプリの配布に使用できます。 Xcode で は、アプリに署名する開発チームを選択し、 汎用 iOS デバイス を選択 して 、 [ 製品 ] -> [ アーカイブ] を選択する必要があります。
ターゲットデバイス用にエクスポートされたアプリ(つまり、結果のIPA)のバイナリサイズは、占有するスペースが少なくなります。 不要なファイルを手動で削除することもできます。 ただし、アーカイブ時に明示的に除外しない限り、IPAにはすべてのアーキテクチャが含まれていることに注意してください。 デバイス上の実際のサイズははるかに少ないスペースを占有し、Appleは必要なアーキテクチャのみを含めることを保証します。 したがって、App Storeからの実際のダウンロードサイズも はるかに小さくなります。 このXcodeガイドも参照してください。 そのため、App Storeを介してアプリをデプロイする場合は、HERE SDKフレームワークをそのまま使用することをお勧めします。デプロイプロセスの一部としてすべてのサイズの最適化が自動的に行われるためです。
注
アプリを実際のデバイスに配布したり、 Apple のApp Store で公開するなどの目的でほかの人と共有する場合は、 Apple 開発者アカウントが必要です。 Apple デベロッパアカウントがない場合は、 iOS シミュレータで実行できます。 または、 Xcode の「Free Provisioning」 ( Personal Team ) プロファイルを作成します。このプロファイルを使用して、実際のデバイスでアプリケーションを試用できます。 このプロファイルは期間限定で有効です。
トラブルシューティング
問題が発生した場合 は、まず最小要件とサポートされているデバイスを確認してください。
- 空白の白いマップのみが表示されます。 ご利用の HERE Credentials が有効で、 上記の「利用開始 」セクションの説明に従って設定されていることを確認してください。 また、ご利用のデバイスがインターネットに接続できることを確認してください。 インターネット接続が遅い場合、最初にロードされたマップのタイルが表示されるまでにしばらくかかることがあります。 また、デバイスの時刻が正しく設定されていることを確認してください。 まれに、デバイスの時間が正しく設定されていないと、一部のバックエンドサービスで認証の問題が発生する可能性があります。
- ログに「No map content will be displayed until valid config is provided.」と表示されます。 コードが実際に
loadScene()
を呼び出していることを確認 - Xcode から
MapView
不明なエラーが発生しました : 上記の「利用開始」の項で説明されているように、 HERE SDK フレームワークを統合してください。 - Xcode では、
heresdk
のモジュール定義はロードしません。 これは、rdar://42087654
として知られている Xcode SourceKit エラーです。 上記の「利用開始」の項で説明されているように、 HERE SDK フレームワークを統合してください。 また、プロジェクトおよびフレームワークへのパスにスペース記号が含まれていないことを確認してください。 - Xcode はシミュレータのプロジェクトをコンパイルしていません。 M1 チップを搭載したコンピューターを使用しています。 4.9.2.0 よりも前の HERE SDK バージョンを使用しています。 新しい HERE SDK バージョンを使用するか、Xcode 内の
Build Settings/Architectures/Excluded Architectures/Debug
設定で「Any iOS Simulator SDK」の arm64 アーキテクチャを除外して Rosetta モードで実行してみてください。「TARGETS」設定でこのオプションを選択します。 シミュレータを実行すると、パフォーマンスがわずかに低下することがあります。 - マップが表示されないか、 HERE SDK は何もコールしません。 「 These credentials do not authorize access 」というログメッセージが表示された場合は、資格情報 が有効ではありません。 資格情報 のワーキングセットを使用していることを確認してください。 3.x エディションの資格情報 には互換性がありません。 Explore Edition の資格情報は Navigate Edition と互換性がありません 。
- iOSリリース用にビルドすると、ビルドは失敗します。 実行されるログに
-embed-bitcode
が表示された場合は 、bitcode optimizationを明示的に無効にしてください。 Appleはbitcodeを非推奨にし、HERE SDKはそれをサポートしなくなりました。 debug/release のXcodeビルド設定にENABLE_BITCODE = NO;
を追加します。
サポートが必要な場合
この HERE 製品またはその他の 製品についてサポートが必要な場合は、次のいずれかのオプションを選択します。