diff --git a/apps/toolbox/src/pages/image-handling.xml b/apps/toolbox/src/pages/image-handling.xml
index a7022da8fe..1e0a35f4c9 100644
--- a/apps/toolbox/src/pages/image-handling.xml
+++ b/apps/toolbox/src/pages/image-handling.xml
@@ -10,7 +10,7 @@
-
+
@@ -31,7 +31,7 @@
-
+
diff --git a/packages/core/index.d.ts b/packages/core/index.d.ts
index ef2f8876b2..9a7987b49a 100644
--- a/packages/core/index.d.ts
+++ b/packages/core/index.d.ts
@@ -42,7 +42,7 @@ export type { ImageAssetOptions } from './image-asset';
export { ImageSource } from './image-source';
export { ModuleNameResolver, _setResolver } from './module-name-resolver';
export type { ModuleListProvider, PlatformContext } from './module-name-resolver';
-export { isAndroid, isIOS, Screen, Device, platformNames } from './platform';
+export { isAndroid, isIOS, isVisionOS, isApple, Screen, Device, platformNames } from './platform';
export type { IDevice } from './platform';
export { profile, enable as profilingEnable, disable as profilingDisable, time as profilingTime, uptime as profilingUptime, start as profilingStart, stop as profilingStop, isRunning as profilingIsRunning, dumpProfiles as profilingDumpProfiles, resetProfiles as profilingResetProfiles, startCPUProfile as profilingStartCPU, stopCPUProfile as profilingStopCPU } from './profiling';
export type { InstrumentationMode, TimerInfo } from './profiling';
diff --git a/packages/core/index.ts b/packages/core/index.ts
index f96af56257..ef39e07344 100644
--- a/packages/core/index.ts
+++ b/packages/core/index.ts
@@ -33,7 +33,7 @@ export type { ImageAssetOptions } from './image-asset';
export { ImageSource } from './image-source';
export { ModuleNameResolver, _setResolver } from './module-name-resolver';
export type { ModuleListProvider, PlatformContext } from './module-name-resolver';
-export { isAndroid, isIOS, Screen, Device, platformNames } from './platform';
+export { isAndroid, isIOS, isVisionOS, isApple, Screen, Device, platformNames } from './platform';
export type { IDevice } from './platform';
// Profiling
diff --git a/packages/core/platform/common.ts b/packages/core/platform/common.ts
index 9be878dcf2..3e5b4c4c58 100644
--- a/packages/core/platform/common.ts
+++ b/packages/core/platform/common.ts
@@ -5,6 +5,7 @@ export const platformNames = {
android: 'Android',
ios: 'iOS',
visionos: 'visionOS',
+ apple: 'apple',
};
export const isAndroid = !!__ANDROID__;
diff --git a/packages/core/ui/builder/index.ts b/packages/core/ui/builder/index.ts
index 01ab85c198..0750c254bd 100644
--- a/packages/core/ui/builder/index.ts
+++ b/packages/core/ui/builder/index.ts
@@ -17,6 +17,7 @@ import { xml2ui } from './xml2ui';
export const ios = platformNames.ios.toLowerCase();
export const android = platformNames.android.toLowerCase();
export const visionos = platformNames.visionos.toLowerCase();
+export const apple = platformNames.apple.toLowerCase();
export const defaultNameSpaceMatcher = /tns\.xsd$/i;
export interface LoadOptions {
diff --git a/packages/core/ui/builder/xml2ui.ts b/packages/core/ui/builder/xml2ui.ts
index 3afc99c5a2..4408baef8f 100644
--- a/packages/core/ui/builder/xml2ui.ts
+++ b/packages/core/ui/builder/xml2ui.ts
@@ -6,7 +6,7 @@ import { getComponentModule } from './component-builder';
import type { ComponentModule } from './component-builder';
import { Device } from '../../platform';
import { profile } from '../../profiling';
-import { android, ios, visionos, loadCustomComponent, defaultNameSpaceMatcher, getExports, Builder } from './index';
+import { android, ios, visionos, apple, loadCustomComponent, defaultNameSpaceMatcher, getExports, Builder } from './index';
export namespace xml2ui {
/**
@@ -135,14 +135,15 @@ export namespace xml2ui {
if (value) {
const toLower = value.toLowerCase();
- return toLower === android || toLower === ios || toLower === visionos;
+ return toLower === android || toLower === ios || toLower === visionos || toLower === apple;
}
return false;
}
private static isCurentPlatform(value: string): boolean {
- return value && value.toLowerCase() === Device.os.toLowerCase();
+ value = value && value.toLowerCase();
+ return value === apple ? __APPLE__ : value === Device.os.toLowerCase();
}
}
diff --git a/packages/webpack5/src/loaders/xml-namespace-loader/index.ts b/packages/webpack5/src/loaders/xml-namespace-loader/index.ts
index 919bfab837..dd872f6ff3 100644
--- a/packages/webpack5/src/loaders/xml-namespace-loader/index.ts
+++ b/packages/webpack5/src/loaders/xml-namespace-loader/index.ts
@@ -44,9 +44,12 @@ async function parseXML(content: string): Promise {
const saxParser = parser(true, { xmlns: true });
- // // Register ios and android prefixes as namespaces to avoid "unbound xml namespace" errors
+ // // Register platform prefixes as namespaces to avoid "unbound xml namespace" errors
(saxParser as any).ns['ios'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['visionos'] = 'http://schemas.nativescript.org/tns.xsd';
+ (saxParser as any).ns['apple'] = 'http://schemas.nativescript.org/tns.xsd';
+ (saxParser as any).ns['macos'] = 'http://schemas.nativescript.org/tns.xsd';
+ (saxParser as any).ns['win'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['android'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['desktop'] = 'http://schemas.nativescript.org/tns.xsd';
(saxParser as any).ns['web'] = 'http://schemas.nativescript.org/tns.xsd';