What’s new in Mobile development kit client 25.6

Estimated read time 17 min read

Hello Community,

I am happy to announce that a new release of the Mobile Development Kit(MDK) is available for all Mobile Services customers and can be downloaded on the SAP Software Center and will soon be available on community Download page as well.

The SAP Mobile Services Client has also been updated to 25.6.0 both in the Google Play Store and in Apple App Store.

SAP Mobile Development Kit enables developers and technical business users to build cross-platform mobile applications. It allows you to build your application once, in an integrated development environment (SAP Business Application Studio / VSCode extension) and run it natively on Mobile (Android & iOS).  

Below enhancements are available only on iOS and Android platforms:

New UI enhancements Support Grouping in Object Table ControlSupport Body Elements in Card Collection ControlDonut Chart SupportSupport Customizing Placeholder in Form Cell List Picker ControlBottom Sheet Support for Popover Menu (Android Only)Support Top Caption in Form Cell Segmented Control (iOS Only)API and Syntax enhancements
Support Lock and Wipe Settings in the MDK ClientSupport Device Compliance in MDK ClientExpose Generate Content API from Gemini LLMSimplify Application Launcher and Splash Screen Generation in MDK Branded ClientSupport for getCell in DataTableRowProxy

Support Grouping in Object Table Control 

MDK now supports grouping items in an Object Table section, making it easier to get an overview of data on large list screens.

//excerpt of a page
“Grouping”: {
“GroupingProperties”: [
“CategoryName”
],
“Header”: {
“Items”: [{
“Title”: “Category: {CategoryName} “,
“Styles”: {
“Title”: “DataTableGroupHeaderItem”,
“BackgroundColor”: “sectionBgColor”
}
}]
}
},
“_Type”: “Section.Type.ObjectTable”,
….

Grouping in Object Table control

For more information, refer to the Grouping documentation and its API Reference.

Support Body Elements in Card Collection Control

The Card Collection control provides brief, related pieces of information and serves as an entry point, teaser, or preview for more detailed content. By tapping on a card, users can select it and navigate to a dedicated page with expanded information.

We have now introduced Body Elements in the Collection control. The card body is the central part of the card, used to display additional information alongside the content shown in the card header. It is a separate container that can hold various components, with a flexible height to accommodate a reasonable number of UI elements.

Following contents can currently displayed in Card Body Elements currently supports:

TextLabel BarSpaceSeparator//excerpt of a page
“Body”: {
“_Type”: “Card.Type.Body”,
“OnPress”: “/MDK2504/Rules/Card/ShowToastMessage.js”,
“Contents”: [
{
“_Type”: “CardBodyContent.Type.Text”,
“Text”: “The card body is the central part of the card that is used to display additional information alongside the content shown in the card header.”,
“NumberOfLines”: 5
},
{
“_Type”: “CardBodyContent.Type.LabelBar”,
“Layout”: {
“LayoutType”: “Vertical”
},
“ItemSeparator”: true,
“Items”: “/MDK2504/Rules/Card/CardStaticContentLabelBarItems.js”
},
{
“_Type”: “CardBodyContent.Type.Space”,
“NumberOfSpacings”: 3
},
{
“_Type”: “CardBodyContent.Type.Separator”,
“_Style”: “card-label-2”
}
]
},

Body Elements in Card Collection Control

For more information, refer to th Card Collection documentation and its API Reference.

Donut Chart Support  

You can now use the Donut Chart type to visualize data in a new way that emphasizes various aspects of the dataset. Donut charts are ideal for displaying proportions of categorical data in a part-to-whole analysis. They take a single dataset and represent the ratios in a circular format.

Support for the Donut Chart type is available in the Analytic Card Collection, Chart Content Section, and Object Header Chart view UI controls.

Donut Chart in iOS

Donut Chart in Android

For more information, see these documentation on Donut chart support in Analytic Card Collection, Chart Content Section, and Object Header.

Support Customizing Placeholder in Form Cell List Picker Control

We have introduced a new property, Placeholder, for the List Picker Form Cell control to customize the placeholder text when no value is selected. This property provides contextual cues to guide business users in making their selections.

 

