Changelog
This page records user-visible SDK changes, including smaller fixes and compatibility updates. Major features may also have a separate article in the blog.
2.2.0
Added
- Added a standalone Android
globus:glmapcorelibrary and a SwiftPMGLMapCoreproduct. Geometry, storage, and downloads can be used without a map view; Search and Route no longer require the Android renderer. - Added camera values to
GLMapViewStateon iOS and Android: center, scale, zoom, angle, pitch, and origin. Android also gains synchronousGLMapViewRenderer.getState()for queries that do not need rendered terrain depth. - Added
GeometryBuilder.addLineLonLat(double[])on Android for packed longitude/latitude input, with synchronous input consumption and coordinate validation. - Added
GLMapAnimation.setCompletionon Android to distinguish completed animations from interruptions. The existingsetOnFinishcallback remains available. - Added
GLSearchRequest.visibleAreaon iOS and Android as an optional viewport hint for geographically relevant online spelling corrections. It is not a strict bounding-box filter; offline mobile search does not include fuzzy matching. - Added
GLMapManager.automaticallyManagesDownloadBackgroundTaskson iOS. Applications that manage their own background execution can disable GLMap's automatic short UIKit background tasks for offline map downloads.
Changed
- Vector-layer updates now report an explicit terminal outcome:
Ready,Superseded,Cancelled, orFailed. Updates replace the layer's geometry; a callback is delivered asynchronously on the main thread.Readymeans geometry is ready to draw, not that a frame has been presented. - Android SDK initialization is centralized in
GLMapManager.Initialize, which initializes Core and the included Map, Search, and Route modules. Repeating initialization with a new API key updates the key without preparing resources again. - Apple activation now returns a boolean reporting missing resources or an unwritable storage path. Android initialization no longer reports failure merely because a cached map list is absent. These results are not API-key validation.
- iOS API documentation is now one combined DocC site covering GLMapCore, GLMap, GLSearch, GLRoute, and the Swift conveniences.
Fixed
- Fixed valid search results disappearing when submitting a query: unverified candidates and duplicate fragments no longer consume the result limit before filtering and merging.
- Preserved search result names when merging display tags and made ordering of equally ranked results more stable. Short autocomplete tokens are less likely to favor incidental words in the middle of a name.
- Improved search-cache maintenance after map changes and cache placement for the read-only bundled world map.
- Preserved Android map frames across surface transitions and added
setRenderingEnabledto pause drawing without discarding the last frame. Recreated SurfaceView surfaces are redrawn before reporting redraw completion. - Fixed Vulkan rendering with a 180-degree surface rotation and rebuilt affected screen-space geometry when screen rotation or font scale changes.
- Fixed route-builder maneuver geometry and elevation alignment when appending maneuvers.
- Fixed nearest-point coordinates for point and line geometry on both platforms. Android vector queries now preserve the computed nearest point, including when updating a hit-test input point.
- Android storage configuration now creates and checks writable map directories, rejects invalid or read-only write locations without replacing the previous configuration, and allows initialization to be retried after storage access is restored.
- Fixed iOS bounding-box download completion lifetime and Android dataset removal by absolute path. Android resource copying now handles interrupted reads, partial writes, and failed copies more reliably.
- Fixed SVG ellipse radius parsing, SVG error handling, and a crash when parsing excessively long CSS color values.
- Fixed synchronization when cancelling map animations and improved Android safety when queued animation work outlives its map view.
Migration notes
Both platforms
- Rebuild clients against the new SDK; this release includes source and binary API changes.
GLMapVectorLayer.setVectorObjectandsetVectorObjectscompletions now receive an update result instead of being parameterless. Submit updates on the main thread and check forReadybefore doing success-only work. Swift callbacks that intentionally ignore the result use{ _ in ... }; Java callbacks useresult -> .... Kotlin lambdas can access the result asit. Calls with a null completion, or with an omitted Swift completion, remain source-compatible. A detached layer or paused map can keep an update pending until rendering resumes, it is superseded, or the layer is released.GLMapInfo.getPolygonsnow returns a nullable vector object (GLMapVectorPolygonon Apple platforms,GLMapVectorObjecton Android), not nested arrays of points. Use the vector geometry accessors to inspect its rings.
Android
- Call
GLMapManager.Initialize(context, apiKey, progressCallback)successfully before using any native-backed SDK API, including headless geometry. Native libraries are no longer loaded by class initializers. Do not use SDK APIs concurrently with initialization; concurrent or reentrant initialization throwsIllegalStateException.GLSearch.Initialize(context)is a deprecated compatibility no-op. Pure Java point/bounding-box values and pre-initializationSetStoragesremain available. - Renderer-dependent queries move to
GLMapViewState. Obtainrenderer.getState()on the UI thread for immediate queries, or usecaptureStatewhen rendered terrain depth is needed. Close the state after use; captured camera values survive renderer changes and disposal, but label layout is not a fully frozen snapshot.
| Before | Now |
|---|---|
object.findNearestPoint(renderer, point, distance) | state.findNearestPoint(point, object, distance) |
track.findNearestPoint(renderer, point, distance) | state.findNearestPoint(point, track, distance) |
objects.findNearPoint(start, end, renderer, point, distance) | state.findNearPoint(objects, start, end, point, distance) |
object.updateDrawAttributes(renderer, style) | state.updateDrawAttributesOfVectorObject(object, style) |
GLSearch.MapObjectNearPoint(renderer, ...) / RelationsNearPoint(renderer, ...) | Pass a GLMapViewState instead of the renderer. |
- Core classes retain their
globus.glmapJava package names. Applications using only Search or Route must explicitly addglobus:glmapif they also need map rendering; those modules now depend on Core rather than Map. GLMapValueno longer inherits drawable operations. Native bridge consumers must useGLMapCore/GLMapBridge.hinstead ofGLMap/GLMapBridge.h.
Apple platforms
- Minimum deployment targets rise to iOS 15 and macOS 12, including the corresponding Mac Catalyst target. The GLMapCore watchOS minimum remains watchOS 10.
- Core Swift conveniences move to
GLMapCoreSwift;GLMapSwiftre-exports them, so existing Map clients can keepimport GLMapSwift. Headless clients useGLMapCoreandGLMapCoreSwift. Recompile prebuilt Swift dependents and useGLMapManager.shared.resourcesBundlerather than relying on the SwiftPM resource bundle's internal filename.
2.1.0 — 4 September 2026
Added
- Added
GeometryBuilderon iOS and Android for efficiently constructing lines, multilines, polygons, and multipolygons. - Added direct geometry inspection to iOS
GLMapVectorObject. - Added in-place WGS-84 coordinate conversion with
MapPoint.setLatLonon Android. - Added route maneuver types for road merges, elevators, steps, escalators, building and level transitions, and parking before continuing on foot.
Changed
- Reworked vector and track geometry around compact immutable storage to reduce allocations and temporary objects.
- On iOS,
GeometryBuilderreplacesGLMapPointArrayand the old line and polygon constructors. Track append and merge methods were also renamed. - On Android,
createPolygonandcreatePolygonGeonow accept one ordered array of rings, with the outer ring first and holes following it. The oldgetMultilinePointsaccessors were removed. - Search now uses explicit country, region, and locality context more consistently, including fallbacks for distant localities and unavailable house numbers.
- Improved font-family selection, fallback, and glyph-atlas lifetime across iOS and Android.
- Map animation configuration and cancellation now enforce their main-thread lifecycle.
2.0.2 — 2 August 2026
Fixed
- Fixed an iOS crash when GLMapCore used ICU before GLSearch had configured its data directory.
2.0.1 — 28 July 2026
Fixed
- Text labels with an outline no longer lose their fill when duplicate-stencil suppression is enabled. The fix applies to the Metal and OpenGL renderers.
- Post offices remain available in text and category search, but no longer appear as a promoted quick category.
2.0.0 — 22 July 2026
Added
- Added offline 3D terrain with configurable altitude scale.
- Added terrain-aware tracks, markers, labels, hillshades, slope shading, and contour lines.
- Added
GLSearchRequestas one request model for online and offline text search, autocomplete, and category browsing. - Added stable identifiers to search categories.
- Added walking, hiking, wheelchair, and blind-pedestrian routing profiles.
- Added Vulkan rendering on supported Android devices with automatic OpenGL ES fallback.
- Added Android 17 and
targetSdk 37compatibility while retaining Android API 21 as the minimum. - Added watchOS build support for
GLMapCore. - Added compact Swift/UIKit and Kotlin reference applications covering maps, search, routing, terrain, downloads, markers, and camera operations.
Changed
- Online and offline search now return the same display-ready map-object model.
- Custom style parsing on iOS now reports errors; Swift
GLMapStyleParsermethods are throwing. - Fly-to animations now use
flyToModeand a map-center change inside the animation block. - Drawable hit testing now uses screen-bounds testing.
- Applications must provide WGS-84 coordinates; the legacy China-coordinate switch was removed.
- Android applications can allow GLMap to choose between Vulkan and OpenGL ES automatically.
Fixed
- Improved cancellation and exactly-once completion for search and routing requests.
- Improved handling of empty input, malformed responses, renderer recreation, and interrupted downloads.
- Improved route tracking, alternative selection, and elevation validation.
See GLMap 2.0 for the release overview and migration guidance.
1.13.0 — 16 February 2026
Added
- Added
GLMapTrackArrowfor drawing directional arrows along navigation routes and other tracks. - Added
GLMapUserLocationto manage the user-location marker, accuracy circle, images, and location updates with less application-side code.
Changed
- Simplified the iOS track and image APIs.
- Improved cross-platform API parity for route construction, map animations, and Android documentation.
- Reworked Android gesture handling and improved shader compilation caching.
Fixed
- Fixed an Android rendering and animation deadlock.
- Fixed a triangulation crash and data races in scale-ruler updates.
- Fixed iOS custom-callback memory leaks and improved map-download error handling.
See GLMap 1.13.0 for examples and migration notes.
1.12.0 — 13 July 2025
Changed
- Reworked tile loading on both platforms to progressively request detail, avoid unnecessary cancellations, and make better use of the download cache during rapid pan and zoom gestures.
- Android screen-coordinate conversion now uses
android.graphics.PointF, while geographic map coordinates continue to useMapPoint. - Renamed the continuous iOS
mapZoomproperty tomapScaleto align terminology across platforms. - Rebuilt Android libraries with NDK r28.1 and added support for devices using 16 KB memory pages.
Added
- Added public Android surface lifecycle APIs for custom rendering integrations.
- Added
isTapZoomInvertedon iOS for applications that invert double-tap zoom behavior.
See GLMap 1.12.0 for API migration examples.
1.11.0 — 14 January 2025
Added
- Added turn-lane information to route maneuvers, including possible, valid, and active directions for each lane.
- Added route creation from Valhalla JSON responses for server-generated, cached, and hybrid online/offline routing workflows.
- Added alternative-route tracking, including detection when the user passes a junction or continues along another route option.
Changed
- Tap gesture callbacks no longer return a handled flag; pan gesture callbacks retain it for gesture conflict handling.
See GLMap 1.11.0 for the lane-guidance and route-tracking APIs.
1.10.0 — 15 November 2024
Added
- Added map pitch for tilted navigation and perspective map views.
Changed
- Gesture callbacks gained a handled result so applications could coordinate custom pan behavior with built-in map gestures. Tap callbacks were simplified again in 1.11.0.
See GLMap 1.10.0 for the map-pitch introduction.