This topic describes what's new in version 10.2 of ArcGIS Runtime SDK for iOS, including new features, enhancements, issues addressed, and tips for migrating from previous versions.
Version 10.2 Update 1
This update includes some minor bug fixes, performance improvements to tile rendering, and the ability to use the new Geotrigger SDK for iOS alongside ArcGIS Runtime SDK in your applications.
Improved platform support
The API supports developing applications for iOS 7. Visual components such as popups, callout, etc adjust their style to closely match the iOS 7 theme. This allows you to build applications that are consistent with the system look and feel on both iOS 7 and iOS 6 devices.
iOS 5 is no longer supported with this release. Your apps will need a minimum of iOS 6 running on the device.
The ArcGIS library also now includes an armv7s slice that is optimized for A6 processors found in newer devices such as iPhone 5.
Offline map use (in beta)
The following functionality is in beta. It cannot be deployed in a production environment. Although it is stable, it may have incomplete functionality or documentation and may contain some minor issues. If you experience problems or want to provide feedback, please contact Esri Technical Support or visit the ArcGIS Runtime SDK for iOS forum.
Feature editing and sync
AGSGDBTask allows you to download features in the form of a replica geodatabase (*.geodatabase file) for an area of interest from a sync-enabled ArcGIS Feature service. You can choose to include all layers from the service in the geodatabase, or just a subset of layers. You can access the geodatabase through AGSGDBGeodatabase class and query or edit features using AGSGDBFeatureTable class. Features in the geodatabase can be viewed on a map using AGSFeatureTableLayer even when the devices does not have network connectivity. For more information, see Create an offline map.
Once you regain connectivity, you can synchronize changes between the geodatabase and the service. When synchronizing, you can choose to only upload changes to the service, only download changes from the service, or both. Feature attachments, stand-alone tables (no geometry column), and relationships between tables and layers are supported. For more information, see the Sync offline edits topic
Download tile cache
AGSTileCacheTask allows you to download a tile package (*.tpk file) for an area of interest from a supporting tiled ArcGIS Map service. The tile package can be viewed in a map using AGSLocalTiledLayer even when the device does not have network connectivity. For more information, refer to the API reference.
AGSLocator now supports geocoding addresses and reverse-geocoding locations based on address locator datasets on the device. For more information, see the Locate an address topic.
AGSRouteTask now supports generating routes and turn-by-turn directions based on network datasets on the device. For more information, see the Find a route topic.
Easily convert between strings representation of coordinates (Decimal Degrees, Degrees Minutes Seconds, UTM, MGRS, GARS, GEOREF, and USNG) and AGSPoint objects using methods on the AGSPoint(CoordinateConversion) category.
New geodesic operations
AGSGeometryEngine now allows you to easily compute geodesic areas and distances. You can also easily create shapes such as ellipse and sector which are geodesically accurate. Finally, you can perform convex hull operations to compute the minimum bounding geometry that encloses a given set of points, lines, or polygons.
The API provides a new class, AGSOAuthLoginViewController, that implements signing in to ArcGIS Online using the OAuth 2.0 protocol. This allows you to build apps for the new Marketplace. The class displays a standard Esri login page to accept user information such as a username and password. It then securely negotiates an access token with ArcGIS Online on behalf of that user and returns to you a credential object that you can use to connect to www.ArcGIS.com. When the access token expires, the API automatically negotiates a new one so that you can continue using the credential object. This has many benefits. It presents a consistent login interface to users who are familiar with the ArcGIS platform. It is more secure because the app does not have access to the user's input; the input is only exchanged securely with the platform. The login page displays the name of your application so users can be confident it can be trusted. And finally, it allows you to focus more on the unique elements of your app and leave the mundane task of authentication to the API.
For more information, refer to the User Logins and OAuth 2 topic.
By virtue of supporting OAuth, the AGSOAuthLoginViewController class can also permits users to log into ArcGIS Online with the same accounts they use to access their enterprise information systems. The advantage of this approach is that users do not need to create additional logins within the ArcGIS Online system; instead, they use the login that is already set up within their enterprise system.
The Setting up enterprise logins topic contains information on how to enable enterprise logins for ArcGIS Online organization accounts.
The API provides a single sign-on experience when accessing services on an ArcGIS Server that has been federated with a Portal which uses Integrated Windows Authentication (IWA) or Public-key Infrastructure (PKI) security. In such cases, the credential used to access the portal is in-turn used to gain access to services on any federated servers.
Simplified API for fetching popups
AGSWebMap class has a new method called fetchPopupsForExtent: that conveniently fetches popups for any features in the extent that belong to layers that have a popup definition. The method appropriately hit-tests layers and queries backing services to find features which are returned asynchronously as popups to the delegate.
Support for Microsoft Office document attachments
AGSPopupsContainerViewController now supports viewing attachments that are Microsoft Office documents such as doc, docx, xls, xlsx, ppt and pptx files.
Improved rendering of graphics
AGSGraphicsLayer now supports 2 rendering modes - dynamic and static. In dynamic mode, graphics update dynamically as you interact with the map, always appearing clean and crisp, constantly repositioned and reoriented to be face-up as you rotate the map. In static, graphics are first rasterized and then rendered on the map. This can lead to some brief pixelation of the symbols as you navigate the map. Static mode provides a significant performance improvement, allowing you to display many more graphics at the same time. The default is static mode, and is the traditional way graphics have been drawn in past releases. Dynamic mode is new at this release and is best suited for cases when you have a small number of graphics (vertices) that need to be updated frequently.
The SDK has support for 2 additional languages - Czech and Finnish. This brings the total to 24 languages. Also, new at this release, error messages generated by the SDK are localized so that you can display them to users of your application.
OGC WMTS support
You can display maps from OGC-WMTS compliant services using AGSWMTSLayer.
Migrating existing applications
XCode project changes
- Minimum XCode 5 and iOS 7 SDK are required for development. Older versions of XCode and iOS SDK are not supported.
- The Architectures setting must be set to the optionStandard architectures (armv7 and armv7s). This is because the ArcGIS library only contains slices for armv7 and armv7s. It does not contain an arm64 slice which provides optimizations for 64-bit processors such as A7. However, you can continue to run your applications on devices with 64-bit processors, although they will run in 32-bit mode.
- If you set the Enable Modules (C and Objective-C) setting to Yes you will not have to explicitly import any iOS frameworks required by the ArcGIS library. These will be automatically imported for you. All you need to import is the libc++.dylib library which can either be imported in the Build Phases tab or by adding the flags -l c++ to the Other Linker Flags setting.
A complete list of API changes is available in the Deprecated section of the API Reference. The most notable changes and those that won't be flagged automatically through XCode warnings are described below.
Changes to accommodate a generic feature abstraction
The new protocol <AGSFeature> represents an abstraction for vector features. Concrete implementations are provided by AGSGraphic, which represents a feature in memory, and AGSGDBFeature, which represents a feature from a local persistent store, for instance, a geodatabase. Some existing methods that explicitly referenced AGSGraphic have been made generic to reference <AGSFeature> instead.
- <AGSMapViewTouchDelegate> protocol
- Method mapView:didTapAndHoldAtPoint:mapPoint:graphics: renamed to mapView:didTapAndHoldAtPoint:mapPoint:features:
- Method mapView:didMoveTapAndHoldAtPoint:mapPoint:graphics: renamed to mapView:didMoveTapAndHoldAtPoint:mapPoint:features:
- Method mapView:didEndTapAndHoldAtPoint:mapPoint:graphics: renamed to mapView:didEndTapAndHoldAtPoint:mapPoint:features:
- <AGSMapViewLayerDelegate> protocol
- Method mapView:shouldFindGraphicsInLayer:atPoint:mapPoint: renamed to mapView:shouldHitTestLayer:atPoint:mapPoint:
- <AGSPopupsContainerDelegate> protocol
- Method popupsContainer:didStartEditingGraphicForPopup: renamed to popupsContainer:didStartEditingForPopup:
- Method popupsContainer:didFinishEditingGraphicForPopup: renamed to popupsContainer:didFinishEditingForPopup:
- Method popupsContainer:didCancelEditingGraphicForPopup: renamed to popupsContainer:didCancelEditingForPopup:
- Method popupsContainer:readyToEditGraphicGeometry:forPopup: renamed to popupsContainer:readyToEditGeometry:forPopup:
- AGSRenderer class
- Method swatchForGraphic:geometryType:size: changed to swatchForFeature:geometryType:size:
- Method swatchForGraphic:size: changed to swatchForFeature:size:
Changes to callout & info template delegates
The properties AGSGraphic.infoTemplateDelegate and AGSFeatureLayer.infoTemplateDelegate, and protocol <AGSInfoTemplateDelegate> have been deprecated. The preferred way to setup a callout for a feature is to do it on a layer by layer basis by implementing <AGSLayerCalloutDelegate> in your class and setting it as AGSLayer.calloutDelegate or on a map view basis by implementing <AGSCalloutDelegate> in your class and setting it as AGSCallout.delegate.
The property AGSLocationDisplay.infoTemplateDelegate and protocol <AGSLocationDisplayInfoTemplateDelegate> have been deprecated. The preferred way to setup a callout for the map's location display is to implement <AGSCalloutDelegate> in your class and set it as AGSCallout.delegate
The propertyAGSMapView.calloutDelegate and protocol <AGSMapViewCalloutDelegate> have been deprecated. Use AGSCallout.delegate and <AGSCalloutDelegate> instead.