//excerpt of a page
{
“_Type”: “Control.Type.FormCell.ListPicker”,
“_Name”: “FormCellListPicker0”,
“PickerPrompt”: “Please select one single item”,
“PlaceHolder”: “Select Item”,
“IsEditable”: true,
“PickerItems”: [
“Alpha”,
“Bravo”,

]
}​

 
 

For more information, see this  documentation.

Bottom Sheet Support for Popover Menu (Android Only)

A new property, IsBottomSheet, has been introduced for the Popver Menu Action.

When set to true, the popover is displayed as a bottom sheet.When set to false or not defined, the popover is displayed as a dialog.{
“PopoverItems”: [{
“Icon”: “sap-icon://synchronize”,
“OnPress”: “/MDK2504/Actions/Service/SyncStartedMessage.action”,
“Title”: “Sync Changes”
}
],
“_Type”: “Action.Type.PopoverMenu”,
“IsBottomSheet”: true
}

 

For more information, see this  documentation.  

Support Top Caption in Form Cell Segmented Control (iOS Only)

Prior to this release, MDK displayed segmented Form Cell controls on iOS as single-line buttons, which  would dynamically switch to a stacked layout. With this release, we are introducing a new property for the Segmented Control: CaptionPosition. When this property is set to Top, the control will always use stacked layout.

{
“CaptionPosition”: “Top”, //”Adaptive”
“_Type”: “Control.Type.FormCell.SegmentedControl”,
“_Name”: “FormCellSegmentedControl2”,
“Caption”: “Top Caption”,
“ApportionsSegmentWidthsByContent”: false,
“Segments”: [
“Low”,
“Medium”,
“High”
]
}

For more information, see this  documentation.  

Support Lock and Wipe Settings in the MDK Client

We are adding support for Locking and Wiping settings on MDK client. This new feature will significantly improve security and protect business users’ sensitive information, helping safeguard them against unauthorized access or misuse of their devices.

Lock (users): Lock users on the specified device and force them to re-authenticate to continue using the app.Wipe (device registration) : Lock the user and clear all app data (including any local changes) on the device. User has to re-onboard to continue using the app.

 Administrator can lock users and wipe device registrations through the following options:

Initiate Locking or Wiping actions directly from the mobile services Admin UI using toggle buttons.

 

Set up offline locking/wiping policies that automatically lock or wipe the device when the configured number of days expires. Number of days are based on how long the app is offline (without connecting to server).

For more information, see this  documentation.  

Support Device Compliance in MDK Client

MDK introduces Device Compliance Detection, a security feature that allows app developers to perform various security checks to determine whether a device has been compromised.

Administrators must enable the Device Compliance Detection policies in the mobile services Admin UI to ensure compliance reports are sent to Mobile Services.  

When the Compliance Policy is enabled in the Mobile Services Admin UI:

Detection is automatically performed during app login and each time the app is restarted.The compliance status for each registration will be visible in the Mobile Services Admin UI.

For more information, see this  documentation.  

To check the status of your device, we have added a new Client API isDeviceCompliant()

If it returns true, the device is compliant. If it returns false, the device is non-compliant or has been compromised.var isRootDevices = clientAPI.isDeviceCompliant();

Support Generate Content API from Gemini LLM

In MDK’s previous release 24.11, we introduced support for leveraging the Chat Completion LLM API.

In this release, we are now introducing a new MDK Action called Generate Content, which connects to SAP AI Core and explicitly supports integration with Gemini Generate Content API, enabling seamless content generation. This API allows developers to create dynamic, structured content for articles, reports, and multimedia outputs, leveraging advanced AI models like Gemini 1.0 Pro and Gemini 1.5 Pro.

Instead of calling an LLM API provided directly by an LLM service provider, SAP AI Core offers a unified way to access LLM APIs from the most popular LLM service platforms. SAP AI Core manages the AI model and ensures scalable deployment in enterprise applications, maintaining compliance and security.

 The Generate Content LLM API can address various scenarios, including:

