ArcGIS Maps SDKs Native Blog - Page 18

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Latest Activity

(224 Posts)
Nicholas-Furness
Esri Regular Contributor

After some discussion, the decision has been made to deprecate the ArcGIS Runtime SDK for macOS. The upcoming 100.5 update will be the last release of the dedicated Runtime SDK for macOS. As with any other release, support will be provided according to the Product Lifecycle Support Policy.

It's not a decision taken lightly but, for a number of reasons, we're confident that it's the right move. 

Firstly: interest in the Runtime SDK for macOS has been low. By freeing up team members from maintaining it (including not just the ArcGIS Framework, but also the Samples App, guide documentation, etc.), we'll be able to implement improvements across the entire Runtime SDK family more effectively.

Secondly: the decision was made easier given that developers targeting macOS as a platform still have the option of using the ArcGIS Runtime SDK for Java or ArcGIS Runtime SDK for Qt. If you are considering developing Runtime apps targeting macOS, we recommend you investigate those.

If you have questions about this deprecation, feel free to use the comments section below or, if you're coming to the Developer Summit in Palm Springs, come and see us at the developer island.

more
0 0 1,551
MaraStoica4
Regular Contributor

Data is at the heart of every business. Collecting and storing data is done in a variety of ways, from paper forms to custom-built applications. You, our customers, have asked us to help with the transition from paper to digital by providing you with a collection app that is configurable and customizable to work with your own data and specific workflows.

We are proud to deliver an open source app that hopefully fits many of your organization's data collection needs. Because we are releasing the app open source and under an Apache license, you are welcome to take it, modify it to match your needs, and use it as you see fit.

Data Collection for .NET is a WPF application built using the ArcGIS Runtime SDK for .NET and it features common functionality encountered when collecting data.

Identify map data

Identify

Collecting data means also knowing what is around you. Click on one of the data points on the map to bring up information about it. If you need to edit it, clicking on the pencil icon will start an edit session. It's as simple as that!

Collect new data point

Collect

When you're ready to add a new data point, click the plus button to begin. You'll be prompted to select a location for your new data point and add some information about it.

Work offline

Offline

To support remote collection in areas without network access, we added the ability to work offline. Simply navigate the map to your desired work area and select "Work Offline" from the menu. The app will download the map along with its data and will allow you to collect data points when you are disconnected from the network. When you're back in the office or able to connect to a network, select "Sync Map" from the menu to have your changes merged with the online version of your map.

Do you think this is something you could use? Take a look at the full documentation and get the source code to the app from GitHub!

Happy collecting!

more
3 4 2,554
Nicholas-Furness
Esri Regular Contributor

The Runtime SDK does a lot of work behind the scenes to make it as simple as possible for you to write great, interactive mapping apps with fast, smooth user interfaces.

Getting out of the way

Key to that is making sure that when you ask Runtime to do something asynchronous (query some features, autocomplete an address, load a service definition etc.), that it gets off the thread you called from as quickly as possible and does its work on another thread. Runtime does this really well and you should never see it get in your way while it's doing something.

But when it's done doing that something, which thread does Runtime use to let you know?

The good news is iOS and Runtime work together so you might never have to worry about this. But you're a good developer, and you're doing some carefully thought out threading yourself, so you want to know the details, right?

UI and the main thread

Where you need to know which thread you're on is if you're updating your app's UI. In iOS, all UI updates must be done on the main thread (or the Main Thread Checker will come after you and your UI won't behave). So if you're not on the main thread and you want to enable that button and update that label, you need to fix that.

Luckily, any time iOS enters your code because of a user interaction or view-related hook (e.g. viewDidLoad()), you will already find yourself on the main thread. For a lot of developers this means not having to worry about threading at all until they build something cpu-intensive, at which point they'll need to push that work onto another thread¹.

Efficient behavior

Even though Runtime will use other threads to get out of your way, there are some reasons it's better not to switch threads if possible.

  • Context switching between threads takes up CPU cycles.
  • There are some common workflows where even though the pattern is asynchronous, it's quite possible Runtime already has the answer for you and can hand it over immediately. In those cases, context switching would be a waste of time.

Adding it all together

These considerations combine to help Runtime determine how to call back to you on the various callback blocks, observers, and change handlers provided by the Runtime SDK.

