Optimize the HERE SDK
This optimization guide lists several options to shrink the size of the HERE SDK and to optimize the runtime behavior by reducing the data that needs to loaded or processed.
Note that each of the listed features relates to one or more OCM layer groups. The names of the OCM layer groups can be seen per feature in the API Reference. However, for most use cases knowing the related OCM layer name is not relevant.
In addition, there are two layers, ADAS
and EHORIZON
(Electronic Horizon), that are currently not relevant for use with the HERE SDK editions and can be ignored for now. By default, they are already disabled.
If a feature is disabled, then it means that required data for that feature will not occupy space in the cache or as part of a Region
download. It also means, that the feature cannot be used offline. And sometimes even an error may occur - for example, when trying to use the OfflineSearchEngine
although offlineSearch
has been disabled. Find more details below.
Note
Engines like the SearchEngine
or the RoutingEngine
will never make use of cached or downloaded map data. Only the OfflineSearchEngine
and OfflineRoutingEngine
will use such data if the related features have not been disabled. For example, if you are sure that your app fully operates online, it is safe to disable the offline search feature. However, if you want to ensure that an app can also search for POIs when there is a temporary connection loss, you may want to switch to the OfflineSearchEngine
when such a loss is detected - and therefore, you should not disable the related feature.
As listed above, for some disabled features, a device may still download corresponding data when a device has online connectivity and the feature is needed. For example, when the landmarks3d
feature is disabled, but the corresponding MapScene
layer is enabled, then the device will still download the needed textures to render a 3D landmark when it becomes visible in the MapView
viewport.
For all listed features from above - except for offlineSearch
and offlineRouting
, the HERE SDK will first check if the needed data is available in the cache. If not found there, it will look if there is a downloaded Region
for offline use. If not found, the HERE SDK will try to download the needed data over the air. For offlineSearch
and offlineRouting
the behavior will be the same, but no data will be requested over the air.
Updating the Feature Configuration
Feature configurations can be updated after the installation of the next application update by calling mapUpdater.performFeatureUpdate()
. Call this method once a feature configuration has been updated in the PList
file.
As a result, the cached map data will be deleted and subsequently updated. Also, the downloaded regions will be updated to reflect the changes.
Note that it is the developer's responsibility to decide when to perform the update. The HERE SDK does not decide or notify when such an update can be made. Calling performFeatureUpdate()
is only necessary once - after an application has been updated. It is not necessary to call this, when the feature configuration has not been changed by a developer.
Remove Unused Voices
By removing unused voice guidance files you can reduce the size of the HERE SDK.
These files are only needed when you want to use turn-by-turn navigation with text-to-speech voice messages.
Do the following to remove the unused files:
- Inside
heresdk.framework
open the folder ios-arm64/voice_assets
and remove the voice packages you do not need.
Here you can find a list of all supported voice languages together with the name of the related voice skin that is stored inside the HERE SDK framework.
Remove Unused Fonts
By removing unused fonts you can reduce the size of the HERE SDK. This is explained here.
Fat Binary
For more details on how to optimize the binary size of the HERE SDK for distribution, take a look here.
More Options
Other options to optimize the HERE SDK include:
In addition, all engines contain several options that allow how to configure a feature. For example, when using the SearchEngine
, you can specify SearchOptions
to limit the returned search results.