Skip to content

Release notes for 200.8

This page provides details about enhancements in the 200.8 release of ArcGIS Maps SDK for Swift. It also lists deprecations, resolved issues, known issues, and more.

Enhancements

Geometry editing

Customizable geometry editing workflows using the programmatic reticle tool

You can now configure your GeometryEditor to use the new ProgrammaticReticleTool to facilitate customized geometry editing workflows such as those using buttons rather than tap interactions. Unlike our existing tools the ProgrammaticReticleTool has no built in touch interaction. Instead, it is driven by programmatic operations allowing you to configure your own behavior and interaction using buttons or other triggers of your choosing.

Use ProgrammaticReticleTool.selectElementAtReticle() and ProgrammaticReticleTool.pickUpSelectedElement() to select and pick up the GeometryEditorVertex or GeometryEditorMidVertex at the reticle position. Then, drop a picked-up vertex or insert a new vertex using ProgrammaticReticleTool.placeElementAtReticle().

The ProgrammaticReticleTool.vertexCreationPreviewEnabled property can be used to enable or disable the appearance of vertex feedback and feedback lines that are drawn underneath the reticle. It can also be used to enable or disable both visual and haptic snap feedback. This is useful when implementing workflows that do not allow for vertex creation.

Hovered and picked up element changed events

The hoveredElement and GeometryEditor.pickedUpElement properties can be used in your app to react to state changes in the GeometryEditor, and are especially useful when working with the new ProgrammaticReticleTool.

For example, when hoveredElement updates, your app UI can display a button that selects and picks up the element currently underneath the reticle, as shown below. Similarly, when GeometryEditor.pickedUpElementupdates, your app UI can display a button that drops the GeometryEditor.pickedUpElement or places a new vertex, using ProgrammaticReticleTool.placeElementAtReticle(). You can check the GeometryEditor.pickedUpElement to indicate to the user whether or not they will be inserting a new vertex or dropping a currently picked up element.

Hover and pick up events

Disable grow effect when hovering over geometry editor elements

Use the new GeometryEditorStyle.growEffect to enable and disable the visual effect of vertices and mid-vertices growing when hovered.

Vertices and mid-vertices can be separately configured using GeometryEditorGrowEffect.applyToVertices and GeometryEditorEffect.applyToMidVertices.

Identify geometry editor elements

Use the MapView.identifyGeometryEditor() method to identify elements at a given position when using the GeometryEditor. This allows you to implement workflows such as selecting geometry editor elements or updating the viewpoint to be centered at that element on a long press.

Geometry editor identify

Customizable precision with tolerance and resolution

Use the new SpatialReferenceBuilder to create new SpatialReference objects with custom tolerance and resolution values for high accuracy workflows and GeometryEngine.

The SpatialReference class exposes new read-only properties for SpatialReference.tolerance, SpatialReference.verticalTolerance, SpatialReference.resolution, and SpatialReference.verticalResolution.

This resolves the following enhancement request: ENH-000168892 Add ability to define the tolerance of a spatial reference.

Authentication

Identity-Aware Proxy (IAP)

ArcGIS Maps SDKs now support accessing ArcGIS Enterprise Portal and Services behind Microsoft Entra Application Proxy via Microsoft Identity Platform.

An Identity-Aware Proxy (IAP) is a security feature that enables organizations to manage access to their on-premises web applications and services based on user identity. Typically, it functions as a reverse proxy, acting as a gatekeeper to ensure that only authenticated and authorized users can access specific resources. The authentication process for IAP occurs within a web session using protocols such as OAuth, SAML, or _OpenID Connect. During this session, security tokens and cookies are generated, which remain valid throughout the session until they are invalidated.

Please read the section on IAPCredential in the security guide to understand how to configure and work with Identity-Aware Proxy (IAP) in the SDK.

Enhancement to ArcGISAuthenticationChallenge

ArcGISAuthenticationChallenge now provides an enum to determine the type of authentication challenge Iap, OAuthOrToken, or Token. It helps to determine whether the authentication challenge is issued by the proxy, portal, or service.

Utility network

Utility Network creation and access

The UtilityNetwork object can now be created with a ServiceGeodatabase object. When these objects are created from the same feature service source, they share the same instances of FeatureTable. This new constructor emphasizes the explicit relationship between them. Similarly, when a Map object is created from a web map containing utility network data, the layers, tables, and utility networks all use the same underlying ServiceGeodatabase object. Instead of creating a standalone UtilityNetwork, consider accessing the UtilityNetwork using the property. All public samples containing utility network data have been updated to align with this change. For more detailed information, refer to the API deprecations section.