Here's a quick rundown of the ways the ArcGIS Runtime SDK for iOS might call back to you, and the thread you should expect to be called back on:

Operation/HandlerThreadNotes

Explicit Calls:

Main | Any
  • If you call from Main, Runtime will call back on Main.
  • If you don't call from Main, Runtime could call back on any thread.

Calling Runtime from the main thread is a pretty good indicator that you're calling because of a user interaction, so it's reasonable to expect that you'd want to update some UI when Runtime responds (and that always needs to happen on the main thread).

But if you didn't call Runtime from the main thread, maybe there isn't a pair of eyes waiting for the result so Runtime skips the overhead of making sure it's back on the main thread when it responds, ensuring your robots can continue at full speed.

AGSGeoViewTouchDelegate

Main
  • Runtime will always call back on Main.

Just as iOS enters your code on the main thread when there's some user interaction, Runtime makes sure to do the same through the AGSGeoViewTouchDelegate. So if you're handling a user tapping on the map, for example, it's safe to update your UI directly.

However, if you're observing some property that happens to be changing because of user interaction (e.g. using KVO to monitor mapScale), the "State Feedback" rule below applies.

AGSLoadableMain
  • Runtime will always call back on Main².

More often than not, customer code calls into load() or retryLoad() from the main thread. If an item is already loaded, Runtime can then respond immediately with no context switching required. It makes the loadable pattern very fast for the case where, as the result of a user interaction, you need to ensure something is loaded before doing something else (e.g. determining a feature layer's renderer). In that case, only the very first interaction will incur a performance penalty, but you write your code once and it'll handle the first time or the 100th.

State Feedback:

Any
  • Runtime could call back on any thread.

Context switching back to the main thread could mean that feedback is returned out of order or be delayed, so Runtime will provide that feedback immediately on whichever thread is current. If you need to update your UI as a result, you should dispatch your UI code to the main thread yourself with something like:

DispatchQueue.main.async {
    /* update the UI */
}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Summary

The above can largely be summarized like this:

  • Things that update status or state (progress, KVO, etc.) can happen on any thread.
  • Deliberate actions (Tasks and Jobs) that are called from the main thread will receive their status updates and results on the main thread. If they're called from some other thread, the thread used to respond could be any thread.
  • AGSLoadable and AGSGeoViewTouchDelegate will always call back on the main thread.

Let me know in the comments if you have questions about any of the topics brought up here. This can be a complex issue, but iOS and the Runtime SDK make sure that you usually don't need to worry about it.


¹ iOS includes a powerful thread abstraction API (Grand Central Dispatch, or GCD) that's worth learning about to help with concurrent programming and slick app experiences. Here's a great 2-part tutorial.

² Note: this load() behavior was updated at release 100.3 to provide a number of performance optimizations. Up until release 100.2.1, Runtime would promise to call back on the main thread only if you called in from the main thread (identical to the current Task/Job behavior).

more
3 2 1,514
EricBader
Honored Contributor

Today, The Qt Company announced the release of Qt 5.12 LTS. This release brings with it support for Xcode 10 for the first time. ArcGIS Runtime SDK for Qt 100.4 was built with Qt version 5.9, which for iOS builds, utilizes Xcode 9. 

What does this mean?

If you develop iOS apps with ArcGIS Runtime SDK for Qt 100.4, you should continue to use Xcode 9. We have performed some ad-hoc testing with Xcode 10, and have not found any new issues, but it is possible that there are some binary compatibility issues, and we therefore do not recommend this. Starting in March 2019, Apple's App Store will require that all submission be built with Xcode 10. We recommend pushing any required updates before this date and waiting for the 100.5 release of ArcGIS Runtime, which will support Xcode 10. We are planning on releasing 100.5 near the end of Q1 2019, so we hope this will cause minimal issues.

Thanks!

The ArcGIS Runtime SDK for Qt Development Team

more
1 1 866
EricBader
Honored Contributor

Today, The Qt Company announced that Qt 5.12 LTS has been released! LTS. This stands for "Long-Term Support". There are some important changes in this release that could affect current ArcGIS Runtime Qt developers who build for Android. We would like to bring these to your attention.

Prior to Qt 5.12, the Qt Android kits were built using the GCC compiler. Starting with Qt 5.12, the Android kits are now built with the Clang compiler and a newer version of the NDK, which no longer supports GCC. What does this mean to you? If you develop Qt Android apps and use ArcGIS Runtime SDK for Qt versions 100.0-100.4, you will not be able to use 5.12, as the currently released Android binaries support GCC only. If you require Android and Qt 5.12, you will need to wait for our 100.5 release, which will be built with 5.12 and Clang. Other platforms are not affected, and you can use 5.12 with our previous releases of ArcGIS Runtime without any known issues.

As always, we are keen to hear about your experiences.

Happy coding!

The ArcGIS Runtime SDK for Qt Development Team

more
0 0 1,165
MichaelBranscomb
Esri Frequent Contributor

We are excited to announce the release of the Toolkit for ArcGIS Runtime SDK for .NET v100.4. The Toolkit contains controls and utilities you can use out-of-the-box to accelerate the development of your .NET apps for Android, iOS, and Windows. You also have access to the complete Toolkit source code on Github enabling you to fully customize the Toolkit for your specific project requirements.

Features

  • Legend: Display a legend for a single layer in your map or scene and optionally for its sub layers.
  • SymbolDisplay: Render a symbol in a control (also used in the Legend).
  • PopupViewer: Display details and media, edit attributes, geometry and related records, and manage the attachments of features and graphics (popups are defined in the popup property of features and graphics).
  • Compass: Automatically show a compass when the user rotates map. Optionally auto-hide the compass when the user rotates the map north up.
  • FeatureDataField: Display and optionally allow editing of a single field attribute of a feature.
  • MeasureToolbar: Measure distances and areas on the map view.
  • ScaleLine: Display the current scale of the map view.
  • TimeSlider: Allow the interactive definition of a time extent and animate time moving forward or backward. Can be used to manipulate the time extent in a map or scene view.

Where possible each control is available for all APIs supported for development with ArcGIS Runtime SDK for .NET: UWP, WPF, Xamarin.Android, Xamarin.iOS, and Xamarin.Forms for Android, iOS, and UWP. Feature availability by platform/API is indicated in the Github repo readme.

Getting started

As a developer you have three options for working with the Toolkit:

  1. Reference the latest stable or pre-release package from NuGet.org
  2. Reference the latest master branch commit NuGet package from AppVeyor
  3. Build the Toolkit source

A set of basic samples are included in the Toolkit repo.

Roadmap

The Toolkit is an active development project with more controls and utilities on the roadmap. You can even get an early glimpse of some of these new controls in the Toolkit Preview package (currently in preview are the SignInForm and TableOfContents for WPF). Also on the roadmap are improved Guide and API reference documentation and additional samples.

Reporting issues

We encourage you to try out and use the Toolkit within your projects and we look forward to hearing your feedback. If you find any bugs while using the Toolkit please submit new issues in the Toolkit repo. At this time we are not accepting new PRs for full features but if there are new controls you would like to see included please submit an issue to request the enhancement.  

Cheers

The ArcGIS Runtime .NET Team

more
0 13 3,758
by Anonymous User
Not applicable

You've been asking and we listened. The Runtime Example Apps team is thrilled to announce the release of Data Collection for iOS, the newest member of the ArcGIS Runtime Example Apps family. 

We built the app as the springboard for your organization's iOS data collection solution. The app is designed to consume your organization's web maps, out of the box. Written in Swift, this app demonstrates best practices for consuming the ArcGIS Runtime iOS SDK.

A user can view and edit data (including related records) in both connected and disconnected work environments and easily synchronize changes between an offline map and its corresponding web map.

To demonstrate the app, we curated a sample web map named Trees of Portland. Let's take a quick look at the app in action.

Collect Data

To add a new feature, tap the plus button located in the navigation bar at the top-right and pan the map until the pin is in the correct location. Tap the green check button and you're presented with a form to fill out the tree's attributes.

Add feature

Complete the form and your new feature is added to the map. You can then add related records, if your web map is configured accordingly.

Add related record

Take Map Offline

Select an extent of the map to take offline and the app kicks off a generate offline map task. Once downloaded a user can toggle between working offline and . Tap to synchronize changes bi-directionally.

Generate offline map

For the complete picture, have a look at the documentation. We encourage you to clone or fork the open source app which you can download from GitHub and build using the Runtime iOS SDK (v 100.3 or later). Contributions to the project are welcome as is general feedback. 

more
4 1 849
EricBader
Honored Contributor

We're pleased to introduce for the first time the ArcGIS Runtime SDK Sample Viewer! This application is a great tool for demonstrating the new and powerful capabilities in ArcGIS Runtime SDK 100.3 for Android. Install it for free today!

ArcGIS Runtime SDK Sample Viewer - Apps on Google Play 

You'll also find the .apk on arcgis.com, publicly available today.

Enjoy!

more
0 0 684
EricBader
Honored Contributor

Today, we are happy to announce the release of ArcGIS Runtime SDK 100.3 (Update 3)! Please have a look at all that is new across all of the SDKs, as well as the specific items in the release notes for Java

We are looking to release another update in Fall 2018, Update 4, that will focus on another small collection of enhancements, most notably support for reading KML. Notice that we are announcing the deprecation of Java 8 support after Update 3 (Update 3 is supported through July 2022), and will stop supporting it in Runtime in a near future release. We want your feedback on this plan. Java 8's commercial end of life is January 2019, and so our focus will soon be on supporting the next LTS version of Java, Java 11. If you'd like to comment, please drop us a line here on GeoNet.

Sincerely,

The ArcGIS Runtime SDK for Java Team

more
0 0 612
EricBader
Honored Contributor

It's Update 3 release time! On top of the many exciting new features that are supported across the Runtime SDKs (web scenes, 3D distance measurement analysis, identifying and selecting web scene features, new WMS capibilities, etc), the Qt team has been hard at work adding some new features unique to this SDK for 100.3.

Here are some of the highlights...


Runtime API

  • Transactional edit support. This allows the developer to commit or rollback a set of edits as one transaction. Other APIs introduced this at Update 2, and Qt now supports this feature with Update 3.
  • Pagination of query results. This allows developers to set a result offset in the QueryParameters so that results can easily be paginated. Other APIs introduced this at Update 2, and Qt now supports this feature with Update 3.
  • Time aware layers. The TimeAware interface was added and implemented by FeatureLayer, RasterLayer, ArcGISMapImageLayer, and WmsLayer. The new API allows you to set a time extent on the GeoView, and all layers participating will be filtered by the time extent. Other APIs introduced this at Update 2, and Qt now supports this feature with Update 3.
  • The Runtime Error object is now creatable. This means that you can create custom Errors throughout your application and utilize the same error handling logic throughout your application, as well as provide additional details for any known issues.
  • Support for OpenGL rendering on Windows. Qt has two different rendering engines for the Windows platform : OpenGL and DirectX via ANGLE. By default, Qt will try and render using OpenGL and if the proper drivers are not available, it will fall back to using ANGLE. Previous releases of ArcGIS Runtime only supported ANGLE. Update 3 fully supports both OpenGL and ANGLE so that you can fully utilize either rendering engine and Qt's fallback mechanism for when OpenGL cannot be utilized on a given system. For more information on this, please see Qt's documenation - https://wiki.qt.io/Qt_5_on_Windows_ANGLE_and_OpenGL
  • Ability to get size and ID properties as either a string or int type in QML. Previously, these properties always returned as strings due to a limitation of the QML integer type being a 32-bit integer as opposed to 64-bit. You can now request the property as an int and get an actual QML int back.


Toolkit API

  • TimeSlider toolkit component. Coinciding with our new TimeAware support is a ready-to-use Toolkit component that allows you easily filter data based on time. The TimeSlider also allows you to play and pause an animation of your spatiotemporal data.
  • CoordinateConversion toolkit component. An easy-to-use UI component is now available to help you convert a given coordinate to one or more different formats. For example, you could convert from Decimal Degrees to MGRS with this tool. This tool has a slick new UI making use of the modern Qt Quick Controls 2 module.


SDK improvements

  • Improved API documentation details added, as well as additional code snippets added throughout the documentation.
  • Dozens of new samples have been added, with an extra emphasis placed on providing more fundamental samples, such as Geometry and GeometryEngine samples, as opposed to only new features.

We are looking forward to hearing about your experience with this exciting release. Happy coding!

- The Qt SDK Development Team

more
0 1 905
118 Subscribers