V4
iOS Version Requirements
MapsIndoors iOS SDK v4 requires at least iOS 14 and Xcode 15.
[4.8.1] 2024-12-20
Fixed
Fixed bug where 2D models could sometimes be shown with the wrong dimensions, across certain zoom levels on Mapbox.
Fixed bug where the tiles would flash on Google Maps, when any location was selected.
Fixed memory leaks affecting instances of
MPMapControl
,MPMapboxProvider
andMPDisplayRule
.Fixed crashes, prone to happen when loading different MapsIndoors solutions in rapid succession.
[4.8.0] 2024-12-03
Changed
Improved ability to handle large solutions with many buildings and locations while using less memory.
Improved performance of loading solutions. Depending on the size and complexity of the solution, the loading time can be reduced by between 10% and 50%.
(MapsIndoorsMapbox only) Rendering of maps with many items are now more performant, both in terms of memory usage and speed, giving a smoother user experience.
[4.7.0] 2024-11-25
Added
labelStylePosition
added to DisplayRules. With this attribute it is possible to decide where the label is placed in relation to the icon. Possible values are defined inMPLabelPosition
as.right
,.left
,.top
and.bottom
. Prior to this labels have been shown to the right of the icon (corresponding toMPLabelPosition.right
); the new default isMPLabelPosition.bottom
to align across all MapsIndoors platforms, as the label positioning can now be set oin the MapsIndoors CMS.
Changed
New default positioning of labels relative to the icon is
MPLabelPosition.bottom
. If you want to keep the previous default ofMPLabelPosition.right
you can place the following line in your code after loading the MapsIndoors data withMPMapsIndoors.shared.load(apiKey:)
:MPMapsIndoors.shared.displayRuleFor(displayRuleType: .main).labelStylePosition = .right
.
[4.6.3] 2024-11-15
Fixed
LatLngBoundsConverter
had gone missing from MapsIndoorsGoogleMaps. It has been found and put in its proper place.Removed a potential crash affecting the React Native module and Flutter plugin on iOS when using a custom floor selector.
Changed
Updated to Mapbox Maps 11.7.0
[4.6.2] 2024-10-30
Fixed
A segmentation fault, likely to happen during loading of a solution.
[4.6.1] 2024-10-15
Fixed
The MapsIndoorsGoogleMaps CocoaPod now correctly specifies Google Maps as a static framework dependency.
[4.6.0] 2024-10-04
Added
Distribution via Swift Package Manager in addition to CocoaPods. Read how to install the Swift Package.
Changed
When installing MapsIndoors via CocoaPods the
post_install
modification is no longer needed, so that should be removed.Updated to Mapbox Maps 11.6.0
Fixed
The default floor selector receives fewer callbacks fo when to hide and show.
A rare issue of
MPMapsIndoors.share.load()
not returning or throwing an error.Applying a MapsIndoors map style would not work – until now.
[4.5.15] 2024-09-11
Fixed
Tiles will update correctly on floor changes.
[4.5.14] 2024-09-11
Fixed
Routes now tell correct distance and duration instead of 0.
Initial rendering of the map now happens consistently, as does showing initial floor selector.
[4.5.13] 2024-08-29
Fixed
Custom Floor Selectors are now properly informed about when to hide.
Removed many unnecessary map redraws.
Changed
Changes to Display Rule properties are now applied to the map without needing to call
refresh()
explicitly.
[4.5.12] 2024-08-20
Fixed
Flickering renders at high zoom levels when using Mapbox Maps is now gone.
Some camera events would not always be sent when using Mapbox 11; they do now.
Changed
Updated to Mapbox 10.18.2 and 11.5.2.
[4.5.11] 2024-08-01
Fixed
Fixed issue where MapsIndoors modules would not be reflected correctly on the map, when loading different solutions with the same
MPMapControl
instance.
[4.5.10] 2024-07-30
Fixed
Fixed issue where no MapsIndoors content may not appear on the Mapbox (v11) map.
Fixed issue with localized strings used by
MPDirectionsRenderer
would not work as intended.You can localize the text appearing in the route markers by providing localized strings in your application, for the following keys:
"miDirectionsEnter"
"miDirectionsExit"
"miDirectionsPark"
"miDirectionsLevel"
"miDirectionsNext"
[4.5.9] 2024-07-25
Fixed
Improved rendering performance slightly, both on Google Maps and Mapbox (v11).
Issue with with Mapbox console logs indicating missing images.
Crash caused by rapid mutation of any given location's position.
[4.5.8] 2024-07-08
Fixed
Issue with viewport calculation, sometimes leading to map content disappearing despite being in view (Only affects Mapbox v10 users).
Issue with the selected location on
MPMapControl
would not always be reflected on the map, unlessrefresh()
was invoked manually.
[4.5.7] 2024-06-21
Fixed
Issue with camera position changes would not reliably trigger an update of the drawn map content. Only affects Mapbox v11 users.
[4.5.6] 2024-06-20
Fixed
Issue with the set transition level not being respected on the MapsIndoors tiles when using
MPMapConfig.setMapsIndoorsTransitionLevel(zoom: ...)
. Only affects Mapbox v11 users.
[4.5.5] 2024-06-14
Fixed
Improved the consistency in the map's rendered state - whereas before, some camera movement would be needed to show the correct map state.
[4.5.4] 2024-06-13
Fixed
Potential crash when showing a map multiple times with new
MPMapControl
instances.
[4.5.3] 2024-06-12
Added
onLegSelected(legIndex: Int)
method to theMPDirectionsRendererDelegate
setShowMapMarkers(show: Bool)
andsetShowRoadLabels(show: Bool)
toMPMapConfig
for Mapbox v11 users. Use these handles to toggle Mapbox POI and road labels.
Fixed
Retention cycle between instances of
MPMapControl
and the underlying Mapbox or Google Maps view instance, causing significant memory leaks.Problem with changing floor, while having a route shown by the directions renderer.
Changes
Due to the fixed memory retention cycle issue mentioned above, it is now advisable to retain a strong reference to both the map view (Google or Mapbox) and
MPMapControl
instacnce, while they are relevant in your code.
[4.5.2] 2024-06-11
Fixed
Label styling is now respected, both on Google Maps and Mapbox, including the
labelMaxWidth
on display rules.Offline directions queries not working reliably.
Changes
The
labelMaxWidth
display rule property is interpreted as a measure of max allowed characters per line on Mapbox - but remains a measure of max screen points per line on Google Maps.Added podspec dependency on MapKit - no effects for users.
[4.5.1] 2024-06-06
Fixed
The rendered route will now be animated when calling
MPDirectionsRenderer/render()
ifMPDirectionsRenderer/animationDuration
is different from 0.
[4.5.0] 2024-05-30
Added
Support for Mapbox v11
Going forward, the MapsIndoors iOS SDK is distributed in both Mapbox v10 and v11 compatible versions, and the following CocoaPods may be used:
pod MapsIndoorsMapbox, '~> 4.5'
pod MapsIndoorsMapbox11, '~> 4.5'
pod MapsIndoorsGoogleMaps, '~> 4.5'
Minimum version of Mapbox is 11.4.0.
Added
setMapsIndoorsTransitionLevel(zoom: Int)
onMPMapConfig
for users of theMapsIndoorsMapbox11
pod.No breaking changes on the MapsIndoors interface - however, the move from Mapbox v10 to v11 requires some level of code migration in your application. Refer to Mapbox's migration documentation on the matter.
[4.4.1] 2024-05-30
Fixed
Improved entry point selection when routing between MapsIndoors Venues and the external world.
Bug where the floor selector would not function as intended on buildings without a floor index 0.
Issue where the
MPDirectionsRenderer
would not adjust the camera and selected floor, according to the currently selected route leg.Issue with
buildingSelectionMode
andfloorSelectionMode
properties on MapControl not being respected.
[4.4.0] 2024-05-27
Added
Support for Multi-stop navigation
MPDirectionsQuery
now has propertiesstops
andstopsPoints
, where you may set any number of stop points, your route query should visit between the origin and destination.MPDirectionsQuery
also has a new propertyoptimizeRoute
, which iftrue
will organize the provided stop points along the route in the most optimal order, in terms of travel time. Iffalse
the provided stop points will be visited in the declared order.MPDirectionsRenderer
has a new propertydefaultRouteStopIcon: MPRouteStopIconProvider
, which may be overwritten with your own implementation.Added
MPRouteStopIconConfig
which is a default implemenation ofMPRouteStopIconProvider
. You may reuse this, and alter some visual aspects:MPRouteStopIconConfig(numbered: Bool, label: String?, color: UIColor)
, which can show a number within the pin indicating the stop index, or a label underneath the pin, and define the color of the pin.
[4.3.13] 2024-05-14
Added
Added Graphic Label support (Mapbox only)
Fixed
Bug where icons with a badge applied (either due to display rule badging or LiveData) would cause the icon to be flipped.
Issue with LiveData not working on certain solutions.
[4.3.12] 2024-05-07
Fixed
Issue with wrongfully calculated map viewport, when using a Mapbox view which does not occupy the entire screen space.
Issue where the selected building could rapidly change between
nil
and the actual current building, when moving the camera.
[4.3.11] 2024-05-03
Fixed
Large memory usage on certain customer solutions with 2D models, which was introduced in 4.3.10
The route polyline not being completely removed when calling
clear()
on theMPDirectionsRenderer
instance, on Mapbox.
[4.3.10] 2024-04-30
Added
Added
MPCameraViewFitMode.none
option to have the camera not change position, rotation and zoom when rendering a new route.
Fixed
Invalid keys in Privacy Manifest.
When using Selective Venue Loading, too much data about buildings would be loaded. Now only the data for buildings in the selected venues is loaded.
A number of potential crashes removed.
Changed
Updated to Google Maps 8.4.0 which in turn raises the minimum required iOS version to iOS 14.
[4.3.9] 2024-04-17
Added
Ability to disable the automatic selection of Buildings and/or Floors when moving the map around. Use
MPMapControl.buildingSelectionMode
andMPMapControl.floorSelectionMode
to control the behavior.Ability to toggle rendering of map features on and off. Use
MPMapControl.hiddenFeatures
to control what should be visible on your map.The MapsIndoors SDK now includes a Privacy Manifest as described by Apple in Upcoming third-party SDK requirements.
Each XCFramework in the MapsIndoors SDK is now signed so you can be sure it originates from MapsPeople.
Fixed
The
MPSelectionBehavior.zoomToFit
is now properly respected.The built-in Floor Selector would sometimes not update to show the correct floor. It does now.
Changed
Rendering order of 3D Extruded Walls (only Mapbox) has changed slightly so outlines from neighboring rooms do not show through the walls.
Updated to Mapbox 10.17.0.
[4.3.8] 2024-03-25
Fixed
Fixed issue with
locationsWith(externalIds:)
not reliably returning locations.Applying User Roles would not always be respected.
Changed
Changed tap behavior on rendered map features. Now only visible features are tappable, whereas before invisible geometries could be tapped.
[4.3.7] 2024-03-21
Fixed
Crash in
locationsWith(externalIds:)
removed.
[4.3.6] 2024-03-20
Fixed
Search with MPQuery now respects all properties again.
Plugged a number of major memory leaks.
[4.3.5] 2024-03-07
Changed
Updated to Mapbox 10.16.4
No longer depends on MapboxDirections Cocoapod.
Fixed
Significantly reduced risk of race conditions during SDK load, which would make MapsIndoors appear as not loading at all.
An issue where polygon geometries are not clickable under certain circumstances.
[4.3.4] 2024-03-05
Retracted due to build issues. Replaced by 4.3.5.
[4.3.3] 2024-02-23
Fixed
A Location would not be selectable if the icon is not visible.
Label behavior on Mapbox when there is no icon, and only a label (the label will center on the anchor point).
[4.3.2] 2024-02-14
Fixed
Issue where some polygons would not render, using Google Maps.
The
selectable
property on locations would not always be respected.
Added
locationSettings
property onMPLocation
,MPType
andMPSolutionConfig
.
[4.3.1] 2024-02-13
Fixed
Extended zoom for Mapbox is now properly applied.
Icons for some map solutions are now crisper.
Changed
The compass on Mapbox is no longer hidden by the SDK, so the app will have to do that.
Selection of locations now behaves as on Android and Web.
[4.3.0] 2024-02-02
Changed
Due to the introduction of the new
selected
display rule, there has been a behavior change in the default visualization of selected locations. The old behavior can be re-enabled byMPMapsIndoors.shared.solution?.config.newSelection = false
. Or the new selection display rule may be retrieved and altered usingMPMapsIndoors.shared.displayRuleFor(displayRuleType: .selection)
.
Added
Two new Display Rule Types:
highlight
andselected
. With these Display Rules it is possible to define how Locations should look when selected or highlighted.The
highlight
Display Rule contains a number ofbadge
properties that can be used to define the badge that will be shown when using this Display Rule.A new
MPHighlightBehavior
that determines how the result of applying a highlight should be displayed on the map.setHighlight(filter:behavior:)
andsetHighlight(locations:behavior:)
to highlight Locations on the map, making use of the newhighlight
Display Rule type.Support for two new types of labels: Text and Flat! (only Mapbox).
Added new
labelStyle
section to Display Rules where you can style (only Mapbox):labelType
: Label type displayed on the map, either Text or FlatlabelStyleTextSize
: Controls the size of the labellabelStyleTextColor
: Controls the color of the labellabelStyleTextOpacity
: Controls the opacity of the labellabelStyleHaloColor
: Controls the color of the halo effect around the labellabelStyleHaloWidth
: Width of the halo effect around the labellabelStyleHaloBlur
: Controls the blur effect of the halo effectlabelStyleBearing
: Only applicable when Flat Label type is selected. Controls bearing of the Flat Label
Selective Venue Loading. If your Solution contains many Venues it is now possible to only load a subset of Venues, using e.g.
load(apiKey:venueIds:)
, or changing the set of loaded Venues withvenuesToSync
,addVenuesToSync(venueIds:)
andremoveVenuesToSync(venueIds:)
.It is now possible to programmatically override the Display Rule for floors, buildings and venues, to show them with e.g. a colored polygon.
Fixed
MPDirectionsService.routingWith(query:)
no longer returns anil
-route, instead throwing an error.MPMapsIndoors.shared.locationsWith(externalIds:)
no longer returns an empty result if called immediately after loading MapsIndoors.
[4.2.14] 2024-01-31
Fixed
Fixed a bug that could lead to either no route or a crash when used from Flutter or React Native.
[4.2.13] 2023-12-19
Added
excludeWayTypes
added toMPDirectionsQuery
. This allows for excluding certainMPHighWay
types from a route query, to ensure the way type is not part of the returned route. This differs fromavoidWayTypes
, which discourages certain way types.
Fixed
Fixed case where the blue dot could be rendered below tiles, on Mapbox.
Fixed route start/end marker sizing.
[4.2.12] 2023-12-07
Fixed
Improved directions rendering camera behavior. The map view's safeAreaInsets are now respected when padding is applied, and camera movements are performed.
[4.2.11] 2023-12-06
Changed
Default logging level is changed to
info
fromerror
. This does not produce much more logging – it only allows the iOS SDK version to be output on startup.
Fixed
Fixed potential crash when (un)subscribing to Live Data topics.
Fixed issue where details about a route using transit did not show.
Fixed issue where some icons would be shown too large.
MPMapControlDelegate.didTap(coordinate:)
is now called with correct latitude and longitude for tapped point.The Directions Renderer no longer shows remains of the previous route leg.
[4.2.10] 2023-11-23
Fixed
Fixed potential race condition, which could result in missing tiles until the floor index is changed.
[4.2.9] 2023-11-22
Fixed
Fixed missing or slow loading 2D models, and improved general performance and stability of 2D models usage (most notably on Google Maps).
Fixed issue with missing or simplified route geometry.
Fixed potential race condition that would result in a map with MapsIndoors tiles, but otherwise no MapsIndoors content showing.
[4.2.8] 2023-11-10
Added
Property
mapsIndoorsZoom
added toMPMapControl
. This exposes the zoom level MapsIndoors is working with to resolve e.g.zoomFrom
andzoomTo
in Display Rules.Property
logLevel
added toMPLog
to allow changing the amount of logs from MapsIndoors. The default log level has been changed fromdebug
toerror
resulting in many fewer log messages from MapsIndoors.
Fixed
In rare cases Google Maps would show the default red markers instead of MapsIndoors icons for Locations. This is no longer the case.
Changed
When Locations with large and small areas are close together MapsIndoors now prioritizes the smaller Location when user tap the map.
MapsIndoors XCFrameworks are now built with Xcode 15.
[4.2.7] 2023-10-23
Fixed
Reduced the number of network calls leading to better performance in many cases.
MPDirectionsRenderer
now works actually fits the route according tofitMode
on Google Maps.The default floor selector would sometimes miss detecting a floor change. No more of that.
[4.2.6] 2023-10-09
Fixed
Map rendering with Mapbox is no longer crashing after short usage.
LiveData is now always active, even for visibly small areas.
Labels and icons no longer risk being shown overlapped on a Mapbox map.
2D and 3D Models are now visible when extruded walls are shown.
Routes between MapsIndoors Venues or from outside to inside a Venue can now be generated when using Mapbox.
Changed
setMapLabelFont
now has optional parameters with default values (only usable from Swift).Updated Mapbox version from 10.15.0 to 10.16.1.
[4.2.5] 2023-09-22
Added
Ability to render an entire floor geometry (only when data is available).
Property
showLegLabel
toMPDirectionsRenderer
.
Changed
The building outline styling is now controlled by a display rule configurable in the CMS - the default selected building outline has therefore changed from pink-ish to blue. If you have previously made steps to programmatically modify the building outline display rule in your application, your changes are still applied and respected.
Fixed
Issue where some positional LiveData updates would not be reflected, when using the convenient interface
enableLiveData(...)
onMPMapControl
.Crash happening when attempting to query a route with
try await MPMapsIndoors.shared.directionsService.routingWith(...)
from Swift.Small UI issue where the default floor selector's scoll bar could flash.
Issue with north aligned camera movement not always being respected.
[4.2.4] 2023-08-31
Added
Set user roles async/await with
MPMapsIndoors.shared.apply(userRoles: [MPUserRole])
Fixed
Building selection logic is now run when
MapControl
is instantiated - previously the camera would need to move to do this initiallyPositional LiveData POIs are now rendered when their LiveData provided position is inside the viewport, but their original position is outside the viewport
Blue dot rendering issue where it would rotate with the camera
Map padding issue with Google Maps
The optional callback function on
enableLiveData(domain: String, listener: ((MPLiveUpdate) -> Void)?)
is now invoked when updates of the subscribed domain are receivedPotentially incorrect routing instruction strings
Issue with Google Maps where two or more buildings may be highlighted simultaneously
Issue with Google Maps where default marker (red pin) may be shown on POIs
Issue with Google Maps where the
MPCameraViewFitMode
was not always respectedUpdated Mapbox version from 10.14.0 to 10.15.0
[4.2.2] 2023-08-09
Added
Routes between MapsIndoors venues now have descriptions in the currnet language.
DisplayRules now supports unlimited zoom levels. The feature will be available in the MapsIndoors CMS soon.
MPSelectionBehavior
now has thezoomToFit
property.
Fixed
Setting the
icon
property of a DisplayRule now works as expected.Fixed an issue with map items not showing immediately, only when map was moved slightly (Google Maps).
Fixed an issue that would cause MapsIndoors tiles to disappear when moving the map (Mapbox Maps).
The rendered route is now shown above polygons, e.g. for Locations (Google Maps).
Fixed an issue that could cause multiple buildings to have an outline (Google Maps).
The button at the end of a rendered route leg is now clickable.
2D Models will no longer be at risk of being obstructed by Location polygons (Mapbox Maps).
Corrected rendering of Live Data Occupancy badges.
[4.2.1] 2023-06-29
Fixed
Rendering related crash when using Mapbox
[4.2.0] 2023-06-29
Added
Support for 3D models on Mapbox (beta feature)
Fixed
Loading performance improved
Loading bug fixed where the SDK would fail to load if any url resource returned >400 http codes
Rendering issue with flashing polygons in Mapbox
Rendering issue with wrong polygon ordering in Mapbox
Building selection logic bug where it was undetermined which building in view was selected - it is now the center most building
Improved MapsIndoors POI rendering with Google Maps
Improved overall rendering performance with Mapbox
Upgraded Mapbox version to 10.14.0
Fixed missing “next leg”-behavior when tapping the end marker of a route leg
Fixed issue with wrong rendering of badged icons, when using the default LiveData handling
[4.1.4] 2023-06-23
Added
Support for external location data sources using
register()
has been restored.
[4.1.3] 2023-06-07
Fixed
The
haloWidth
parameter ofsetMapLabelFont()
now renders on Google Maps as well.The
polygonStrokeWidth
property of a DisplayRule is now being respected.The info window on Google Maps is shown at the correct position.
[4.1.2] 2023-06-01
Added
MPMapControlDelegate
has been enhanced to enable listening to camera movements.
Fixed
The
iconSize
property of a DisplayRule is now being respected, so icons show up with the intended size.MPCustomFloorSelector
has been rewired, allowing users to personalize the floor selection.Map padding is now available for Mapbox, allowing users to adjust the spacing around the map.
The background color and solid color of a rendered route can now be customized.
The halo effect on labels is now available for use, enhancing the visual appearance of labels.
MPMapControl.setFilter()
no longer crashes.
[4.1.1] 2023-05-23
Fixed
The MapsIndoorsMapbox Cocoapod now uses the correct version of Mapbox
[4.1.0] 2023-05-17
Added
Mapbox version now 10.13.1 which adds:
Extrusions of Walls and Rooms
Fixed
Multi-line label cut-off
Marker missing when selecting location
Clustering icon size fix
Mapbox 10.13.1 fixes some Layers glitching
Fixed some known bugs
[4.0.3] 2023-04-21
Added
MPMapControl.showInfoWindowOnClickedLocation to control if info windows should be shown when a Location is selected
Fixed
Icons are now respecting zoom levels in Display Rules
Labels are now respecting zoom levels in Display Rules inherited from the Location Type
MPMapControl.hideFloorSelector now actually hides the floor selector
[4.0.2] 2023-04-13
Fixed
A number of rendering issues have been corrected.
An issue that could prevent a route from being correctly created.
[4.0.1] 2023-04-05
Fixed
Fixed crash with Mapbox when panning around the map.
[4.0.0] 2023-03-31
Version 4 of the MapsIndoors SDK has changed significantly compared to version 3. There is a migration guide that describes the changes.
Added
Support for new map providers
MapsIndoors can now be used with the Mapbox v10 SDK.
goTo(entity:)
A new method for moving the camera to MapsIndoors locations, this new method goTo() can be used with any class that implements MPEntity, which includes but is not limited to MPLocation, MPFloor, and MPBuilding.
Solution Config
The SDK now supports the Solution Config.
This also introduces the new Main Display Rule, which is bundled into the solution config, along with collision handling and clustering.
New Cocoapods
The main Cocoapod to use is either
MapsIndoorsGoogleMaps
orMapsIndoorsMapbox
depending on the map engine to use.Both of these Cocoapods are dependent on the
MapsIndoors
andMapsIndoorsCore
Cocoapods and will automatically include them.Most classes in
MapsIndoorsCore
are public but meant for communication between the core SDK and map platform specific code. These classes are not described in the reference docs. Refrain from using these classes unless you know what you are doing.
Changed
Initialisation of MapsIndoors
The interface to initiate the SDK is improved for smaller and safer implementations.
Initialise MapsIndoors with
MPMapsIndoors.shared.load(apiKey: "YOUR_MAPSINDOORS_API_KEY")
Initialization of MapControl
In order to support multiple map engines an
MPMapConfig
is needed.The
MPMapConfig
is then used to create a MapControl:let mapControl = MPMapsIndoors.createMapControl(mapConfig: mapConfig)
.
Display Rules
Display Rules have been reworked completely.
Display Rules are now reference based, thus any changes to a rule are instantaneous.
Display Rules can be reset with
reset()
. This will return the display rule to the state it has in the CMS.
The iOS SDK Reference Docs have been modernised and are now available at https://app.mapsindoors.com/mapsindoors/reference/ios/v4-doc/documentation/mapsindoors/
Many interface changes. See migration guide for help in migrating from MapsIndoors SDK v3.
Minimum iOS version supported is iOS 13.
Required Xcode version is Xcode 14.
Last updated