diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml
index 22e740794..2974a232f 100644
--- a/.github/workflows/Build.yml
+++ b/.github/workflows/Build.yml
@@ -56,6 +56,6 @@ jobs:
- name: "Installing dependencies"
run: pnpm install
- name: "Running build for development"
- run: pnpm -r --filter=$(if [ "${{ steps.files.outputs.global_files }}" = "" ] && ${{ github.event_name == 'pull_request' }}; then echo '...[origin/main]'; else echo '**'; fi) run build
+ run: pnpm -r --filter='!native-widgets' --filter=$(if [ "${{ steps.files.outputs.global_files }}" = "" ] && ${{ github.event_name == 'pull_request' }}; then echo '...[origin/main]'; else echo '**'; fi) run build
env:
NODE_OPTIONS: --max_old_space_size=8192
diff --git a/packages/jsActions/mobile-resources-native/CHANGELOG.md b/packages/jsActions/mobile-resources-native/CHANGELOG.md
index dfffbadbe..741f53e4b 100644
--- a/packages/jsActions/mobile-resources-native/CHANGELOG.md
+++ b/packages/jsActions/mobile-resources-native/CHANGELOG.md
@@ -6,6 +6,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
## [Unreleased]
+## [11.4.1] Native Mobile Resources - 2026-3-14
+
+## [2.0.2] GalleryTextFilter
+
+### Fixed
+
+- Fixed VoiceOver/TalkBack not announcing the clear text button.
+
+## [1.1.1] Switch
+
+### Added
+
+- Added the ability to change the position of the label in horizontal view from the left side of the switch to the right side.
+
+### Fixed
+
+- We fixed an issue where the validation message was rendered inside the view container of the switch, which caused incorrect styling of the switch.
+- Fixed an issue where two overlapping tracks were seen in IOS, giving a inconsistent look to switch.
+
## [11.4.0] Native Mobile Resources - 2026-3-5
- We fixed native file system module reference.
diff --git a/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.0__READMEOSS_2026-03-05__03-42-15.html b/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.1__READMEOSS_2026-03-13__06-57-53.html
similarity index 99%
rename from packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.0__READMEOSS_2026-03-05__03-42-15.html
rename to packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.1__READMEOSS_2026-03-13__06-57-53.html
index 734466a12..c777820d1 100644
--- a/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.0__READMEOSS_2026-03-05__03-42-15.html
+++ b/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.1__READMEOSS_2026-03-13__06-57-53.html
@@ -141,7 +141,7 @@
- Siemens Mendix Native Mobile Resources 11.4.0 -
+ Siemens Mendix Native Mobile Resources 11.4.1 -
Siemens Third-Party Software Disclosure Document
English / English
Note to Resellers: Please
diff --git a/packages/jsActions/mobile-resources-native/package.json b/packages/jsActions/mobile-resources-native/package.json
index 03b951f59..e71fb538c 100644
--- a/packages/jsActions/mobile-resources-native/package.json
+++ b/packages/jsActions/mobile-resources-native/package.json
@@ -1,7 +1,7 @@
{
"name": "mobile-resources-native",
"moduleName": "Native Mobile Resources",
- "version": "11.4.0",
+ "version": "11.4.1",
"license": "Apache-2.0",
"copyright": "© Mendix Technology BV 2022. All rights reserved.",
"repository": {
@@ -9,6 +9,8 @@
"url": "https://github.com/mendix/native-widgets.git"
},
"marketplace": {
+ "name": "Native Mobile Resources",
+ "description": "Download this module to access a rich set of widgets and nanoflow actions created for native mobile, including authentication, network, platform, and more. A must-have for native mobile development!",
"minimumMXVersion": "11.7.0",
"marketplaceId": 109513
},
diff --git a/packages/jsActions/nanoflow-actions-native/package.json b/packages/jsActions/nanoflow-actions-native/package.json
index 1daf925e1..172156e96 100644
--- a/packages/jsActions/nanoflow-actions-native/package.json
+++ b/packages/jsActions/nanoflow-actions-native/package.json
@@ -9,6 +9,8 @@
"url": "https://github.com/mendix/native-widgets.git"
},
"marketplace": {
+ "name": "Nanoflow Commons",
+ "description": "The Nanoflow Commons module contains commonly used nanoflow actions that are usable across web, hybrid mobile, and native mobile apps, such as: client activities, geo location, local storage, & more.",
"minimumMXVersion": "11.7.0",
"marketplaceId": 109515
},
diff --git a/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md b/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md
index 4a7ced181..6f4026144 100644
--- a/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md
+++ b/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md
@@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
## [Unreleased]
+## [2.0.2] - 2026-3-14
+
### Fixed
- Fixed VoiceOver/TalkBack not announcing the clear text button.
diff --git a/packages/pluggableWidgets/switch-native/CHANGELOG.md b/packages/pluggableWidgets/switch-native/CHANGELOG.md
index d9f4b9e93..b46672bf7 100644
--- a/packages/pluggableWidgets/switch-native/CHANGELOG.md
+++ b/packages/pluggableWidgets/switch-native/CHANGELOG.md
@@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
## [Unreleased]
+## [1.1.1] - 2026-3-14
+
### Added
- Added the ability to change the position of the label in horizontal view from the left side of the switch to the right side.
diff --git a/scripts/release/marketplaceRelease.js b/scripts/release/marketplaceRelease.js
index 8657cd544..32db3cf2f 100644
--- a/scripts/release/marketplaceRelease.js
+++ b/scripts/release/marketplaceRelease.js
@@ -18,13 +18,12 @@ main().catch(e => {
});
async function main() {
- const pkgPath = join(process.cwd(), "package.json");
const {
name,
widgetName,
version,
marketplace: { minimumMXVersion, marketplaceId }
- } = require(pkgPath);
+ } = packageMetadata();
console.log(`Starting release process for tag ${process.env.TAG}`);
@@ -53,30 +52,47 @@ async function uploadModuleToAppStore(pkgName, marketplaceId, version, minimumMX
async function getGithubAssetUrl() {
console.log("Retrieving informations from Github Tag");
- const request = await fetch("GET", "https://api.github.com/repos/mendix/native-widgets/releases?per_page=10");
- const data = (await request) ?? [];
- const releaseId = data.find(info => info.tag_name === process.env.TAG)?.id;
- if (!releaseId) {
- throw new Error(`Could not find release with tag ${process.env.TAG} on GitHub`);
- }
- const assetsRequest = await fetch(
- "GET",
- `https://api.github.com/repos/mendix/native-widgets/releases/${releaseId}/assets`
- );
- const assetsData = (await assetsRequest) ?? [];
- const downloadUrl = assetsData.find(asset => asset.name.endsWith(".mpk"))?.browser_download_url;
- if (!downloadUrl) {
- throw new Error(`Could not retrieve MPK url from GitHub release with tag ${process.env.TAG}`);
+ const tag = process.env.TAG;
+ // Use direct tag lookup endpoint instead of listing releases
+ // This avoids pagination issues and is more reliable
+ const maxRetries = 5;
+ const retryDelayMs = 5000;
+
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
+ console.log(`Attempt ${attempt}/${maxRetries}: Fetching release for tag ${tag}`);
+
+ const releaseData = await fetch(
+ "GET",
+ `https://api.github.com/repos/mendix/native-widgets/releases/tags/${tag}`
+ );
+
+ if (releaseData && releaseData.id) {
+ console.log(`Found release: ${releaseData.name} (id: ${releaseData.id})`);
+ const downloadUrl = releaseData.assets?.find(asset => asset.name.endsWith(".mpk"))?.browser_download_url;
+ if (!downloadUrl) {
+ throw new Error(`Could not retrieve MPK url from GitHub release with tag ${tag}`);
+ }
+ return downloadUrl;
+ }
+
+ if (attempt < maxRetries) {
+ console.log(`Release not found yet, waiting ${retryDelayMs / 1000}s before retry...`);
+ await new Promise(resolve => setTimeout(resolve, retryDelayMs));
+ }
}
- return downloadUrl;
+
+ throw new Error(`Could not find release with tag ${tag} on GitHub after ${maxRetries} attempts`);
}
async function createDraft(marketplaceId, version, minimumMXVersion) {
console.log(`Creating draft in the Mendix Marketplace...`);
console.log(`ID: ${marketplaceId} - Version: ${version} - MXVersion: ${minimumMXVersion}`);
const [major, minor, patch] = version.split(".");
+ const { marketplace } = packageMetadata();
try {
const body = {
+ Name: marketplace.name,
+ Description: marketplace.description,
VersionMajor: major ?? 1,
VersionMinor: minor ?? 0,
VersionPatch: patch ?? 0,
@@ -143,6 +159,12 @@ async function fetch(method, url, body, additionalHeaders) {
} else if (response.status === 503) {
throw new Error(`Fetching Failed. "${url}" is unreachable (Code ${response.status}).`);
} else if (response.status !== 200 && response.status !== 201) {
+ try {
+ const responseBody = await response.text();
+ console.error(`Failed API response code: ${response.status} content: ${responseBody}`);
+ } catch {
+ console.error(`Failed to parse error response body.`);
+ }
throw new Error(`Fetching Failed (Code ${response.status}). ${response.statusText}`);
} else if (response.ok) {
return response.json();
@@ -150,3 +172,9 @@ async function fetch(method, url, body, additionalHeaders) {
throw new Error(`Fetching Failed (Code ${response.status}). ${response.statusText}`);
}
}
+
+function packageMetadata() {
+ const pkgPath = join(process.cwd(), "package.json");
+ const { name, widgetName, version, marketplace } = require(pkgPath);
+ return { name, widgetName, version, marketplace };
+}