From 7b1d42dfa2bcceeb3547d9ea59a3262686d0104f Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 4 Mar 2026 13:42:21 +0100 Subject: [PATCH] [sharpie] Add support for visionos_app_extension availability platform. Fixes #18098. Sharpie's clang reports visionOS app extension availability as 'xros_app_extension', which was not handled in the GetPlatform() switch statement, causing an 'Unsupported clang availability platform' exception. This is the same class of bug as #18098. Add: - VisionOSAppExtension to the PlatformName enum - Handle 'xros_app_extension' and 'visionos_app_extension' strings in GetPlatform() - Test with all app extension availability platforms Fixes https://github.com/dotnet/macios/issues/18098. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../sharpie/Tests/AvailabilityAppExtension.h | 28 +++++++++++++++++ .../AvailabilityAppExtension.iphoneos.cs | 31 +++++++++++++++++++ .../Attributes/AvailabilityBaseAttribute.cs | 4 +++ 3 files changed, 63 insertions(+) create mode 100644 tests/sharpie/Tests/AvailabilityAppExtension.h create mode 100644 tests/sharpie/Tests/AvailabilityAppExtension.iphoneos.cs diff --git a/tests/sharpie/Tests/AvailabilityAppExtension.h b/tests/sharpie/Tests/AvailabilityAppExtension.h new file mode 100644 index 000000000000..f58804270cd1 --- /dev/null +++ b/tests/sharpie/Tests/AvailabilityAppExtension.h @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// RUN iphoneos: -x objective-c -sdk iphoneos + +__attribute__((availability(ios_app_extension,unavailable))) +@interface UnavailableiOSAppExtension +@end + +__attribute__((availability(macosx_app_extension,unavailable))) +@interface UnavailableMacOSXAppExtension +@end + +__attribute__((availability(tvos_app_extension,unavailable))) +@interface UnavailableTvOSAppExtension +@end + +__attribute__((availability(watchos_app_extension,unavailable))) +@interface UnavailableWatchOSAppExtension +@end + +__attribute__((availability(maccatalyst_app_extension,unavailable))) +@interface UnavailableMacCatalystAppExtension +@end + +__attribute__((availability(visionos_app_extension,unavailable))) +@interface UnavailableVisionOSAppExtension +@end diff --git a/tests/sharpie/Tests/AvailabilityAppExtension.iphoneos.cs b/tests/sharpie/Tests/AvailabilityAppExtension.iphoneos.cs new file mode 100644 index 000000000000..02936969f053 --- /dev/null +++ b/tests/sharpie/Tests/AvailabilityAppExtension.iphoneos.cs @@ -0,0 +1,31 @@ +using ObjCRuntime; + +// @interface UnavailableiOSAppExtension +[Unavailable (PlatformName.iOSAppExtension)] +interface UnavailableiOSAppExtension { +} + +// @interface UnavailableMacOSXAppExtension +[Unavailable (PlatformName.MacOSXAppExtension)] +interface UnavailableMacOSXAppExtension { +} + +// @interface UnavailableTvOSAppExtension +[Unavailable (PlatformName.TvOSAppExtension)] +interface UnavailableTvOSAppExtension { +} + +// @interface UnavailableWatchOSAppExtension +[Unavailable (PlatformName.WatchOSAppExtension)] +interface UnavailableWatchOSAppExtension { +} + +// @interface UnavailableMacCatalystAppExtension +[Unavailable (PlatformName.MacCatalystAppExtension)] +interface UnavailableMacCatalystAppExtension { +} + +// @interface UnavailableVisionOSAppExtension +[Unavailable (PlatformName.VisionOSAppExtension)] +interface UnavailableVisionOSAppExtension { +} diff --git a/tools/sharpie/Sharpie.Bind/Attributes/AvailabilityBaseAttribute.cs b/tools/sharpie/Sharpie.Bind/Attributes/AvailabilityBaseAttribute.cs index f4885a96520f..43d88837e970 100644 --- a/tools/sharpie/Sharpie.Bind/Attributes/AvailabilityBaseAttribute.cs +++ b/tools/sharpie/Sharpie.Bind/Attributes/AvailabilityBaseAttribute.cs @@ -20,6 +20,7 @@ enum PlatformName : byte { MacCatalyst, DriverKit, VisionOS, + VisionOSAppExtension, MacCatalystAppExtension, } @@ -155,6 +156,9 @@ static PlatformName GetPlatform (string? name) case "visionOS": case "visionos": return PlatformName.VisionOS; + case "xros_app_extension": + case "visionos_app_extension": + return PlatformName.VisionOSAppExtension; case "maccatalyst_app_extension": return PlatformName.MacCatalystAppExtension; default: