Skip to main content

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:glmapcore library and a SwiftPM GLMapCore product. Geometry, storage, and downloads can be used without a map view; Search and Route no longer require the Android renderer.
  • Added camera values to GLMapViewState on iOS and Android: center, scale, zoom, angle, pitch, and origin. Android also gains synchronous GLMapViewRenderer.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.setCompletion on Android to distinguish completed animations from interruptions. The existing setOnFinish callback remains available.
  • Added GLSearchRequest.visibleArea on 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.automaticallyManagesDownloadBackgroundTasks on 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, or Failed. Updates replace the layer's geometry; a callback is delivered asynchronously on the main thread. Ready means 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 setRenderingEnabled to 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.setVectorObject and setVectorObjects completions now receive an update result instead of being parameterless. Submit updates on the main thread and check for Ready before doing success-only work. Swift callbacks that intentionally ignore the result use { _ in ... }; Java callbacks use result -> .... Kotlin lambdas can access the result as it. 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.getPolygons now returns a nullable vector object (GLMapVectorPolygon on Apple platforms, GLMapVectorObject on 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 throws IllegalStateException. GLSearch.Initialize(context) is a deprecated compatibility no-op. Pure Java point/bounding-box values and pre-initialization SetStorages remain available.
  • Renderer-dependent queries move to GLMapViewState. Obtain renderer.getState() on the UI thread for immediate queries, or use captureState when 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.
BeforeNow
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.glmap Java package names. Applications using only Search or Route must explicitly add globus:glmap if they also need map rendering; those modules now depend on Core rather than Map.
  • GLMapValue no longer inherits drawable operations. Native bridge consumers must use GLMapCore/GLMapBridge.h instead of GLMap/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; GLMapSwift re-exports them, so existing Map clients can keep import GLMapSwift. Headless clients use GLMapCore and GLMapCoreSwift. Recompile prebuilt Swift dependents and use GLMapManager.shared.resourcesBundle rather than relying on the SwiftPM resource bundle's internal filename.

2.1.0 — 4 September 2026​

Added​

  • Added GeometryBuilder on 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.setLatLon on 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, GeometryBuilder replaces GLMapPointArray and the old line and polygon constructors. Track append and merge methods were also renamed.
  • On Android, createPolygon and createPolygonGeo now accept one ordered array of rings, with the outer ring first and holes following it. The old getMultilinePoints accessors 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 GLSearchRequest as 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 37 compatibility 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 GLMapStyleParser methods are throwing.
  • Fly-to animations now use flyToMode and 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 GLMapTrackArrow for drawing directional arrows along navigation routes and other tracks.
  • Added GLMapUserLocation to 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 use MapPoint.
  • Renamed the continuous iOS mapZoom property to mapScale to 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 isTapZoomInverted on 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.