Add title property to utility association result

This release adds a title property to UtilityAssociationResult. It provides a user-friendly name for UtilityAssociations shown in a FeatureForm or Popup. The title is derived from the title of the FeatureFormDefinition or PopupDefinition of the associated feature's layer or table, with a suitable fallback if no FeatureFormDefinition or PopupDefinition has been created.

Indoor positioning in offline apps

Support for on-demand and pre-planned offline map area workflows

It is now possible to create offline applications using an IPS-aware web map and implement the on-demand and pre-planned workflows. Indoor positioning data will be taken offline using ArcGIS Maps SDKs' offline jobs and the offline application will display a blue dot in the respective offline map area indoors.

Query and identify optimizations

ArcGISFeature access optimization

Accessing ArcGISFeatures by performing query operations on a ServiceFeatureTable or UtilityNetwork, as well as through the identify methods with FeatureLayers, has seen a significant boost in performance. This improvement is particularly evident when working with a map or scene that contains a large feature dataset, as these asynchronous operations now return results more efficiently, even while all features are still being rendered.

Layers

Improved performance and user experience of KML layers in a scene

In this release, performance and user experience for KML layers in 3D have been improved. The changes focus on line and polygon geometries. You'll notice the biggest improvements when a layer contains a large volume of data. Interaction with KML layers is now smoother, providing a much better user experience.

PDF Support

PDF files are now a supported raster file format, including GeoPDF(R) and geospatial PDFs using the ISO encoding. They can now be directly added to maps or scenes as raster layers or basemaps without the need to first convert them to another format. The first page of a PDF will be read and georeferenced according to optional embedded spatial reference information, and at a default DPI of 300.

Symbology

Support for fetching Model Symbols from a mobile Style file

This release adds support to fetch a Model Symbol from a mobile Style file. You can search for a model symbol in the mobile style or fetch a symbol by providing list of keys. The type of symbol returned is a MultilayerPointSymbol and model symbol layer object is returned as a generic SymbolLayer type object. This workflow is already supported for WebStyles.

Attribute editing with feature forms

Add JSONSerializable interface to feature form definition

This release adds JSONSerializable interface to FeatureFormDefinition to allow advanced clients to get access to the full JSON data.

Arcade

Support for new Arcade version

The SDK now supports Arcade 1.33

  • Geotrigger notification profile now supports $FenceLayer.
  • TranslateText function is not yet supported and will be supported in a future release.

Projection Engine

Geographic (datum) transformations

  • Added geographic (datum) transformation method Molodensky-Badekas (Position Vector). The existing Molodensky-Badekas method uses the Coordinate Frame version of the rotation matrix.
  • Added geographic (datum) transformation method NTv2_Velocity. Although the method is designed to support datum anchor epochs and data epochs, only frame epochs of the geographic coordinate systems are currently supported for interframe conversions such as between NAD83(CSRS)v2 and NAD83(CSRS)v8.

SDK enhancements

JSON APIs

JSON APIs - fromJSON(_:) and toJSON() now work with Data instead of String, making JSON serialization and deserialization more streamlined using Swift's Codable protocol.

Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
// Decoding is equivalent to using JSONDecoder
let json = #"{"x":-117,"y":34,"spatialReference":{"wkid":4326}}"#.data(using: .utf8)!
// let point = try JSONDecoder().decode(Point.self, from: json)
let point = try Point.fromJSON(json)

// Encoding is equivalent to using JSONEncoder
let point = Point(latitude: 34, longitude: -117)
// let json = try JSONEncoder().encode(point)
let json = point.toJSON()

Download Task Response Details

ArcGISURLSession provides a new downloadTaskResponseDetails async stream which provides information about file downloads such as the file size and download progress. This information is available for any file downloads initiated by the API, including OfflineMapTask, ExportTileCacheTask, ExportVectorTilesTask, etc.

Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
for await response in ArcGISURLSession.downloadTaskResponseDetails {
    Task {
        for await progress in response.progress {
            // Print the total amount of data downloaded.
            print("-- progress: \(progress.totalDownloaded)")
        }
    }
}

