Release Notes
We are pleased to announce the availability of version 4.9.4.0 (Lite Edition) of the new HERE SDK for iOS.
This is a stable release. We are constantly working on new features, stabilizing APIs, improving our KPIs, and evaluating your feedback.
Changes
This section documents major changes to this release that may require you to update your applications.
Version 4.9.4.0
New Features
- Routing: Added support for bicycles. Now it is possible to create bicycle routes online with the
RoutingEngine
using BicycleOptions
. Added also TransportMode.bicycle
. - Routing: Added optional field
nameHint
to Waypoint
. For cases when there are multiple places at the same geographic coordinate, this hint can help the RoutingEngine
to find the expected place. For example, "North" can be set to differentiate between interstates "I66 North" and "I66 South". - Routing: It's now possible to set
TaxiOptions.allowDriveThroughTaxiRoads
. It allows to calculate routes that make use of roads and lanes that are reserved for taxis.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message. - When using Xcode 13 you may get a warning that certain files in
heresdk.swiftmodule
are either malformed or generated by a different Swift version. It is safe to ignore this warning. The reason for this warning is that the HERE SDK is compiled with Xcode 12.4. - Truck routes that are imported via
importRoute()
may be result in a RoutingError.NoRouteFound
error as certain truck restrictions may be violated along the road. This is incorrect and instead the resulting route should contain the violated restrictions as part of the route's SectionNotice
.
Changes from Previous Releases
This section documents major changes from past releases. We encourage you to use the latest release, 4.9.4.0.
Version 4.9.3.0
Resolved Issues
- Fixed
enterHigway
maneuver action which was incorrectly reported as turn left / right instead of left / right fork.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message. - When using Xcode 13 you may get a warning that certain files in
heresdk.swiftmodule
are either malformed or generated by a different Swift version. It is safe to ignore this warning. The reason for this warning is that the HERE SDK is compiled with Xcode 12.4.
Version 4.9.2.0
Highlights
- Added simulator support for M1 machines with a new ios-arm64_x86_64-simulator framework that is included now in the XCFramework along with the ios-arm64 framework. Now it is possible to start simulators without any workaround on M1 machines. Note that bitcode optimization is only enabled for ios-arm64.
New Features
- Offline Routing: Enabled a property for
RouteOptions
that allows to set an upper limit of the driving speed of a vehicle: speedCapInMetersPerSecond
is available for car and truck transport modes. It can affect route path and ETA. Note that this property was already available for online routing.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message. - When using Xcode 13 you may get a warning that certain files in
heresdk.swiftmodule
are either malformed or generated by a different Swift version. It is safe to ignore this warning. The reason for this warning is that the HERE SDK is compiled with Xcode 12.4.
Version 4.9.1.0
API Changes
- Removed deprecated tag for
persistentMapStorageFolderAccessDenied
. persistentMapStorageFolderAccessDenied
is not deprecated anymore.
Resolved Issues
- Fixed: Route imports no longer fail when
Location.time
is set.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message. - When using Xcode 13 you may get a warning that certain files in
heresdk.swiftmodule
are either malformed or generated by a different Swift version. It is safe to ignore this warning. The reason for this warning is that the HERE SDK is compiled with Xcode 12.4.
Version 4.9.0.0
New Features
- Routes can now be imported: Added
routingEngine.importRoute()
to import a route from a list of GeoCoordinates
and RouteOptions
. - Added optional field
time
to Location
class to specify the time when the location data was set. - Search: Added
PlaceType.intersection
to indicate an intersection of at least two streets. Note: This is a beta feature.
API Changes
- Removed the previously deprecated
Notice
struct, NoticeCode
enum and Section.notices
property. Use SectionNoticeCode
, SectionNotice
class and Section.getSectionNotices()
method instead. - Declared all
Gestures
delegate properties as weak
. - Search: Removed the following fields from
Address
class that have been previously deprecated: stateName
, countyName
, streetName
, additionalData
. Please use state
, county
and street
instead. The field additionalData
was already unused. - Search: Removed the perviously deprecated
optionsNotAvailable
value from the SearchError
enum. It was replaced by the SearchError.invalidParameter
value. - Deprecated field
timestamp
in Location
class, please use the newly introduced time
field instead.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message. - When using Xcode 13 you may get a warning that certain files in
heresdk.swiftmodule
are either malformed or generated by a different Swift version. It is safe to ignore this warning. The reason for this warning is that the HERE SDK is compiled with Xcode 12.4.
Version 4.8.4.0
New Features
- Routing: Added
durationInSeconds
property to the Maneuver
class to get the estimated duration of a maneuver. - Added new factory method for DMS and decimal
GeoCoordinates
to convert one into the other with GeoCoordinates.fromString()
. - Search: Added
ResponseDetails
as result type that provides the requestId
of a search request and a correlationId
to identify multiple, related queries. - Routing: Added a static
fromString
method to SegmentReference
to generate instances of this class from a well-formatted String. Usually, SegmentReference
instances are only accessible from the Span
of a Route
's Segment
.
API Changes
- Routing: For the new toll cost API, now the newly added
RouteOptions.enableTolls
flag must be set to get toll costs. It is set to false
by default. When this flag is enabled, toll data is requested for toll applicable transport modes.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.8.3.0
New Features
- Public transit routes: Added support for new
pedestrian
sections to provide better information on in-station walks, for example, when walking from a place of type accessPoint
type to a place of type station
. - Routing: Added
RouteOptions.enableTrafficOptimization
property which is true by default, and when set to false, it doesn't consider traffic information and ignores RouteOptions.departureTime
. - Routing: It's now possible to avoid individual segments on a
Route
. With the newly added segments
field in AvoidanceOptions
users can specify the parts of a route they would like to avoid after a recalculation. The segments can be identified via Route -> Section -> Span -> SegmentReference
. - Added
SegmentReference
class that represents a reference to a segment id with a travel direction. - Added
getSegmentReference
method to the Span
class. - Added
TravelDirection
enum that indicates the travel direction along a segment.
- Routing: Added
violatedAvoidSeasonalClosure
, violatedAvoidTollTransponder
, seasonalClosure
, tollTransponder
, tollsDataUnavailable
and chargingStopNotNeeded
symbols to the SectionNoticeCode
enum.
API Changes
- Transit routes no longer provide fare information and the
TransitSectionDetails.fares
list is always empty. - Routing: Deprecated
SectionNoticeCode.violatedPedestrianOption
symbol. It will be removed in v4.11.0 as it is no longer supported. - Deprecated
persistentMapStorageFolderAccessDenied
and failedToLockPersistentMapStorageFolder
values from the InstantiationErrorCode
enum. The persistent storage directory is no longer locked.
Resolved Issues
- Fixed: It is not possible to set both
RouteOptions.departureTime
and RouteOptions.arrivalTime
at the same time. Plus, RouteOptions.arrivalTime
is ignored when RouteOptions.enableTrafficOptimization
is set to false.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.8.2.0
New Features
- Improved search for electric vehicle charging stations: Added classes
EVChargingPool
and EVChargingStation
. A charging pool for electric vehicles is an area equipped with one or more charging stations. A charging station defines a group of connectors for electrical vehicles that share a common charging connector type and max power level. Note: This is a beta feature. - Improved search for electric vehicle charging stations: Added property
Details.evChargingPool
that represents the details of the charging pool for electric vehicles. Note: This is a beta feature. - Routing: Added information on toll costs with a new
PaymentMethod
enum, TollFare
& Toll
structs and Section.tolls
property. Note: This is a beta feature.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.8.1.0
New Features
- Routing: Added
NoRouteHandle
enum value to RoutingError
to indicate that the route did not contain the required RouteHandle
, which is needed, for example, to refresh a route. - Search: Added new
name
property to PlaceCategory
that provides a level 3 description.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.8.0.0
API Changes
- Map view: Removed the previously deprecated cache size related constructors and fields:
MapViewLite.init(maxTilesCacheSizeInBytes: UInt32)
MapViewLite.init(frame: CGRect, maxTilesCacheSizeInBytes: UInt32)
MapViewLite.init(frame: CGRect, withSdkEngine sdkEngine: SDKNativeEngine, maxTilesCacheSizeInBytes: UInt32)
UInt32 MapViewLite.maxTilesCacheSize
- Map view: Removed the previously deprecated
CameraLimits.ErrorCode.VALUE_OUTSIDE_LIMITS
from MapViewLite
. - Search: Removed previously deprecated fields in
Contact
: emailAddresses
, landlinePhoneNumbers
, mobilePhoneNumbers
, websiteAddresses
. - Routing: Removed the previously deprecated
Arrival
and Departure
classes.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.7.0
Highlights
- Note: The existing delegate properties for the
Gestures
class will be changed to weak references with the upcoming HERE SDK v4.9.0 release. After this change, it is no longer necessary to manually set delegates to nil
to break the retain cycle between conforming objects and their respective delegate variables.
New Features
- Search: Added
politicalView
member to Place
class. The optional value can be checked if it is matching the one that was set beforehand via SDKOptions
.
API Changes
- Routing: Updated the API for the returnToRoute and refreshRoute feature for
RoutingEngine
: - Changed the parameter order of
RoutingInterface.returnToRoute()
: The startingPoint
parameter is now the second parameter, not the third parameter. The feature is still in beta. - Added a
startingPoint
parameter to the RoutingEngine.refreshRoute()
method. In return, deleted RefreshRouteOptions.updateStartingPoint()
. The feature is still in beta. - Deleted the ReturnToRouteEngine. Use the newly introduced
RoutingInterface.returnToRoute()
method instead.
Resolved Issues
- Fixed: A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route.
Known Issues
- The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.6.0
Highlights
- Note: The existing delegate properties for the
Gestures
class will be changed to weak references with the upcoming HERE SDK v4.9.0 release. After this change, it is no longer necessary to manually set delegates to nil
to break the retain cycle between conforming objects and their respective delegate variables.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.5.0
New Features
- Routing: Added avoidance options for pedestrians with
PedestrianOptions.avoidanceOptions
. - Search: Added support to search along longer route polylines with a
GeoCorridor
. Either increase halfWidthInMeters
when set via constructor or do not set it - by using the GeoCorridor
constructor that only allows to set the GeoPolyline
. The parameter radiusInMeters
has been deprecated: Please only use halfWidthInMeters
as constructor parameter to specify the thickness of the route corridor. When increasing halfWidthInMeters
then a greater simplification of the polyline shape can be achieved resulting in a longer route that can be searched along. On the downside the results are less accurate and can lie farther away from the route. When halfWidthInMeters
is not set, a suitable value is set internally based on "best guess".
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.4.0
New Features
- Routing: Added
TruckType
enum to specify the type of a truck for the TruckSpecifications
. - Routing: Added
TruckSpecifications.trailerCount
to specify the number of trailers. - Routing: Added
accessPoint
to RoutePlaceType
enum. It allows to differentiate Section
's based on RoutePlace.type
. - Public transit: Added
FarePriceType
enum, FarePrice.type
, FarePrice.minimum
and FarePrice.maximum
properties. FarePrice
provides the actual price value.
API Changes
- Custom map layers: Extended the validation for custom raster layer names raster to include hyphens and underscores. Now, only alphanumeric characters like
\[a-zA-Z0-9\]
, hyphens and underscores are allowed. - Map cache: Deprecated the
MapViewLite.tilesCacheSize
property, because it returned a UInt32
value, which was insufficient for the internal representation of the tiles cache size. Use the newly introduced MapViewLite.tilesCacheSizeInBytes
instead, which returns Int64
. - Routing: Deprecated
FarePrice.unit
, use the newly introduced FarePrice.validityPeriodInSeconds
property instead. - Routing: Deprecated the unsupported
Agency.icon
property. This property is no longer supported and will be removed with HERE SDK release v4.10.0.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.3.0
New Features
- Routing: Added support for
EVCarOptions
and EVTruckOptions
for the RefreshRouteOptions
class. - EV Routing: Added new parameters to
BatterySpecifications
: -
minChargeAtChargingStationInKilowattHours
: The minimum charge when arriving at a charging station. -
minChargeAtDestinationInKilowattHours
: The minimum charge at the final route destination. -
maxChargingVoltageInVolts
: The maximum charging voltage supported by the vehicle's battery. -
maxChargingCurrentInAmperes
: The maximum charging current supported by the vehicle's battery. -
chargingSetupDurationInSeconds
: The time spent after arriving at a charging station, but before actually charging.
-
SearchEngine
: For reverse geocoding it is now possible to search in a GeoCircle
with search(circle: GeoCircle, options: SearchOptions, completion: SearchCompletionHandler)
.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.2.0
New Features
- Added a feature to refresh a
Route
: Added the RouteOptions.enableRouteHandle
flag to get a RouteHandle
, a RefreshRouteOptions
class and a RoutingEngine.refreshRoute()
method. Note that currently EVRouteOptions
are not supported. See the related chapter in the Developer's Guide for more information.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.1.0
New Features
- Introduced taxi routes. Added
TransportMode.taxi
type and a TaxiOptions
class to calculate routes optimized for taxis via RoutingEngine.calculateRoute()
. Note: This is a beta release of this transport mode, so there could be a few bugs and unexpected behaviors. - Routing: Added
RouteOptions.speedCapInMetersPerSecond
to limit the maximum allowed speed for a vehicle. When set, the route duration will be shorter for car and truck transport modes. For scooter routes it may also affect the route geometry. Other transport modes are ignored.
Resolved Issues
- Fixed: Public transit routes do not contain maneuvers.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.7.0.0
Highlights
- Introduced public transit routing with a new
TransitRoutingEngine
that can calculate public transit routes. It uses TransitWaypoint
type waypoints and a TransitRouteOptions
class to specify various transit related options. Note that the API is in an early development stage. More features and overall stabilization are planned for the next releases.
New Features
- Along with the newly introduced
TransitRoutingEngine
(see above), the following supportive types have been added: AttributionType
enum, FarePriceType
enum, FareReason
enum, PreActionType
enum, TransitDepartureStatus
enum, TransitIncidentType
enum, TransitIncidentEffect
enum, TransitMode
enum, TransitModeFilter
enum, Agency
class, Attribution
class, Fare
class, FarePrice
class, PreAction
class, TransitIncident
class, TransitDeparture
class, TransitSectionDetails
class, TransitStop class, and TransitTransport
class. - Routing: Introduced a new
Span
class that is accessible from a Section
on a Route
. It points to the related section notices to indicate possible route violations. With the Span
class these violations can now be identified on the Route
as they contain the length in meters and the geometry. - Routing: Added additional constructor for
IsolineOptions.Calculation
: IsolineOptions.Calculation init(rangeType: IsolineRangeType, rangeValues: [Int32], isolineCalculationMode: IsolineCalculationMode)
. - Search: Added new method to
SearchEngine
to get place details for a Suggestion
that contains a href
String. Use the new sendRequest()
method for this.
API Changes
- Added a new
MapViewLifecycleListener
that replaces the deprecated MapRepresentable
. It can be added or removed from a Mapview
. Use this to get notified on the map view's lifecycle. - Deprecated
MapRepresentable
and the related methods to add or remove it from a MapView
. Use the newly introduced MapViewLifecycleListener
instead. - Removed the previously deprecated
GeoBox.intersects(GeoBox)
and GeoBox.contains(GeoBox)
. - Removed the previously deprecated
LocationProvider
and the LocationListener.onLocationTimeout()
method. - Removed the previously deprecated
Section.transportMode
property. - Removed the previously deprecated
GeoCorridor(List<GeoCoordinates>, Double)
constructor. - Removed the previously deprecated
Place.coordinates
property. - Removed the previously deprecated class
Color
and the deprecated extension for UIColor
.
Resolved Issues
- Fixed: The opening hours for a
Place
that closes after midnight end at midnight.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message. - Public transit routes do not contain maneuvers.
Version 4.6.5.0
New Features
- Added support for political views.
SDKOptions
allow now to specify the politicalView
string. It's a three letter country code defined by ISO 3166-1 alpha-3. When set, all map data will respect the point of view of this country. Note that this is a beta feature and thus there can be bugs and unexpected behaviour. - A
Place
can now be serialized or deserialized with serializeCompact()
and deserialize()
to or from a String
. - Routing: Added
SectionNoticeCode
and NoticeSeverity
enums, SectionNotice
class and Section.sectionNotices
property to get informed on possible route violations. - Isoline Routing:
- Added
RoutePlaceDirection
enum with values arrival
and departure
. - Added
isolineDirection
field inside IsolineOptions.Calculation
structure (with default value of RoutePlaceDirection.departure
) - Extended the existing
IsolineOptions.Calculation
constructor to accept the new RoutePlaceDirection
enum. - Added
RouteOptions.arrivalTime
to set an optional time when a travel is expected to end. Note that this parameter is currently only supported for isoline route calculation.
API Changes
- Routing: Deprecated the
Notice
class and NoticeCode
enum along with Section.notices
property, use the newly introduced SectionNoticeCode
, SectionNotice
class and Section.sectionNotices
property instead. - Search: Deprecated
SearchError.optionNotAvailable
enum value, it will be replaced by the existing SearchError.invalidParameter
value.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - The opening hours for a
Place
that closes after midnight end at midnight. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.6.4.0
New Features
- Routing: Introduced
Waypoint.minCourseDistanceInMeters
to specify an optional distance parameter during which a user can avoid taking actions.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - The opening hours for a
Place
that closes after midnight end at midnight. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.6.3.0
New Features
- Routing: Added
sideOfStreetHint
property to Waypoint
. These optional GeoCoordinates
indicate which side of the street should be used to reach the waypoint. For example, if the location is to the left of the street, the route will prefer using that side in case the street has dividers. Hence, if the street has no dividers, sideOfStreetHint
is ignored.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - The opening hours for a
Place
that closes after midnight end at midnight. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.6.2.0
Resolved Issues
- Fixed: When
SDKOptions
is created before initialization of SDKNativeEngine
it may contain a corrupted path.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - The opening hours for a
Place
that closes after midnight end at midnight. - An inner city
Route
for trucks carrying dangerous goods may not result in an error message.
Version 4.6.1.0
New Features
- Routing: Introduced
ZoneCategory
enum and added zoneCategories
field to to the AvoidanceOptions
struct which is a collection of ZoneCategory
's. - EV routing: Introduced
Route.getEVDetails()
which returns the accumulated evDetails
data for all sections of a route.
API Changes
- Routing: Deprecated
Section.getter:arrival
and Section.getter:departure
. Instead, use the newly introduced Section.getter:arrivalPlace
and Section.getter:departurePlace
to get a RoutePlace
. - Deprecated the
Address
fields stateName
, countyName
, streetName
and the related constructors. Instead, use the newly introduced constructor that takes the new fields state
, country
and street
.
Resolved Issues
- Fixed: Performing a
CategoryQuery
or a TextQuery
search no longer returns SearchError.httpError
when searching in a circle, whose radius is a number with a fraction.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - When
SDKOptions
is created before initialization of SDKNativeEngine
it may contain a corrupted path.
Version 4.6.0.0
Highlights
- Added isoline routing to calculate the reachable area for the given center coordinates and a range defined in time, distance or energy consumption. Added a new
calculateIsoline()
method to RoutingEngine
. Added related classes: -
IsolineOptions
: Options for isoline calculation. -
IsolineRangeType
: Enumeration specifying whether the range type is defined in time, distance or energy consumption. -
IsolineCalculationMode
: Specifies how the isoline calculation can be optimized. -
Isoline
: Represents a single isoline. -
MapMatchedCoordinates
: Contains a pair of user-defined and map-matched coordinates.
More New Features
- Added
ScooterOptions.allowHighway
property. - Search: Added
categories
field to OpeningHours
. It contains categories
related to specific OpeningHours
. For example, when a Place
has multiple opening hours associated with it. - Search: An unused
TaskHandle
returned for online and offline search engines can now be omitted instead of excluding it with _ = ...
.
API Changes
- Removed beta status for scooter transport mode.
- Search: Deprecated the following
Contact
fields landlinePhoneNumbers
, mobilePhoneNumbers
, emailAddresses
, websiteAddresses
. Use these newly introduced fields instead: landlinePhones
, mobilePhones
, emails
, websites
. Each holds a list of newly created classes LandlinePhone
, MobilePhone
, EmailAddress
, WebsiteAddress
- containing a string representation of the item and a list of related PlaceCategory
values. - Deprecated all methods to set the maximum tiles cache size on
MapViewLite
. Use SDKOptions.cacheSizeInBytes
instead. This option can be set from plist
file or programmatically. The default cache size is 256 MB. - The
SDKNativeEngine
now locks access to the map data cache. When another instance of SDKNativeEngine
is instantiated with the same access key id then now an exception is thrown. -
Maneuver
: Deprecated roadName
, roadNameLanguageCode
, roadNumber
, nextRoadName
, nextRoadNameLanguageCode
, nextRoadNumber
. Added instead RoadTexts
with roadTexts
and nextRoadTexts
and LocalizedText
and LocalizedTexts
.
Resolved Issues
- Fixed:
MapOverlay
views may not be fully visible when the map is moved.
Known Issues
- A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account. - When
SDKOptions
is created before initialization of SDKNativeEngine
it may contain a corrupted path.
Version 4.5.4.0
Highlights
- The supported device specifications have been fine tuned and contain now more granular details on the supported devices. Details can be found in the About section of the Developer's Guide for this edition.
- Added a sky box to
MapViewLite
. The effect is visible on the highest zoom levels with a big tilt.
New Features
- Extended walk routing options: Added
PedestrianOptions.walkSpeedInMetersPerSecond
property. Note that this feature is released as beta. By setting a walk speed you can calculate pedestrian routes specific for different walk profiles. - Searching for a
CategoryQuery
within a GeoCircle
or GeoBox
is no longer marked as a beta feature. - Added new map cache options to
SDKOptions
with SDKOptions.cacheSizeInBytes
and SDKOptions.persistentMapStoragePath
. Also available as key in plist (CacheSizeInBytes
, PersistentMapStoragePath
). With this you can control where to store cached map data and it also allows to specify the amount of data you want to reserve for caching.
API Changes
- Changed
PedestrianOptions(routeOptions, textOptions)
constructor to PedestrianOptions(routeOptions, textOptions, 1.0)
to support the new PedestrianOptions.walkSpeedInMetersPerSecond
property (see above).
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved. - A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account.
Version 4.5.3.0
New Features
- Added a
NoticeCode
that describes issues after a Route
was calculated. For example, when a route should avoid tunnels, but the only possible route needs to pass a tunnel, the Route
contains a notice that the requested avoidance of tunnels was violated. Therefore, it is recommended to always check a calculated Route
for possible violations. The NoticeCode
is part of a Notice
object. A list of possible Notice
objects can be accessed per Section
of a Route
. The list will be empty, when no violation occurred. - Added search for a
CategoryQuery
within a GeoCircle
or GeoBox
. Extended the existing CategoryQuery
constructors to accept GeoCircle
or GeoBox
. Note that this feature is currently in BETA state.
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved. - A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account.
Version 4.5.2.0
Highlights
- Added suppport for scooter route calculation with the new
ScooterOptions
. Note that this is a BETA feature. Using scooter routes for navigation is not yet supported.
New Features
- Added new read-only property to
MapPolyline
with geometry: GeoPolyline
.
API Changes
- Cache path to store map data is now unique per access key ID (which is unique per customer). The HERE SDK automatically appends the current version of the cache and the access key ID. If you want to keep existing cache data, it may be required to copy it from
<cache-root>
to <cache-root>/v1/<access-key-id>
, as the current version of the cache is "v1". - Deprecated
SDKNativeEngine.setAccessKey(access_key_id, access_key_secret)
. Use SDKNativeEngine.setAccessKeySecret(access_key_secret)
instead, in combination with setting the access key ID via SDKOptions
when constructing a new SDKNativeEngine
. - Deprecated
LocationUpdateDelegate
. Use the new LocationDelegate
instead. - Removed deprecated
GeoCircle
constructor that accepts single precision float type for radius.
Resolved Issues
- Fixed various deadlocks and crashes of
MapViewLite
, for example when callbacks are executed after the map view was already destroyed.
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved. - A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account.
Version 4.5.1.0
New Features
- Introduced
Maneuver.lengthInMeters
property to return the length of the maneuver. - Introduced
SectionTransportMode
enum and Section.getSectionTransportMode
property returning an instance of this type indicating now transport modes such as ferries. Section.getTransportMode
has been deprecated, use the newly introduced method instead. - Search: Introduced
SupplierReference
type and Details.references
property, which holds the list of supplier references to a place.
API Changes
-
MapPolygonLite
accepts now any list order: A GeoCoordinates
list does no longer need to be clockwise ordered when passed to constructor. If it's counter-clockwise, its order is reversed. - The strokes for
MapCircleLite
and MapPolygonLite
are no longer doubled. - Very sharp
MapPolygonLite
edges now have bevel joins instead of miter joins. - Deprecated
CameraLimits.ErrorCode.VALUE_OUTSIDE_LIMITS
, because it's unused.
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved. - A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account.
Version 4.5.0.0
Highlights
- Added route calculation for electric vehicles (EV). It's now possible to calculate the energy consumption per route section according to the given consumption model (supported for electric cars and trucks). Charging stations are automatically added to the calculated route as waypoints to ensure that the electric vehicle doesn't run out of energy along the way (supported for electric cars).
New Features
- Added
LogAppender
protocol to insert your own log class into the SDKNativeEngine
. This way you can log HERE SDK messages for various predefined log levels even on release builds. - Added new methods to calculate routes for electric vehicles (car and trucks are supported):
RoutingEngine.calculateRoute([Waypoint], EVCarOptions, CalculateRouteCallback)
, RoutingEngine.calculateRoute([Waypoint], EVTruckOptions, CalculateRouteCallback)
. - Added the following classes and fields to support EV routing (see above):
-
BatterySpecifications
- parameters that describe the electric vehicle's battery. -
ChargingConnectorAttributes
- details of the connector that is suggested to be used for charging. -
ChargingConnectorType
- enumeration of the available charging connector types. -
ChargingStation
- charging station data. -
ChargingSupplyType
- enumeration of available charging supply types. -
EVCarOptions
- options to specify how a route for an electric car should be calculated. -
EVConsumptionModel
- parameters specific for the electric vehicle, which are used to calculate energy consumption on a given route. -
EVDetails
- additional information that is available for electric vehicles. -
EVTruckOptions
- options to specify how a route for an electric truck should be calculated. -
PostActionType
- enumeration of available post action types. -
PostAction
- an action that must be done after arrival. -
RoutePlaceType
- shows whether the place on the route (such as departure or arrival) is a charging station or a regular place. -
Arrival.type
- the type of the arrival place. -
Arrival.chargeInKilowattHours
- battery charge at arrival. -
Arrival.chargingStation
- charging station data at arrival. -
Departure.type
- the type of the departure place. -
Departure.chargeInKilowattHours
- battery charge at departure. -
Departure.chargingStation
- charging station data at departure. -
Section.postActions
- actions that must be done after the arrival. -
Section.evDetails
- additional section information that is available for electric vehicles.
API Changes
- The minimum supported iOS version was increased from 12.0 to 12.4.
- Removed deprecated camera limits methods, use the previously introduced
setBearingRange(AngleRange value)
, getBearingRange()
instead: double getMaxBearing()
double getMinBearing()
void setMaxBearing(double)
void setMinBearing(double)
- Removed deprecated camera API:
-
GeoBox getBoundingRect()
, use the previously introduced getBoundingBox()
instead
- Removed deprecated pick map items methods, use the previously released counterparts instead:
public func pickMapItems(at viewCoordinates: Point2D, radius: Float, completionHandler: @escaping (PickMapItemsResultLite?) -> Void)
public func pickMapItems(at viewCoordinates: Point2D, radius: Float, callback: PickMapItemsCallbackLite)
- Removed deprecated map items styling methods, use the previously released counterparts
setXYInPixels()
instead: void MapPolygonStyle.setStrokeWidth(float)
float MapPolygonStyle.getStrokeWidth()
void MapCircleStyle.setStrokeWidth(float)
float MapCircleStyle.getStrokeWidth()
void MapPolylineStyle.setWidth(float)
float MapPolylineStyle.getWidth()
- Removed a deprecated
GeoCoordinates
constructor, use the previously introduced counterpart instead. - Removed a deprecated
Anchor2D
constructor, use the previously introduced counterpart instead. - Renamed
AngleRangeLite
to AngleRange
.
Resolved Issues
- Fixed: A category search along a route will crash when the
GeoCorridor.polyline
list parameter is empty.
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved. - A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route. - The
jamFactor
indicating TrafficSpeed
is currently calculated linear without taking road types and other parameters into account.
Version 4.4.6.0
Highlights
- This release focuses on overall stability and performance improvements.
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved. - A category search along a route will crash when the
GeoCorridor.polyline
list parameter is empty. - A
Maneuver.polyline
list of GeoCoordinates
has only one element for the last maneuver of a route.
Version 4.4.5.0
New Features
- Added
GeoBox.containing(geoCoordinates: [GeoCoordinates]) -> GeoBox?
to construct a GeoBox
from a list of Geocoordinates
. - A
CategoryQuery
can now be created from a single PlaceCategory
with the additional constructor CategoryQuery(_ category: PlaceCategory, filter: String, areaCenter: GeoCoordinates)
.
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved. - A category search along a route will crash when the
GeoCorridor.polyline
list parameter is empty.
Version 4.4.4.0
Resolved Issues
- Fixed issue with empty IDs for reverse geocoding results: IDs of place results are no longer empty strings and contain now a valid ID.
- Route calculation: When no truck route is found due to incompatible truck restrictions, the reason is now logged and
RoutingError.noRouteFound
error is returned. For example, a log may contain: "Potential route would violate truck restriction:{"maxHeight":400}".
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved.
Version 4.4.3.0
New Features
- Certain areas can now be excluded from route calculation with
AvoidanceOptions
that contain an avoidAreas
list holding GeoBox
items which routes should not cross. - Added optional
Suggestion.href
to get a direct link to discover more details. It is available when the suggestion result type is category or chain. - Added
RoadFeatures.difficultTurns
enum value. Note that it is valid only for truck transport mode. - Added
MapError.invalidState
enum value which can be raised when a map scene is in an invalid state after a MapView
was destroyed. - Added a new
GeoCorridor
constructor with radiusInMeters
as integer type - as replacement for the deprecated constructor with radiusInMeters
as double type, see below.
Deprecated
- Deprecated
GeoCorridor
constructor with radiusInMeters
as double type. Use the newly introduced GeoCorridor
constructor with radiusInMeters
as integer type instead, see above.
Resolved Issues
- Fixed:
SearchEngine
: Place.getId()
is empty for reverse geocoding results. - Fixed: Map gestures can be slow when there's no internet connection and the map is using cached map data.
Known Issues
-
MapOverlay
views may not be fully visible when the map is moved.
Version 4.4.2.0
New Features
- Added
Place.geoCoordinates
to get the GeoCoordinates
of a Place
. Note that only Place
instances retrieved from a Suggestion
result may not contain geographic coordinates, hence the returned value is optional. - Added departure/arrival information to the
Section
of a Route
: - Added
Departure
class with the following fields: waypointIndex
originalCoordinates
mapMatchedCoordinates
- Added
Arrival
class with the following fields: waypointIndex
originalCoordinates
mapMatchedCoordinates
- Added
Section.departure
property. - Added
Section.arrival
property.
- Added
Suggestion.type
to get the new SuggestionType
enum that indicates whether this Suggestion
is a place, a chain like a store, restaurant or bussiness chain - or a category
.
Deprecated
- Deprecated
Place.coordinates
, use Place.geoCoordinates
instead. Note that only Place
instances retrieved from a Suggestion
result may not contain geographic coordinates, hence the returned value has become optional.
Resolved Issues
- Fixed: When the
Route
used to search along the route is too long, now a proper error is returned with SearchError.ROUTE_TOO_LONG
. - Fixed: For places that are obtained from the
Suggestion
class, the geographic coordinates always contain a latitude and a longitude equal to 0. An additional places request is needed to obtain the coordinates.
Known Issues
-
SearchEngine
: Place.getId()
is empty for reverse geocoding results. - Map gestures can be slow when there's no internet connection and the map is using cached map data.
Version 4.4.1.0
New Features
- Traffic flows can now be identified along a
Route
. Introduced TrafficSpeeds
class to provide traffic speed information over a Section
polyline. The Section.trafficSpeeds
property returns an array of TrafficSpeeds
's which covers the Section
polyline. - Added
SearchError.queryTooLong
and SearchError.filterTooLong
. These errors will appear if the search query or search filter is too long (over 300 characters). - Added
Route.transportMode
which returns the original TransportMode
as requested for the route calculation.
Known Issues
-
SearchEngine
: Place.getId()
is empty for reverse geocoding results. - Map gestures can be slow when there's no internet connection and the map is using cached map data.
- For places that are obtained from the
Suggestion
class, the geographic coordinates always contain a latitude and a longitude equal to 0. An additional places request is needed to obtain the coordinates.
Version 4.4.0.2
New Features
- Search for places along a route: Added the
GeoCorridor
option to filter TextQuery
results when performing an asynchronous search request along a route with the method TextQuery(query, in: corridorArea, near: areaCenter)
. - Search for places by category along a route: Added the
CategoryQuery
structure that accepts the GeoCorridor
option in its constructors with the filter
parameter CategoryQuery(_ : [PlaceCategory], filter: String, in: GeoCorridor)
and without the filter
parameter CategoryQuery(_ : [PlaceCategory], in: GeoCorridor)
to enable category search along a route. This feature is in BETA state. - Added to the
Details
class the method: getPrimaryCategories() -> [PlaceCategory]
to get a place category from the result of a search query. - Added a new font with Chinese, Japanese and Korean characters. The font occupies
1.7MB
and can be optionally removed to save space: Open the heresdk.framework
file and remove the following files: style/fonts/DroidSansFallback.woff
style/fonts/DroidSansFallback.license
API Changes
- Changed the rendered resolution of map tiles from
256x256
to 512x512
pixels. Now, all zoom levels are shifted by -1
. I.e. users should subtract 1 from their default zoom levels in their apps or custom zoom level limits. - Reduced the rotation sensitivity of the
Pinch Rotate
gesture. Now, it is easier to zoom in on the map without rotating it.
Resolved Issues
- Fixed: Map labels are not rendered in Chinese, Japanese and Korean. Now, Map labels are rendered in Chinese, Japanese and Korean.
Known Issues
-
SearchEngine
: Place.getId()
is empty for reverse geocoding results. - Map gestures can be slow when there's no internet connection and the map is using cached map data.
- For places that are obtained from the
Suggestion
class, the geographic coordinates always contain a latitude and a longitude equal to 0. An additional places request is needed to obtain the coordinates.
Version 4.3.4.0
Resolved Issues
- Fixed visual design of the disputed borders for the
normalDay
and hybridDay
map styles.
Known Issues
-
SearchEngine
: Place.getId()
is empty for reverse geocoding results. - Map labels are not rendered in Chinese.
- Map gestures can be slow when there's no internet connection and the map is using cached map data.
Version 4.3.3.0
New Features
- Added the method
search(placeIdQuery query: PlaceIdQuery, languageCode: LanguageCode?, completion: PlaceIdSearchCompletionHandler) -> TaskHandle
to perform an asynchronous request to search for a place based on its ID and language code. - Added the possibility to filter
AddressQuery
results by the CountryCode
with the method AddressQuery(query: String, near: GeoCoordinates, inCountries: [CountryCode])
. - Added the possibility to filter
TextQuery
results by the CountryCode
with the method TextQuery(query: String, near: GeoCoordinates, inCountries: [CountryCode])
. - Added the ability to get the currently used tile cache size with the method
var tilesCacheSize: UInt32
.
Deprecated
- Deprecated the method
search(placeIdQuery query: PlaceIdQuery, completion: PlaceIdSearchCompletionHandler) -> TaskHandle
. Use the newly introduced search(placeIdQuery query: PlaceIdQuery, languageCode: LanguageCode?, completion: PlaceIdSearchCompletionHandler) -> TaskHandle
method instead.
Resolved Issues
- Fixed: Route scene is not displayed fully for the longest routes. Now, the route scene is displayed fully for the longest routes.
- Fixed: Missing continent labels at maximum zoom out level. Now, continent labels are rendered at the maximum zoom out level.
Known Issues
-
SearchEngine
: Place.getId()
is empty for reverse geocoding results. - Map labels are not rendered in Chinese.
Version 4.3.2.0
New Features
- Added updated support for the
SDKOptions.cachePath
handling. If SDKOptions.cachePath
is not set, it will be assigned a default path [to be precise: <Application Home>/Library/Caches
].
Resolved Issues
- Fixed: The
Authentication
protocol was not always called on the main thread. Now the protocol is guaranteed to be always called on the main thread.
Known Issues
-
SearchEngine
: Place.Id
is empty for reverse geocoding results. - Map labels are not rendered in Chinese.
Version 4.3.1.0
Resolved Issues
- Fixed:
AvoidanceOptions
will be ignored when calculating truck routes. Now, AvoidanceOptions
are considered when calculating truck routes.
Known Issues
-
SearchEngine
: Place.Id
is empty for reverse geocoding results.
Version 4.3.0.0
New Features
- Added the
GeoCoordinates(latitude: Double, longitude: Double, altitude: Double)
constructor. - Added the
GeoCircle()
constructor that accepts type double
for the radius
parameter. - Added support for map circles: Added the
GeoPolygon(@NonNull GeoCircle geoCircle)
constructor, which can then be used to create a MapPolygon
that has the shape of a circle. - Added the
Anchor2D()
constructor that accepts type double
for the horizontal and vertical parameters. - Added the function
MapViewLite.pickMapItems(at viewCoordinates: Point2D, radius: Double, callback: PickMapItemsCallbackLite)
to pick map items from the MapView. - Added the following to the
com.here.sdk.search
package: -
AddressQuery
to specify an address query. -
CategoryQuery
to specify a query by categories. -
Contact
that represents the contact information. -
IdQuery
to specify an id query. -
OpeningHours
to represent the information on opening hours. -
Place
to represent a location object, such as a country, a city, a point of interest(POI) etc. -
PlaceCategory
to define a set of most commonly used categories. -
ScheduleDetails
to encapsulate schedule details complying with the iCalendar specification. -
Suggestion
to represent a suggestion of an address or a place based on a query. -
TextQuery
option to specify a text query.
- Added the following methods to
SearchEngine
: -
search(idQuery query: IdQuery, completion: IdSearchCompletionHandler) -> TaskHandle
to search for a place based on its ID. -
search(_ query: CategoryQuery, options: SearchOptions, completion: SearchCompletionHandler) -> TaskHandle
to search for places based on a list of categories.
- Added the structure
Details
to the Place
object. It contains following fields: -
categories
for the list of categories assigned to the place. -
contacts
for the contact list of the place. -
openingHours
for the list of information on the opening hours of the place.
- Added the following protocols to manage tile caching:
-
maxTilesCacheSize
property to set the maximum size available for tiles caching when creating a map view in a storyboard. -
init(maxTilesCacheSizeInBytes: UInt32), init(frame: CGRect, maxTilesCacheSizeInBytes: UInt32), init(frame: CGRect, withSdkEngine sdkEngine: SDKNativeEngine, maxTilesCacheSizeInBytes: UInt32)
initializers to set the maximum size available for tiles caching when creating a map view by hand. -
clearTilesCache()
to remove all cached tiles from the persistent memory.
- Added the optional parameter
public init(accessKeyId: String, accessKeySecret: String, cachePath: String, authenticationPreferences: AuthenticationPreferences = AuthenticationPreferences.useServerTime)
of type AuthenticationPreferences
to the SDKOptions
constructor to use the local system time for authentication instead of getting it from the server.
API Changes
- Changed type of
GeoCoordinates.altitude
from float
to double
. - Changed the return type of
Route.durationInSeconds
from Int64
to Int32
. - Changed the return type of
Route.trafficDelayInSeconds
from Int64
to Int32
. - Changed the return type of
Section.durationInSeconds
from Int64
to Int32
. - Changed the return type of
Section.trafficDelayInSeconds
from Int64
to Int32
. - Changed the return type of
SectionProgress.remainingDurationInSeconds
from Int64
to Int32
. - Changed the return type of
SectionProgress.trafficDelayInSeconds
from Int64
to Int32
. - Changed the method in the
PanDelegate
from onPan(state: GestureState, origin: Point2D, translation: Point2D, velocity: Float) -> Void
to onPan(state: GestureState, origin: Point2D, translation: Point2D, velocity: Double) -> Void
. - Changed the method in the
PinchRotateDelegate
from onPinchRotate(state: GestureState, pinchOrigin: Point2D, rotationOrigin: Point2D, twoFingerDistance: Float, rotation: Angle) -> Void
to onPinchRotate(state: GestureState, pinchOrigin: Point2D, rotationOrigin: Point2D, twoFingerDistance: Double, rotation: Angle) -> Void
. - Changed the method in the
TwoFingerPanDelegate
from onTwoFingerPan(state: GestureState, origin: Point2D, translation: Point2D, velocity: Float) -> Void
to onTwoFingerPan(state: GestureState, origin: Point2D, translation: Point2D, velocity: Double) -> Void
. - Removed the
MapMatchedWaypoint
class. - Removed the
RouteRestrictions
struct. - Removed the
SideOfStreet
enumeration. - Removed the
Route.mapMatchedWaypoints
property. - Removed the protocol
Searchable
. - Replaced
Suggestion.searchable
with Suggestion.place
. - Removed the
AutosuggestEngine
, GeocodingEngine
, and ReverseGeocodingEngine
. Their functionalities are now integrated into the SearchEngine
class: - Use
SearchEngine.search(textQuery:options:completion:)
to search for Places
. - Use
SearchEngine.search(addressQuery:options:completion:)
to geocode an address to a geographic coordinate. Now, geocoding is limited to GeoCoordinates
. GeoBox
and GeoCircle
are dropped. - Use
SearchEngine.search(coordinates:options:completion:)
to reverse geocode a geographic coordinate to an address. - Use
SearchEngine.search(categoryQuery:options:completion:)
to search for Places
based on a list of categories. - Use
SearchEngine.suggest(textQuery:options:completion:)
to search for auto suggested Place
results.
- Replaced
SearchCategory
with SearchEngine.search(_ query: CategoryQuery, options: SearchOptions, completion: SearchCompletionHandler) -> TaskHandle
. - Replaced the
CategoryId
class with the PlaceCategory
class. - Replaced the
SearchResult
class with the Place
class. - Replaced the
SearchEngine.CompletionHandler
, GeocodingEngine.CompletionHandler
, and the ReverseGeocodingEngine.CompletionHandler
by the SearchCompletionHandler
class. - Replaced the
AutosuggestEngine.CompletionHandler
with the the SuggestCompletionHandler
class. - Removed the following classes and their functionalities:
AutosuggestResultType
GeocodingResult
- Removed the
AutosuggestResult
class. Its functionalities have now been moved to the Suggestion
class. - Removed the field
textformat
from the SearchOptions
class. - Removed the function
defaultOptions: SearchOptions
. - Removed the following constructors from the
SearchEngine
: -
init(defaultOptions: HLSSearchOptions)
. -
init(_ sdkEngine: SDKNativeEngine, defaultOptions: HLSSearchOptions)
.
- Removed the
BicycleOptions
from the transport mode options for route calculation. -
OptimizationMode.shortest
is no longer supported and now automatically converted to OptimizationMode.fastest
for the transport mode option TransportMode.pedestrian
.
Deprecated
- Deprecated the
GeoCoordinates(latitude: Double, longitude: Double, altitude: Float)
constructor. Use the GeoCoordinates(latitude: Double, longitude: Double, altitude: Double)
constructor instead. - Deprecated the function
MapViewLite.pickMapItems(at viewCoordinates: Point2D, radius: Float, callback: PickMapItemsCallbackLite)
. Use the function MapViewLite.pickMapItems(at viewCoordinates: Point2D, radius: Double, callback: PickMapItemsCallbackLite)
instead. - Deprecated the
GeoCircle()
constructor that accepts type float
for the radius
parameter. Use the GeoCircle()
constructor that accepts type double
for the radius
parameter instead. - Deprecated the
Anchor2D()
constructor that accepts type float
for the horizontal and vertical parameters. Use the Anchor2D()
constructor that accepts type double
for the horizontal and vertical parameters instead.
Resolved Issues
- Fixed: Engines will not operate when the time of the device is incorrect. Now, the timestamp of the device is authenticated to enable the engines to operate.
Known Issues
-
SearchEngine
: Place.Id
is empty for reverse geocoding results. -
AvoidanceOptions
will be ignored when calculating truck routes.
Version 4.2.2.0
New Features
- Added a
TileServerProvider
interface that allows to provide a custom implementation to generate dynamic URLs for a RasterLayer
. This can be useful to set different raster layer sources based on the region in the world. Added SimpleTileServerProvider
as a convenience implementation that sets a static tile URL provider.
API Changes
- Changed constructor for
RasterLayer
to allow setting a TileServerProvider
(see above).
Known Issues
- Engines will not operate when the device's time is wrong. Also, the map will not be able to show any (vector) tiles.
Deprecated
- The field
Camera.boundingRect
is deprecated. Use the newly introduced field Camera.boundingBox
instead.
Version 4.2.1.0
New Features
- Added
CameraLite.orbitBy(_ delta: CameraLite.OrientationUpdate, around origin: Point2D)
to orbit the camera around a specified point. - Added
CameraLite.zoomBy(_ factor: Double, around origin: Point2D)
to zoom the camera around a specified point relative to the given factor. - Added
Authentication
API to obtain a valid token that can be used to initiate queries to HERE REST APIs.
API Changes
- Replaced enum type
RoadType.street
with RoadType.rural
and RoadType.urban
.
Known Issues
- Engines will not operate when the device's time is wrong. Also, the map will not be able to show any (vector) tiles.
Version 4.2.0.0
Highlights
- Added Swift module stability for the HERE SDK XCFramework to allow forward-compatibility with future Swift versions. The current framework is built using Swift 5.1.2, but it should be also readable for future Swift compiler versions.
New Features
- Added the HERE logo watermark placement functionality with the enum
WatermarkPlacement
and method MapViewLite.setWatermarkPosition(placement: WatermarkPlacement, bottomCenterMargin: UInt32)
.
API Changes
- Changed all class names within the
MapViewLite
package to have a 'Lite' suffix. If any class name already contained 'Lite' it was moved consistently to the end of the name. - Changed completion handlers to nested types in the following methods:
-
SearchEngine
: -
SearchEngine.search(at coordinates: GeoCoordinates, query: String, options: SearchOptions, completion: SearchCallback)
to SearchEngine.search(at coordinates: GeoCoordinates, query: String, options: SearchOptions, completion: SearchEngine.CompletionHandler)
.
-
AutosuggestEngine
: -
AutosuggestEngine.suggest(at coordinates: GeoCoordinates, query: String, options: AutosuggestOptions, completion: AutosuggestCallback)
to AutosuggestEngine.suggest(at coordinates: GeoCoordinates, query: String, options: AutosuggestOptions, completion: AutosuggestENgine.CompletionHandler)
.
-
ReverseGeocodingEngine
: -
ReverseGeocodingEngine.searchAddress(coordinates: GeoCoordinates, options: ReverseGeocodingOptions, completion: ReverseGeocodingCallback)
to ReverseGeocodingEngine.searchAddress(at coordinates: GeoCoordinates, query: String, options: ReverseGeocodingOptions, completion: ReverseGeocodingEngine.CompletionHandler)
.
-
GeocodingEngine
: -
GeocodingEngine.searchLocations(coordinates: GeoCoordinates, options: GeocodingOptions, completion: GeocodingCallback)
to GeocodingEngine.searchLocations(at coordinates: GeoCoordinates, query: String, options: GeocodingOptions, completion: GeocodingEngine.CompletionHandler)
.
-
TrafficEngine
: -
TrafficEngine.queryForIncidents(in boxArea: GeoBox, options: IncidentQueryOptions, completion: QueryForIncidentsCallback)
to TrafficEngine.queryForIncidents(in boxArea: GeoBox, options: IncidentQueryOptions, completion: TrafficEngine.CompletionHandler)
.
- Removed the
balanced
identifier from the OptimizationMode
enum for route calculation. - Renamed
RouteLeg
to Section
- Renamed
Route.legs
to Route.sections
. - Renamed
RouteProgress.routeLegIndex
to RouteProgress.sectionIndex
. - Renamed
MapMarkerResource
to MapImageLite
. - Renamed
PickMapItemResult
to PickMapItemResultLite
. - Renamed
CameraObserver
to CameraObserverLite
. - Renamed member
geoBox
to boundingBox
in the following data structures: -
SearchResult.geoBox
to SearchResult.boundingBox
. -
AutosuggestResult.geoBox
to AutosuggestResult.boundingBox
. -
GeocodingResult.geoBox
to GeocodingResult.boundingBox
. -
OpenSearchEngine.Result.geoBox
to OpenSearchEngine.Result.boundingBox
. -
OpenGeocodingEngine.Result.geoBox
to OpenGeocodingEngine.Result.boundingBox
.
- Renamed
SearchResult.geoCoordinates
to SearchResult.coordinates
.
Resolved Issues
- Fixed issue with incorrect pixel width set for rendering a
MapPolyline
on the map. Now, a MapPolyline
can have its stroke width set to physical pixels.
Known Issues
- Engines will not operate when the device's time is wrong. Also, the map will not be able to show any (vector) tiles.
Version 4.1.6.0
Highlights
- Updated binary distribution bundle to use Apple's new XCFramework format. As a benefit, it is no longer necessary to use
lipo
to remove undesired x86 architectures for distribution. - The minimum supported OS was raised from iOS 11 to iOS 12 as the market share for devices running iOS 11 is below 3%.
New Features
- Added the new fields
mainLanguageCode
and fallbackLanguageCode
to specify the desired map language via MapSceneConfig
when loading a map scene. - Added a
Color
class that encapsulates common color values. - Added
Route.trafficDelayInSeconds
and RouteLeg.trafficDelayInSeconds
.
API Changes
- Custom route options moved to
CustomRoutingEngine
as nested types: -
CustomCarOptions
moved to CustomRoutingEngine.CarOptions
. -
CustomBicycleOptions
moved to CustomRoutingEngine.BicycleOptions
. -
CustomPedestrianOptions
moved to CustomRoutingEngine.PedestrianOptions
. -
CustomTruckOptions
moved to CustomRoutingEngine.TruckOptions
. -
CustomTruckSpecifications
moved to CustomRoutingEngine.TruckSpecifications
.
-
MapCircle
center latitude is now limited to the range [85S, 85N]. Map circle's radius can't exceed the range [89S, 89N] to prevent crossing a pole, otherwise it is clamped. - Changed types for
Incident.startTimestamp
, Incident.stopTimestamp
and Incident.updateTimestamp
from Long
to Date
. - Changed field
coordinates
to geoCoordinates
in SearchResult
. - Changed the occurrences for the argument label
callback
to completion
for the methods in the following classes; -
AutosuggestEngine
: -
AutosuggestEngine.suggest(at: GeoCoordinates, query: String, options: AutosuggestOption, callback: AutosuggestCallback)
to AutosuggestEngine.suggest(at: GeoCoordinates, query: String, options: AutosuggestOption, completion: AutosuggestCallback)
. -
AutosuggestEngine.suggest(at: GeoCoordinates, query: String, callback: AutosuggestCallback)
to AutosuggestEngine.suggest(at: GeoCoordinates, query: String, completion: AutosuggestCallback)
. -
AutosuggestEngine.suggest(in: GeoBox, query: String, options: AutosuggestOption, callback: AutosuggestCallback)
to AutosuggestEngine.suggest(in: GeoBox, query: String, options: AutosuggestOption, completion: AutosuggestCallback)
. -
AutosuggestEngine.suggest(in: GeoBox, query: String, callback: AutosuggestCallback)
to AutosuggestEngine.suggest(in: GeoBox, query: String, completion: AutosuggestCallback)
. -
AutosuggestEngine.suggest(in: GeoCircle, query: String, options: AutosuggestOption, callback: AutosuggestCallback)
to AutosuggestEngine.suggest(in: GeoCircle, query: String, options: AutosuggestOption, completion: AutosuggestCallback)
. -
AutosuggestEngine.suggest(in: GeoCircle, query: String, callback: AutosuggestCallback)
to AutosuggestEngine.suggest(in: GeoCircle, query: String, completion: AutosuggestCallback)
.
-
GeocodingEngine
: -
GeocodingEngine.searchLocation(in: GeoBox, query: String, options: GeocodingOption, callback: GeocodingCallback)
to GeocodingEngine.searchLocation(in: GeoBox, query: String, options: GeocodingOption, completion: GeocodingCallback)
. -
GeocodingEngine.searchLocation(in: GeoBox, query: String, callback: GeocodingCallback)
to GeocodingEngine.searchLocation(in: GeoBox, query: String, completion: GeocodingCallback)
. -
GeocodingEngine.searchLocation(in: GeoCircle, query: String, options: GeocodingOption, callback: GeocodingCallback)
to GeocodingEngine.searchLocation(in: GeoCircle, query: String, options: GeocodingOption, completion: GeocodingCallback)
. -
GeocodingEngine.searchLocation(in: GeoCircle, query: String, callback: GeocodingCallback)
to GeocodingEngine.searchLocation(in: GeoCircle, query: String, completion: GeocodingCallback)
.
-
ReverseGeocodingEngine
: -
ReverseGeocodingEngine.searchAddress(coordinates: GeoCoordinates, options: ReverseGeocodingOptions, callback: ReverseGeocodingCallback)
to ReverseGeocodingEngine.searchAddress(coordinates: GeoCoordinates, options: ReverseGeocodingOptions, completion: ReverseGeocodingCallback)
. -
ReverseGeocodingEngine.searchAddress(coordinates: GeoCoordinates, callback: ReverseGeocodingCallback)
to ReverseGeocodingEngine.searchAddress(coordinates: GeoCoordinates, completion: ReverseGeocodingCallback)
.
-
SearchEngine
: -
SearchEngine.search(at: GeoCoordinates, query: String, options: SearchOptions, callback: SearchCallback)
to SearchEngine.search(at: GeoCoordinates, query: String, options: SearchOptions, completion: SearchCallback)
. -
SearchEngine.search(at: GeoCoordinates, query: String, callback: SearchCallback)
to SearchEngine.search(at: GeoCoordinates, query: String, completion: SearchCallback)
. -
SearchEngine.search(in: GeoBox, query: String, options: SearchOptions, callback: SearchCallback)
to SearchEngine.search(in: GeoBox, query: String, options: SearchOptions, completion: SearchCallback)
. -
SearchEngine.search(in: GeoBox, query: String, callback: SearchCallback)
to SearchEngine.search(in: GeoBox, query: String, completion: SearchCallback)
. -
SearchEngine.search(in: GeoCircle, query: String, options: SearchOptions, callback: SearchCallback)
to SearchEngine.search(in: GeoCircle, query: String, options: SearchOptions, completion: SearchCallback)
. -
SearchEngine.search(in: GeoCircle, query: String, callback: SearchCallback)
to SearchEngine.search(in: GeoCircle, query: String, completion: SearchCallback)
. -
SearchEngine.search(at: GeoCoordinates, categoryList: [CategoryId], options: SearchOptions, callback: SearchCallback)
to SearchEngine.search(at: GeoCoordinates, categoryList: [CategoryId], options: SearchOptions, completion: SearchCallback)
. -
SearchEngine.search(at: GeoCoordinates, categoryList: [CategoryId], callback: SearchCallback)
to SearchEngine.search(at: GeoCoordinates, categoryList: [CategoryId], completion: SearchCallback)
. -
SearchEngine.search(in: GeoBox, categoryList: [CategoryId], options: SearchOptions, callback: SearchCallback)
to SearchEngine.search(in: GeoBox, categoryList: [CategoryId], options: SearchOptions, completion: SearchCallback)
. -
SearchEngine.search(in: GeoBox, categoryList: [CategoryId], callback: SearchCallback)
to SearchEngine.search(in: GeoBox, categoryList: [CategoryId], completion: SearchCallback)
. -
SearchEngine.search(in: GeoCircle, categoryList: [CategoryId], options: SearchOptions, callback: SearchCallback)
to SearchEngine.search(in: GeoCircle, categoryList: [CategoryId], options: SearchOptions, completion: SearchCallback)
. -
SearchEngine.search(in: GeoCircle, categoryList: [CategoryId], callback: SearchCallback)
to SearchEngine.search(in: GeoCircle, categoryList: [CategoryId], completion: SearchCallback)
.
-
TrafficeEngine
: -
TrafficeEngine.queryForIncidents(in : GeoBox, options: IncidentQueryOptions, callback: QueryForIncidentsCallback)
to TrafficeEngine.queryForIncidents(in : GeoBox, options: IncidentQueryOptions, completion: QueryForIncidentsCallback)
.
- Removed
trafficMode
option from RouteOptions
. Traffic delay is now enabled by default. - Renamed
Route.shape
to Route.polyline
. - Renamed
RouteLeg.shape
to RouteLeg.polyline
. - Renamed
Maneuver.shape
to Maneuver.polyline
. - Changed type for
GeocodingOptions.maxItems
from UInt32
to Int32
. - Changed the maximum possible number of route alternatives for the method
RouteOptions.alternatives
from 9
to 6
. - Changed the draw order behavior for
MapPolylines
, MapCircles
and MapPolygons
. The draw order is now limited by 1000
to avoid conflicts with regular map data like labels or building footprints. The draw order should be mainly used to adjust the stack order of objects of the same type. - Renamed
WaypointType.stopOver
to WaypointType.stopover
. - Renamed
Route.travelTimeInSeconds
to Route.durationInSeconds
and changed the returned type from Int32
to Int64
. Same for RouteLeg
. - Removed
Route.baseTimeInSeconds
and Route.trafficTimeInSeconds
. Same for RouteLeg
. Use Route.trafficDelayInSeconds
instead.
Resolved Issues
- Fixed issue with map data not being localized. See the new fields added to
MapSceneConfig
above to set a LanguageCode
. - Fixed issue with kinetic panning triggered unnecessarily on the iOS emulator. Now, kinetic panning is triggered only when the mouse button is released at the end of the gesture.
- Fixed issue with error handling when loading custom map styles. Now, loading a map returns an invalid scene error if the YAML file passed does not exist and is incorrect or has no protocol specified.
- Fixed issue with traffic flow missing at a specific zoom level. Now, traffic flow is displayed at all zoom levels.
Version 4.1.5.0
New Features
- Added kinetic panning to the map ('slippy map'). The map will now smoothly animate along the last direction after a user stops panning. It can be disabled together with the pan gesture.
-
PanGestureHandler.onPan()
is now called with GestureState.cancel
for the first touch after GestureState.end
to stop any kinetic movement that is still in progress. - Added
Maneuver.roadNumber
and Maneuver.nextRoadNumber
to get the current road number and the next road number. - Added lambda notation / closure support when searching for
SearchCategory
.
API Changes
- Removed option
notImplementedYet
from EngineInstantiationErrorCode
enum. - Renamed
EngineInstantiationErrorCode
enum to InstantiationErrorCode
. - Renamed
EngineInstantiationError
to InstantiationError
. - Renamed
Location.timestampInMilliseconds
to Location.timestamp
. - Changed type
Location.timestamp
from Long
to Date
. - Removed field
MapMatchedWaypoint.mapMatchedRoadName
. - Changed
CalculateRouteCallback
type from protocol to typealias. - Route options moved to
RoutingEngine
as nested types: -
CarOptions
moved to RoutingEngine.CarOptions
. -
BicycleOptions
moved to RoutingEngine.BicycleOptions
. -
PedestrianOptions
moved to RoutingEngine.PedestrianOptions
. -
TruckOptions
moved to RoutingEngine.TruckOptions
. -
TruckSpecifications
moved to RoutingEngine.TruckSpecifications
.
- Changed
CalculateRouteCallback
type from protocol
to a typealias
function. - Removed
MapMatchedWaypoint.mapMatchedRoadName
.
Known Issues
- Map data may not be localized based on the device's language.
Resolved Issues
- Optimized the HERE SDK for publishing to Apple's App Store.
Version 4.1.4.0
Highlights
- Xcode 11.2.1 and Swift 5.1.2 are now supported as minimum requirement.
- Added new tutorials to the Developer's Guide that show how to implement smooth Move-To-XY animations and animated map gestures for zoom in/out and kinetic panning.
New Features
- Added
Maneuver.roadName
and Maneuver.nextRoadName
to get the current road name and the next road name. - Added the method
CameraLimits.getMaxTiltForZoomLevel()
for checking the tilt limit at a specific zoom level. The maximum tilt depends on the current zoom level; setting a new zoom level will potentially change the tilt angle.
API Changes
- Renamed
MapScene
to MapLiteScene
. - Renamed
Instruction
to Maneuver
. - Renamed
RouteTextOptions.languages
to RouteTextOptions.language
as it accepts not more than one language. - Moved
Route.transportMode
to RouteLeg.transportMode
. - Moved
LoadSceneCallback
to MapLiteScene
. The callback changed from a protocol to a typealias
. - Renamed
SceneError
to ErrorCode
and moved it to MapLiteScene
. - Renamed
CameraLimitsErrorCode
to ErrorCode
and moved it to CameraLimits
. - Renamed the following map objects:
-
MapPolygon
to MapLitePolygon
. -
MapPolyline
to MapLitePolyline
. -
MapCircle
to MapLiteCircle
. -
MapMarker
to MapLiteMarker
.
- Removed the constant
CameraLimits.maxTilt
.
Known Issues
- Map data may not be localized based on the device's language.
Version 4.1.3.0
This release is mainly focused on stabilization of existing features, bug fixes and overall performance improvements.
Known Issues
- Swift 5.1 is not yet supported.
- Map data may not be localized based on the device's language.
Resolved Issues
- The draw order for raster tile layers now works relatively to other raster tile layers.
- Fixed outlines for map circles.
Version 4.1.2.0
New Features
- The
SearchEngine
can now be used to search for categories like 'restaurants' by setting a list of CategoryId
values.
API Changes
- Renamed
SearchItem
to SearchResult
. - Removed the field
SearchResult.href
. - Renamed the members:
-
AutosuggestResult.boundingRect
to AutosuggestResult.geoBox
. -
GeocodingResult.boundingRect
to GeocodingResult.geoBox
. -
SearchResult.boundingBox
to SearchResult.geoBox
.
- Renamed the members:
-
AutosuggestResult.geoCoordinates
to AutosuggestResult.coordinates
. -
GeocodingResult.geoCoordinates
to GeocodingResult.coordinates
.
Known Issues
- Swift 5.1 is not yet supported.
Version 4.1.1.0
New Features
-
SearchEngine
can now be used to search within a bounding rect for categories by setting a list of CategoryId
values. -
AutosuggestEngine
: - Added the option to search within a
GeoCircle
. - Added the possibility to request specific types (place, address and/or query) via
AutosuggestResultType
that can be set for the AutosuggestOptions
. - Added
TaskHandle
as a return value when calling AutosuggestEngine.suggest(...)
to cancel an ongoing call.
API Changes
- Changed
SearchOptions
to AutosuggestOptions
when consumed by AutosuggestEngine
. - Renamed
SearchItemCategory
to SearchCategory
. - Changed type
SearchCategory
from enum
to struct
. SearchCategory
now contains the following fields: -
id
(String, required): A unique category identifier. This contains the previous enum values as String. -
iconLink
(String, optional): A web link to the category icon. -
localizedName
(String, required): A localized name describing the category.
- Removed
Instruction.Direction
because this information is already available inside Instruction.action
. - Renamed
GeoBoundingRect
to GeoBox
. - Changed
GeoBoundingRect.intersects(geoBoundingRect: GeoBoundingRect)
to GeoBox.intersects(geoBox: GeoBox)
. - Changed
GeoBoundingRect.contains(geoBoundingRect: GeoBoundingRect)
to GeoBox.contains(geoBox: GeoBox)
.
Known Issues
- Swift 5.1 is not yet supported.
Version 4.1.0.0
New Features
- Added bounding box search for auto suggestions.
- Added an empty
MapStyle
that, for example, can be used together with opaque custom raster tile layers. - Added the following error values
httpError
, serverUnreachable
and invalidParameter
to extend error handling for Search, Autosuggest, Geocoding and ReverseGeocoding.
API Changes
- Renamed
PlaceAutosuggestResult
to AutosuggestResult
. - Renamed
EngineInstantiationError
enumeration to EngineInstantiationErrorCode
. - Renamed
CameraLimitsError
enumeration to CameraLimitsErrorCode
. - Renamed
InstantiationError
enumeration to InstantiationErrorCode
. - Unified the error type for
SearchEngine
, AutosuggestEngine
, GeocodingEngine
and ReverseGeocodingEngine
to be of type SearchError
. -
MapScene.setLayerState
is executed immediately now, it no longer takes a callback as an argument, but instead throws an error exception.
Known Issues
- Swift 5.1 is not yet supported.
Resolved Issues
- Fixed: Map polylines may disappear at certain zoom levels when zooming.
- Fixed: Parts of the horizontal and vertical lines of a polygon outline may not be drawn perfectly under certain conditions.
Deprecated
- The methods
CameraLimits.setMinBearing()
, CameraLimits.setMaxBearing()
, CameraLimits.getMinBearing()
and CameraLimits.getMaxBearing()
are deprecated. Use the newly introduced class AngleRange
instead.