Skip To Content

Release notes for 10.2.2

In this topic

The major changes this release focused on providing the capability to work offline and on providing improvements to speed up your productivity, as described in this topic. This topic also describes other new features, issues addressed, and tips for migrating from previous versions.

Offline functionality

Offline functionality was introduced in beta at the last release (version 10.2) and is now available in final form. You can now use the following offline capabilities in your production apps:

A number of API changes have been made to accommodate the above offline capabilities, but they were necessary for additional reasons, including: renaming classes to be more specific and avoid confusion, reusing existing classes where possible, simplifying the API, better error reporting, reporting size and progress of downloads, and so on. These changes are described below to help you migrate existing applications.

Productivity improvements

  • Easier access—You can now download SDKs from one central location (requires you sign in with your developer account).
  • Get your app to the market quickly using the same development and deployment model across the Runtime SDKs.
  • Significant documentation improvements have been added this release, including easier browse pathways and the addition of new topics, such as Design considerations, which includes app/map patterns and providing map tools.

Licensing requirements for deployment

Starting at the 10.2.2 release of ArcGIS Runtime, all SDKs are licensed using the same model. Your ArcGIS Runtime application needs to be licensed using Basic or Standard Level before it is deployed. You can download any of the Runtime SDKs at no cost and you will have access to all Basic and Standard functionality for development and testing purposes. Until your application is licensed for deployment at basic or standard level you will, however, experience map watermarks and debug messages. For more information, refer to the License your app topic.

Support for arm64 architecture

The API supports developing true 64-bit applications to take advantage of Apple's A7 chip found in devices such as iPad Air and iPhone 5s.

Support for background tasks

Tasks such as AGSGDBSyncTask and AGSExportTileCacheTask which periodically monitor remote jobs can now monitor jobs even in the background when the app is not active. If the job completes while the app is still in the background, the API will automatically download the result and notify the task's completion handler so that you can inform the user via a local notification. Refer to the API Reference documentation of AGSTask(AsyncServerJobs) for more information, or the Download Tile Cache and Offline Feature Editing samples for working examples.

Ability to pre-fetch neighboring tiles

AGSTiledLayer provides a new property bufferFactor which allows you to fetch tiles for neighboring areas that aren't yet visible on the map. This could greatly improve the user experience of panning the map in cases where tiles are slow to load.

Improved performance

Graphics layers in dynamic mode are able to handle twice the number of features while providing the same level of fluidity and interactiveness.

New look for location display icons

The default location display icons have been updated to use a flatter look, inline with modern UI design aesthetics of iOS 7. You can also now programmatically change the location icons, for example, when the device enters or exits a geofence, using the new defaultSymbol, courseSymbol, and headingSymbol properties on AGSLocationDisplay. Finally, you can also customize the look of the accuracy circle and the ping animation, or simply turn them off.

Ability to override map scale threshold

The basemap layer, by default, restricts the map from zooming beyond the layer's min or max scale. This can be limiting if you have other layers in the map that can show data at lower or higher scales than the basemap layer. For example, a Utility company might have basemap imagery only at 2m resolution, but more precise vector data for assets such as electric poles at sub-meter resolution. Now, you can zoom to the full resolution of your data by overriding minScale or maxScale properties on AGSMapView.

Support for rotation renderer

You can now rotate symbols on a feature-by-feature based on their attribute values. This is helpful, for example, if you have sensor data for wind direction and velocity, then you can display each measurement with a symbol rotated to point in the actual direction.

Two rotation schemes are supported -
  • Arithmetic - Rotation is applied from the East in a counter-clockwise direction where East is the 0° axis.
  • Geographic - Rotation is applied from the North in a clockwise direction where North is the 0° axis.

See the API reference for rotationExpression property on class AGSRenderer for more information.

Popups automatically edit the local geodatabase

When using AGSPopupsContainerViewController to edit features coming from a local geodatabase, all edits (add, update, and delete) to a feature's attributes, geometry, or attachments are automatically committed to the local database when the user finishes editing. Developers don't have to manage these local edits. You only need to handle syncing local edits with the server.

API Changes