Authenticator

  • Adds support for Identity-Aware Proxies (IAP). An Identity-Aware Proxy (IAP) is a security feature that enables organizations to manage access to their on-premises web applications and services based on user identity. Typically, it functions as a reverse proxy, acting as a gatekeeper to ensure that only authenticated and authorized users can access specific resources. The authentication process for IAP occurs within a web session using protocols such as OAuth, SAML, or OpenID Connect. During this session, security tokens and cookies are generated, which remain valid throughout the session until they are invalidated. This release adds support for Microsoft Entra Application Proxy.
    • init(promptForUntrustedHosts:oAuthUserConfigurations:) is deprecated and replaced by init(promptForUntrustedHosts:oAuthUserConfigurations:iapConfigurations:) to support authenticating with IAP by optionally passing in configuration settings for the proxy.
  • Adds ArcGISAuthenticationChallengeType which allows the authenticator to better decide which type of ArcGISCredential should be created to handle the underlying authentication challenge.
  • oAuthUserConfigurations and iapConfigurations are now public read-write properties to allow setting configurations more easily.

FeatureFormView

  • The FeatureForm view adds support for viewing utility network associations. Associations model relationships between utility assets in the real world based on connectivity, containment, or structural attachment.
  • The view allows users to browse through associated features and return to previously viewed ones. The associations are filtered according to the settings described by the form's UtilityAssociationsFormElement configuration. No associations are displayed if the form doesn't contain the required settings. If the view is used without a form definition, all available associations are displayed without any filters.
    • init(featureForm:) is deprecated and replaced by init(root:isPresented:).
    • FeatureFormView uses a NavigationStack internally to support browsing utility network associations. The new initializer provides an isolated navigation context for the feature form.
  • Browse utility network associations in a feature form through the UtilityAssociationsFormElement.
Feature Form View
  • editingButtons(_:) is added to control the visibility of new built-in Save and Discard buttons.
  • navigationDisabled(_:) is added to prevent users from navigating to other associations.
  • onFeatureFormChanged(perform:) and onFormEditingEvent(perform:) are added to allow receiving change events from the form.
    • The feature form might change when navigating through the associations in a UtilityAssociationsFormElement.
    • You can run actions based on the form editing events, such as saving and discarding edits.

OfflineMapAreasView

  • Fixes a crash when attempting to re-download a deleted preplanned map area while offline.
  • Fixes a bug that stops the on-demand workflow from downloading an area. When the view first appears and the extent selector isn't moved, if the download button is tapped, the view behaved incorrectly.
  • Fixes a bug when using the view in certain offline situations, the view doesn't show the "No Internet Connection" message.
  • Changes the "Delete Map Area" button to "Remove Download" for ahead-of-time and "Delete Download" for on-demand workflows, to better reflect that the actions delete the downloaded data for the map area.

PopupView

Popup View
  • The PopupView adds support for viewing utility network associations. Associations model relationships between utility assets in the real world based on connectivity, containment, or structural attachment.
  • The view allows users to browse through associated features and return to those previously viewed. The associations are filtered (e.g., by assembly layer) according to the settings described by the form's UtilityAssociationsPopupElement configuration and presents results in collapsible groups by layer, table, or subtype. The view shows relevant association details - such as connected terminals or fraction along an edge - and supports navigation to the popup of an associated feature, whether spatial or non-spatial, with a back button to return to the previous view. It allows users to exit all associations at once, returning to the original feature, and only display associations that are currently available on the map.
    • init(popup:isPresented:) is deprecated and replaced by init(root:isPresented:) to better support navigating between associated features. PopupView uses a NavigationStack internally to support browsing utility network associations, and the new initializer provides an isolated navigation context for the popup view.
  • header(_:) modifier is deprecated. With the new navigation context, the view owns and manages its own navigation stack, so there's no longer support for hiding the header.
  • showCloseButton(_:) modifier is deprecated. With the new navigation context, the view decides whether or not to show the close button by the isPresented initializer parameter.
  • onPopupChanged(perform:) is added to support custom actions when browsing between popups associated via a UtilityAssociationsPopupElement.

Breaking API changes

There are no breaking API changes with this release.

Behavior changes

  • With this release, GeometryEngine.reshape() now supports true curves.
  • With ArcGIS Online now supporting true curves, you can now apply edits to circular arcs in an ArcGIS Online hosted feature service.
  • The wkt2 string description of a SpatialReference is now read in preference over wkt for FeatureLayers and Geodatabases and is also contained in their Spatial Reference output json.
  • JSONSerializable.toJSON() method now serializes properties from the unknownJSON collection.
  • This is the last release where creating an IntegratedMeshLayer using the ArcGISSceneLayer constructor workflow is supported. Starting from next release, it is recommended that you use the IntegratedMeshLayer constructor to create a layer of that type.