Text Input: Submit text prompts to the API to receive AI-generated responses.Input: Enhance the interaction by including images, allowing for a multimodal conversational experience.Function Calling: Enable the AI model to invoke specific functions or execute commands based on the conversation’s context.{
“_Type”: “Action.Type.AICore.Generate.Content”,
“Target”: {
“Service”: “/MDKDemoApp/Services/OpenAI.service”,
“Path”: “/models/gemini-1.5-pro:generateContent”
},
“Properties”: {
“Contents”: []
},
“ShowActivityIndicator”: true,
“ActivityIndicatorText”: “Processing …”,
“ActionResult”: {
“_Name”: “GenerateContent”
},
“OnFailure”: “/MDKDemoApp/Actions/Failure.action”
}​

For more information, see this  documentation.  

Simplify Application Launcher and Splash Screen Generation in MDK Branded Client

Prior to this release, the effort required to customize Application Launcher icon and Splash screen is non-trivial. A developer has to generate these icons and screens using different ways and different sizes for different platforms as documented here.

We have simplified and unified generating these application launcher icon and Splash screen for developers to provide these images under a single location.

A new property, AppImages, has been introduced in MDKProject.json , where you can mention the file details in the given properties.

“AppImages”: {
“Launcher”: {
“Logo”: “launcher”,
“Background”: “android_launcher_background”, // Android only
},
“Splash”: {
“Logo”: “splash_logo”,
“Background”: “background”, // iOS only
“LogoBackground”: “android_splash_background”, // Android only
}
}

All those files should be placed under yourMDKApp.mdkproject>App_Resources>MDK>Images

Please note you can still continue previous way of customization as mentioned in our documentation. However, in order to use this new way, we highly suggest to remove any customization or override files added for the launcher and splash screens in the App_Resources and App_Resources_Merge folders for both iOS and Android.

For more information, see this  documentation.  

Support for getCell in DataTableRowProxy

With this release, we are introducing getCell feature in DataTableRowProxy, enabling you to retrieve a DataTableCellProxy object using the column index of the target cell. This new functionality will seamlessly let you access and interact with specific cells within a table row.

let cellParent = context.getParent();
let columnIndex = context.getColumnIndex();
let getCell = cellParent.getCell(columnIndex).getValue();

New to MDK development?
Follow  these tutorials  to get started and learn more about Mobile development kit!
I am looking forward to your feedback/comments.

 