AGSGDBTask

  • Class renamed to AGSGDBSyncTask
  • Enum AGSGDBTaskJobStatus renamed to AGSGDBSyncTaskJobStatus
  • Function AGSGDBTaskJobStatusFromString(...) renamed to AGSGDBSyncTaskJobStatusFromString(...)
  • Enum AGSGDBTaskResponseType renamed to AGSGDBSyncTaskResponseType
  • Function AGSGDBTaskResponseTypeAsString(...) renamed to AGSGDBSyncTaskResponseTypeAsString(...)
  • Class AGSGDBTaskStatusInfo renamed to AGSGDBSyncTaskStatusInfo
  • Method generateGeodatabaseAndDownloadWithParameters:downloadFolderPath:useExisting:status:completion: renamed to generateGeodatabaseWithParameters:downloadFolderPath:useExisting:status:completion:.
    //From:
    [self.gdbTask generateGeodatabaseAndDownloadWithParameters:params downloadFolderPath:nil useExisting:YES status:^(AGSAsyncServerJobStatus status, NSDictionary *userInfo) {
       ...
    } completion:^(AGSGDBGeodatabase *geodatabase, NSError *error) {
       ...
    }];
    
    //To:
    [self.gdbTask generateGeodatabaseWithParameters:params downloadFolderPath:nil useExisting:YES status:^(AGSResumableTaskJobStatus status, NSDictionary *userInfo) {
       ...
    } completion:^(AGSGDBGeodatabase *geodatabase, NSError *error) {
       ...
    }];
  • Method syncGeodatabase:params:status:completion: includes an additional parameter in the completion block to return edit errors encountered during the sync operation. These errors represent edits that were rejected by the server.
    //From:
    [self.gdbTask syncGeodatabase:self.geodatabase params:param status:^(AGSAsyncServerJobStatus status, NSDictionary *userInfo) {
      ...
    } completion:^(NSError *error) {
      ...
    }];
    
    //To:
    [self.gdbTask syncGeodatabase:self.geodatabase params:param status:^(AGSResumableTaskJobStatus status, NSDictionary *userInfo) {
      ...
    } completion:^(AGSGDBEditErrors *editErrors, NSError *syncError) {
      ...      
    }];

AGSTileCacheTask

  • Class renamed to AGSExportTileCacheTask
  • Class AGSTileCacheSizeEstimate renamed to AGSExportTileCacheSizeEstimate
  • Class AGSGenerateTileCacheParams renamed to AGSExportTileCacheParams
  • Method generateTileCacheAndDownloadWithParameters:downloadFolderPath:useExisting:status:completion: changed to exportTileCacheWithParameters:downloadFolderPath:useExisting:status:completion:
    //From:
    [self.tileCacheTask generateTileCacheAndDownloadWithParameters:params downloadFolderPath:nil useExisting:YES status:^(AGSAsyncServerJobStatus status, NSDictionary *userInfo) {
      ...  
    } completion:^(AGSLocalTiledLayer *localTiledLayer, NSError *error) {
      ...
    }];
    
    
    
    //To:
    [self.tileCacheTask exportTileCacheWithParameters:params downloadFolderPath:nil useExisting:YES status:^(AGSResumableTaskJobStatus status, NSDictionary *userInfo) {
       ...     
    } completion:^(AGSLocalTiledLayer *localTiledLayer, NSError *error) {
       ...
    }];
  • Method estimateSizeWithParameters:status: changed to estimateTileCacheSizeWithParameters:status:completion:
    //From:
    [self.tileCacheTask estimateSizeWithParameters:params status:^(NSString *jobId, AGSTileCacheJobStatus status, NSArray *messages, id result, NSError *error) {
       ...
    }];
    
    //To:
    [self.tileCacheTask estimateTileCacheSizeWithParameters:params status:^(AGSResumableTaskJobStatus status, NSDictionary *userInfo) {
      ... 
    } completion:^(AGSExportTileCacheSizeEstimate *tileCacheSizeEstimate, NSError *error) {
      ...     
    }];
  • Property tiledServiceInfo changed to be of type AGSMapServiceInfo instead of AGSTileCacheInfo

AGSFeatureTable

  • Method deleteFeature: has been changed to return a BOOL indicating whether the operation succeeded, and accept a new parameter to return the underlying error if the operation failed.
    //From:
    AGSEditResult* result = [featureTable deleteFeature:f];
    BOOL success = result.success;
    AGSEditResultError* err = result.error;
    
    //To:
    NSError* err;
    BOOL success = [featureTable deleteFeature:f error:&err];
  • Methods addFeature: and updateFeature: have been replaced by a single saveFeature:error: method that updates the feature if it already exists in the table, or adds it if it doesn't.
  • Methods addFeatures: , updateFeatures:, and deleteFeatures: which perform batch edits have been removed. No replacement.

AGSGDBFeature

  • Method fetchAttachmentsWithCompletion: takes an additional parameter in the completion block to report any errors encountered during the operation.
    //From:
    [self.feature fetchAttachmentsWithCompletion:^(NSArray *attachments){
      ...
    }];
    
    //To:
    [self.feature fetchAttachmentsWithCompletion:^(NSArray *attachments, NSError* error){
      ...
    }];
  • Methods addAttachment: and deleteAttachment: now return void instead of BOOL

AGSGDBReplicaInfo

  • Class renamed to AGSGDBSyncEnabledGeodatabaseInfo
  • Property replicaID renamed to syncEnabledGeodatabaseID

AGSFeatureServiceSyncCapabilities

  • Property supportsPerReplicaSync renamed to supportsPerGeodatabaseSync

AGSGDBSyncModelPerReplica

  • Enum renamed to AGSGDBSyncModelPerGeodatabase

AGSAsyncServerJobStatus

  • Enum renamed to AGSResumableTaskJobStatus

AGSTileCacheInfo

  • Class replaced with AGSMapServiceInfo

AGSGDBRelationship

  • Class replaced with AGSRelationship

Related topics