Deprecations

API deprecations

  • The UtilityNetwork constructors with URI are deprecated and will be removed in a future release. Use the constructor that accepts a ServiceGeodatabase instead.
  • unknownJSON and unsupportedJSON properties have been deprecated from the JsonSerializable JsonSerializable interface and objects which follow a similar pattern. Use the JSONSerializable.toJSON() instead to get all JSON data for an object. Since Map and Scene objects can be large and expensive to parse and serialize, a new unusedJSON property has been added specifically to those root objects.
  • The FeatureSubtype.domains property is deprecated and will be removed in a future release. Use the Field.domain in the FeatureSubtype.fieldOverrides instead.

  • IntegratedMesh enum value is deprecated from ArcGISSceneLayer.DataType.

  • OpenStreetMap (OSM) basemaps are in mature support and will no longer be updated. They will be removed in a future version of the ArcGIS Maps SDK for Swift. For more information, see the Overture Maps Data in ArcGIS blog. We recommend that you replace your OSM Basemap.Style with the equivalent Open Basemap styles, as follows:

    OSM Basemap styleOpen Basemap style
    OSMStandardopenOSMStyle
    OSMStandardReliefopenOSMStyleRelief
    OSMStandardReliefBaseopenOSMStyleReliefBase
    OSMStreetsopenStreets
    OSMStreetsReliefopenStreetsRelief
    OSMLightGrayopenLightGray
    OSMLightGrayBaseopenLightGrayBase
    OSMLightGrayLabelsopenLightGrayLabels
    OSMDarkGrayopenDarkGray
    OSMDarkGrayBaseopenDarkGrayBase
    OSMDarkGrayLabelsopenDarkGrayLabels
    OSMStreetsReliefBaseopenStreetsReliefBase
    OSMBlueprintopenBlueprint
    OSMHybridopenHybrid
    OSMHybridDetailopenHybridDetail
    OSMNavigationopenNavigation
    OSMNavigationDarkopenNavigationDark
  • BingMapsLayer and BingMapsLayer.Style are now deprecated and will be removed in a future version of ArcGIS Maps SDK for Swift. Microsoft has deprecated Bing Maps for Enterprise, which will retire and be replaced by Azure Maps on June 30, 2028. As a result, use of Bing Maps in ArcGIS Maps SDK for Swift is also deprecated. You can migrate from Bing Maps to Azure Maps by following the instructions in the Microsoft Azure documentation.

OS and framework deprecations

There are no OS or framework deprecations with this release.

Issues resolved

Issues addressed in this release are listed below.

  • Layers configured with custom dictionaries do not display on the map when parsing dictionary version in a web style.
  • BUG-000174246 - When drawing a graphic line with static rendering mode, unnecessary graphics are drawn along with the graphic line in a 3D SceneView.
  • PortalItem of image type fails to add or update when the filename contains the file extension
  • Vertex and lines doesn't follow the hover gesture for geometry editor on Mac Catalyst.
  • Empty URL causes crash instead of throwing an InvalidCallError.
  • NetworkAnalystError message doesn't include localized error details.
  • When PortalQueryParameters.searchPublic is False, non-public items from another organization that the user can access are not returned.
  • The GeometryEditor drag gesture lags between finger and vertex.
  • CustomTiledLayer doesn't show as a basemap layer.

Known issues

There are no known issues or limitations for this release.

Changes in samples

New samples

Enhancements

Sample Viewer
  • Increased the project's minimum deployment to 17.0.
  • Added App Store review requests.
Samples
  • Simplified Add scene layer from service to better highlight adding scene layers.
  • Enhanced the Set basemap README to include information on organizational basemaps.
  • Replaced uses of deprecated APIs:
    • Updated the FeatureForm and PopupView uses to support their new initializers.
    • Moved to using the new geodatabase UtilityNetwork initializer.
    • Replaced uses of the OpenStreetMap basemap styles.
    • Added support for the new Data JSON methods.

Bug fixes

  • Fixed a bug where sample authentication teardown wouldn't always complete before another sample appeared.
  • Resolved an issue where some sheets were displaying smaller than expected.
  • Replaced KML data that was not working in Add KML layer sample.

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.