diff --git a/apps/toolbox/src/pages/image-handling.xml b/apps/toolbox/src/pages/image-handling.xml
index a7022da8f..1e0a35f4c 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 ef2f8876b..9a7987b49 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 f96af5625..ef39e0734 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 9be878dcf..3e5b4c4c5 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 01ab85c19..0750c254b 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 3afc99c5a..4408baef8 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 919bfab83..dd872f6ff 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';