​ Hello Community,I am happy to announce that a new release of the Mobile Development Kit(MDK) is available for all Mobile Services customers and can be downloaded on the SAP Software Center and will soon be available on community Download page as well.The SAP Mobile Services Client has also been updated to 25.6.0 both in the Google Play Store and in Apple App Store.SAP Mobile Development Kit enables developers and technical business users to build cross-platform mobile applications. It allows you to build your application once, in an integrated development environment (SAP Business Application Studio / VSCode extension) and run it natively on Mobile (Android & iOS).  Below enhancements are available only on iOS and Android platforms:New UI enhancements Support Grouping in Object Table ControlSupport Body Elements in Card Collection ControlDonut Chart SupportSupport Customizing Placeholder in Form Cell List Picker ControlBottom Sheet Support for Popover Menu (Android Only)Support Top Caption in Form Cell Segmented Control (iOS Only)API and Syntax enhancementsSupport Lock and Wipe Settings in the MDK ClientSupport Device Compliance in MDK ClientExpose Generate Content API from Gemini LLMSimplify Application Launcher and Splash Screen Generation in MDK Branded ClientSupport for getCell in DataTableRowProxySupport Grouping in Object Table Control MDK now supports grouping items in an Object Table section, making it easier to get an overview of data on large list screens.//excerpt of a page
“Grouping”: {
“GroupingProperties”: [
“CategoryName”
],
“Header”: {
“Items”: [{
“Title”: “Category: {CategoryName} “,
“Styles”: {
“Title”: “DataTableGroupHeaderItem”,
“BackgroundColor”: “sectionBgColor”
}
}]
}
},
“_Type”: “Section.Type.ObjectTable”,
….Grouping in Object Table controlFor more information, refer to the Grouping documentation and its API Reference.Support Body Elements in Card Collection ControlThe Card Collection control provides brief, related pieces of information and serves as an entry point, teaser, or preview for more detailed content. By tapping on a card, users can select it and navigate to a dedicated page with expanded information.We have now introduced Body Elements in the Collection control. The card body is the central part of the card, used to display additional information alongside the content shown in the card header. It is a separate container that can hold various components, with a flexible height to accommodate a reasonable number of UI elements.Following contents can currently displayed in Card Body Elements currently supports:TextLabel BarSpaceSeparator//excerpt of a page
“Body”: {
“_Type”: “Card.Type.Body”,
“OnPress”: “/MDK2504/Rules/Card/ShowToastMessage.js”,
“Contents”: [
{
“_Type”: “CardBodyContent.Type.Text”,
“Text”: “The card body is the central part of the card that is used to display additional information alongside the content shown in the card header.”,
“NumberOfLines”: 5
},
{
“_Type”: “CardBodyContent.Type.LabelBar”,
“Layout”: {
“LayoutType”: “Vertical”
},
“ItemSeparator”: true,
“Items”: “/MDK2504/Rules/Card/CardStaticContentLabelBarItems.js”
},
{
“_Type”: “CardBodyContent.Type.Space”,
“NumberOfSpacings”: 3
},
{
“_Type”: “CardBodyContent.Type.Separator”,
“_Style”: “card-label-2”
}
]
},Body Elements in Card Collection ControlFor more information, refer to th Card Collection documentation and its API Reference.Donut Chart Support  You can now use the Donut Chart type to visualize data in a new way that emphasizes various aspects of the dataset. Donut charts are ideal for displaying proportions of categorical data in a part-to-whole analysis. They take a single dataset and represent the ratios in a circular format.Support for the Donut Chart type is available in the Analytic Card Collection, Chart Content Section, and Object Header Chart view UI controls.Donut Chart in iOSDonut Chart in AndroidFor more information, see these documentation on Donut chart support in Analytic Card Collection, Chart Content Section, and Object Header.Support Customizing Placeholder in Form Cell List Picker ControlWe have introduced a new property, Placeholder, for the List Picker Form Cell control to customize the placeholder text when no value is selected. This property provides contextual cues to guide business users in making their selections. //excerpt of a page
{
“_Type”: “Control.Type.FormCell.ListPicker”,
“_Name”: “FormCellListPicker0”,
“PickerPrompt”: “Please select one single item”,
“PlaceHolder”: “Select Item”,
“IsEditable”: true,
“PickerItems”: [
“Alpha”,
“Bravo”,

]
}​  For more information, see this  documentation. Bottom Sheet Support for Popover Menu (Android Only)A new property, IsBottomSheet, has been introduced for the Popver Menu Action.When set to true, the popover is displayed as a bottom sheet.When set to false or not defined, the popover is displayed as a dialog.{
“PopoverItems”: [{
“Icon”: “sap-icon://synchronize”,
“OnPress”: “/MDK2504/Actions/Service/SyncStartedMessage.action”,
“Title”: “Sync Changes”
}
],
“_Type”: “Action.Type.PopoverMenu”,
“IsBottomSheet”: true
} For more information, see this  documentation.  Support Top Caption in Form Cell Segmented Control (iOS Only)Prior to this release, MDK displayed segmented Form Cell controls on iOS as single-line buttons, which  would dynamically switch to a stacked layout. With this release, we are introducing a new property for the Segmented Control: CaptionPosition. When this property is set to Top, the control will always use stacked layout.{
“CaptionPosition”: “Top”, //”Adaptive”
“_Type”: “Control.Type.FormCell.SegmentedControl”,
“_Name”: “FormCellSegmentedControl2”,
“Caption”: “Top Caption”,
“ApportionsSegmentWidthsByContent”: false,
“Segments”: [
“Low”,
“Medium”,
“High”
]
}For more information, see this  documentation.  Support Lock and Wipe Settings in the MDK ClientWe are adding support for Locking and Wiping settings on MDK client. This new feature will significantly improve security and protect business users’ sensitive information, helping safeguard them against unauthorized access or misuse of their devices.Lock (users): Lock users on the specified device and force them to re-authenticate to continue using the app.Wipe (device registration) : Lock the user and clear all app data (including any local changes) on the device. User has to re-onboard to continue using the app. Administrator can lock users and wipe device registrations through the following options:Initiate Locking or Wiping actions directly from the mobile services Admin UI using toggle buttons. Set up offline locking/wiping policies that automatically lock or wipe the device when the configured number of days expires. Number of days are based on how long the app is offline (without connecting to server).For more information, see this  documentation.  Support Device Compliance in MDK Client MDK introduces Device Compliance Detection, a security feature that allows app developers to perform various security checks to determine whether a device has been compromised.Administrators must enable the Device Compliance Detection policies in the mobile services Admin UI to ensure compliance reports are sent to Mobile Services.  When the Compliance Policy is enabled in the Mobile Services Admin UI:Detection is automatically performed during app login and each time the app is restarted.The compliance status for each registration will be visible in the Mobile Services Admin UI.For more information, see this  documentation.  To check the status of your device, we have added a new Client API isDeviceCompliant(). If it returns true, the device is compliant. If it returns false, the device is non-compliant or has been compromised.var isRootDevices = clientAPI.isDeviceCompliant(); Support Generate Content API from Gemini LLMIn MDK’s previous release 24.11, we introduced support for leveraging the Chat Completion LLM API.In this release, we are now introducing a new MDK Action called Generate Content, which connects to SAP AI Core and explicitly supports integration with Gemini Generate Content API, enabling seamless content generation. This API allows developers to create dynamic, structured content for articles, reports, and multimedia outputs, leveraging advanced AI models like Gemini 1.0 Pro and Gemini 1.5 Pro.Instead of calling an LLM API provided directly by an LLM service provider, SAP AI Core offers a unified way to access LLM APIs from the most popular LLM service platforms. SAP AI Core manages the AI model and ensures scalable deployment in enterprise applications, maintaining compliance and security. The Generate Content LLM API can address various scenarios, including:Text Input: Submit text prompts to the API to receive AI-generated responses.Input: Enhance the interaction by including images, allowing for a multimodal conversational experience.Function Calling: Enable the AI model to invoke specific functions or execute commands based on the conversation’s context.{
“_Type”: “Action.Type.AICore.Generate.Content”,
“Target”: {
“Service”: “/MDKDemoApp/Services/OpenAI.service”,
“Path”: “/models/gemini-1.5-pro:generateContent”
},
“Properties”: {
“Contents”: []
},
“ShowActivityIndicator”: true,
“ActivityIndicatorText”: “Processing …”,
“ActionResult”: {
“_Name”: “GenerateContent”
},
“OnFailure”: “/MDKDemoApp/Actions/Failure.action”
}​For more information, see this  documentation.  Simplify Application Launcher and Splash Screen Generation in MDK Branded ClientPrior to this release, the effort required to customize Application Launcher icon and Splash screen is non-trivial. A developer has to generate these icons and screens using different ways and different sizes for different platforms as documented here.We have simplified and unified generating these application launcher icon and Splash screen for developers to provide these images under a single location.A new property, AppImages, has been introduced in MDKProject.json , where you can mention the file details in the given properties.”AppImages”: {
“Launcher”: {
“Logo”: “launcher”,
“Background”: “android_launcher_background”, // Android only
},
“Splash”: {
“Logo”: “splash_logo”,
“Background”: “background”, // iOS only
“LogoBackground”: “android_splash_background”, // Android only
}
}All those files should be placed under yourMDKApp.mdkproject>App_Resources>MDK>ImagesPlease note you can still continue previous way of customization as mentioned in our documentation. However, in order to use this new way, we highly suggest to remove any customization or override files added for the launcher and splash screens in the App_Resources and App_Resources_Merge folders for both iOS and Android.For more information, see this  documentation.  Support for getCell in DataTableRowProxy With this release, we are introducing getCell feature in DataTableRowProxy, enabling you to retrieve a DataTableCellProxy object using the column index of the target cell. This new functionality will seamlessly let you access and interact with specific cells within a table row.let cellParent = context.getParent();
let columnIndex = context.getColumnIndex();
let getCell = cellParent.getCell(columnIndex).getValue();New to MDK development?Follow  these tutorials  to get started and learn more about Mobile development kit!I am looking forward to your feedback/comments.   Read More Technology Blog Posts by SAP articles 

#SAP

#SAPTechnologyblog

You May Also Like

More From Author