Our next major version update is out and available for download at the usual places in the SAP Marketplace for customers and in the SAP Community for everybody. The content is identical, you may sometimes see patches being available on Marketplace a bit earlier than they show up on Community.
System Requirements, Installing, Upgrading
This new release is built with the just released Xcode 10 and Swift 4.2. Because frameworks are not binary compatible, you won't be able to use any version of Xcode 9 with our latest SDK - but you probably can't wait upgrading to Xcode 10 anyway. We've also posted patch PL06 of our SDK for iOS 2.0 SP02 that is built with Xcode 10; going forward this is the version we'll maintain, so you're safe in upgrading to Xcode 10 regardless of which version of our SDK you plan to use short-term.
Caution: If you're using theming functionality in your app, you must upgrade to 2.0 SP02 PL06 when running on iOS 12, otherwise your app will crash.
To upgrade from an earlier 2.x version to 3.0, simply replace the Assistant in your /Applications folder. Any apps that are managed in the Assistant can be upgraded by simply clicking on the project name and selecting ‘Refresh Frameworks…’ from the context menu. Open the Assistant main menu and ‘Export Frameworks…’ to extract the new frameworks on your disk so you can copy them into any Xcode project not managed by the Assistant.
We have eventually removed some deprecated APIs, you'll find the details in the upgrade instructions in our help pages. So, if you haven't adopted your app over the last couple service packs and patches - now's the time. We don't expect this being a big deal but it has to be done so we can avoid having 'legacy' growing left and right in our API exposure.
Our brand-new Assistant
One of the first things you'll notice is that we've completely redesigned the Assistant app. The Assistant is an essential part of the SDK since version 1.0 and was always meant to help getting started with the SAP Cloud Platform SDK for iOS and be the integration point between Xcode and SAP Cloud Platform. From what started small, we kept adding features to a point where we felt it necessary now to rethink the way we organize the Assistant and its multitude of features, which include
Generation of out-of-the-box Xcode projects for native apps that integrate with SAP backends via SAP Cloud Platform
Configuration of SAP Cloud Platform Mobile Services
Support for SAP API Hub and easy consumption of managed APIs
Use of SAP Translation Hub for localization of Xcode projects
Update existing projects by replacing the SDK framework files and regenerating proxy classes
With this new version, our goal was to have a very clear guidance through the different supported scenarios, emphasis on what configuration affects cloud vs. local entities, and most importantly: prepare the UX so it can also sustain all the great new features that we plan adding in the next iterations to make it even easier managing your Xcode projects and integrating with your development environment as well as SAP landscapes.
Here are a couple screenshots to get a first impression on what we've achieved
Let's stay visual for a bit longer and look at some of the enhancements we're delivering on the UI control side.
We are shipping a Fiori for iOS calendar control, eventually. It comes with the typical features that you've asked for, month/week view, date picker, single selection as well as range selection.
It's been a while that we added support for maps, but we keep investing and expanding the scope. It can be a bit involved arranging all the different elements of a map on the view, so we're now shipping a map floorplan that makes it easier for you to set things up for a full screen map in your app, including the legend, the toolbar, and all other components.
In addition, we now also support creation of geospatial objects on maps (lines, polylines, polygons). This also includes complicated operations like splitting a line, dragging each point, reordering points. This feature is very useful for apps in field worker and maintenance scenarios, but I'm sure there are plenty more great scenarios that we couldn't even think of.
We got great feedback on the chart controls we started shipping earlier this year, so we keep adding new chart types. This time, we add stacked column charts and waterfall charts:
Even though harder to visualize, we didn't neglect the foundational frameworks either in this release and kept improving, stabilizing, and adding where needed based on customer feedback and our own observations.
In the foundation framework we've enhanced the settings download to now also favor the settings download per device over download on the user level, wherever applicable. Additionally, we've streamlined the log message handling for OSLogConsole logging as well as log files uploaded to SAP Cloud Platform. Security is important - all relevant libraries like OpenSSL have been updated to the lasted version to close any potential vulnerabilities.
The usage event handling has been enhanced; if you're in the business of building apps that can be used by multiple users on the same device, we now allow configuration so that usage events can be stored and uploaded separately per user. In addition, we now have more pre-defined usage event types that you can choose to emit, incl. basic device information but also screen transition and button tap events.
We started supporting offline, i.e. non-connected apps, better in the last release and rounded off a couple rough edges so that it's now even easier to build apps that start and restore state while the user is offline. In these cases we obviously cannot pull changed server configuration, but we'll allow the user to get into the app based on the locally available settings. This is also reflected in the generated app that is produced by the Assistant.
When the passcode policy changes on the Cloud, we now also support enabling Touch ID automatically during the restore flow of the app; no reason to bother the end user at all in this case.
The online OData framework got some attention on the lowest layers and improvements on the networking stack. We made online OData calls cancellable now, so when you determine you've requested a resource but actually don't need it anymore, you can save bandwidth and threads on the device and cancel these requests. Sounds odd, but can happen very easily, e.g. when the user scrolls through a table quickly and you're loading resources like images asynchronously.
Custom headers and request options can now be given on a per-method level in our proxy classes. Dedicated API for offline parameters and request options makes handling a lot easier, no need anymore to work with an error-prone String-based API for you.
When you're working with local transactions you have more control than ever with this release. We've implemented optimization techniques that allow merging multiple updates into a single request, or removing a create + delete operation completely from the queue; all of course only if you've told the framework to do so. Similarly, you can prevent empty updates from being deleted if they're still important for your backend.
It can be very helpful for users if they see local changes in the UI; we added a flag that helps determining if an entity has locally modified descendants (vs. only modified itself as you could figure out in earlier releases with the sap.isLocal flag). You can now also differentiate between all local changes, which may not have been submitted or which may have already been submitted/uploaded but not yet downloaded, and pending changes (only those which haven’t been submitted yet).