diff --git a/Make.config b/Make.config
index f7deff56fb64..e9838de85d9c 100644
--- a/Make.config
+++ b/Make.config
@@ -140,8 +140,8 @@ MACCATALYST_NUGET_VERSION_FULL=$(MACCATALYST_NUGET_VERSION_NO_METADATA)+$(NUGET_
# Xcode version should have both a major and a minor version (even if the minor version is 0)
XCODE_VERSION=13.0
-XCODE_URL=https://dl.internalx.com/internal-files/xcodes/Xcode_13_beta_4.xip
-XCODE_DEVELOPER_ROOT=/Applications/Xcode_13.0.0-beta4.app/Contents/Developer
+XCODE_URL=https://dl.internalx.com/internal-files/xcodes/Xcode_13_beta_5.xip
+XCODE_DEVELOPER_ROOT=/Applications/Xcode_13.0.0-beta5.app/Contents/Developer
XCODE_PRODUCT_BUILD_VERSION:=$(shell /usr/libexec/PlistBuddy -c 'Print :ProductBuildVersion' $(XCODE_DEVELOPER_ROOT)/../version.plist)
# Mono version embedded in XI/XM (NEEDED_MONO_VERSION/BRANCH) are specified in mk/mono.mk
@@ -167,9 +167,9 @@ MIN_CMAKE_URL=https://cmake.org/files/v3.6/cmake-3.6.2-Darwin-x86_64.dmg
MIN_CMAKE_VERSION=2.8.8
# ObjectiveSharpie min/max versions
-MIN_SHARPIE_VERSION=3.5.45
+MIN_SHARPIE_VERSION=3.5.46
MAX_SHARPIE_VERSION=3.5.99
-MIN_SHARPIE_URL=https://download.visualstudio.microsoft.com/download/pr/77766fbc-995f-410b-9546-4a1731051956/d3f34a07d9c3a2fcdda16bb3fe5b41e8/objectivesharpie-3.5.45.pkg
+MIN_SHARPIE_URL=https://download.visualstudio.microsoft.com/download/pr/0e9ecce4-10b6-46a4-ae06-ad031b25eafc/761cd868c5c27f5b68765e1fa53fd873/objectivesharpie-3.5.46.pkg
# Minimum OSX versions for building XI/XM
MIN_OSX_BUILD_VERSION=11.0
diff --git a/dotnet/Makefile b/dotnet/Makefile
index e57a135da052..a7c8e703378d 100644
--- a/dotnet/Makefile
+++ b/dotnet/Makefile
@@ -143,6 +143,9 @@ $(DOTNET_NUPKG_DIR)/vs-workload.props: Workloads/vs-workload.template.props
$(DOTNET_NUPKG_DIR)/SignList.xml: Workloads/SignList.xml
$(Q) $(CP) $< $@
+$(DOTNET_NUPKG_DIR)/SignList.targets: Workloads/SignList.targets
+ $(Q) $(CP) $< $@
+
TEMPLATED_FILES = \
$(foreach platform,$(DOTNET_PLATFORMS),Microsoft.$(platform).Sdk/targets/Microsoft.$(platform).Sdk.Versions.props) \
$(foreach platform,$(DOTNET_PLATFORMS),Microsoft.$(platform).Sdk/targets/Microsoft.$(platform).Sdk.SupportedTargetPlatforms.props) \
@@ -213,7 +216,7 @@ pack-$(shell echo $(1) | tr A-Z a-z): $$(RUNTIME_PACKS_$(1)) $$(REF_PACKS_$(1))
endef
$(foreach platform,$(DOTNET_PLATFORMS_UPPERCASE),$(eval $(call PacksDefinitions,$(platform))))
-TARGETS += $(RUNTIME_PACKS) $(REF_PACKS) $(SDK_PACKS) $(TEMPLATE_PACKS) $(WORKLOAD_PACKS) $(DOTNET_NUPKG_DIR)/vs-workload.props $(DOTNET_NUPKG_DIR)/SignList.xml
+TARGETS += $(RUNTIME_PACKS) $(REF_PACKS) $(SDK_PACKS) $(TEMPLATE_PACKS) $(WORKLOAD_PACKS) $(DOTNET_NUPKG_DIR)/vs-workload.props $(DOTNET_NUPKG_DIR)/SignList.xml $(DOTNET_NUPKG_DIR)/SignList.targets
define InstallWorkload
# .NET comes with a workload for us, but we don't want that, we want our own. So delete the workload that comes with .NET.
diff --git a/dotnet/Workloads/SignList.targets b/dotnet/Workloads/SignList.targets
new file mode 100644
index 000000000000..a63f1eeecc43
--- /dev/null
+++ b/dotnet/Workloads/SignList.targets
@@ -0,0 +1,53 @@
+
+
+
+
+ <_NestedZipExtractionDir>$(_WorkingDir)nested\
+
+
+
+ <_NestedBrokerZip Include="$(_WorkingDir)**\Broker.zip" />
+ <_NestedBuildZip Include="$(_WorkingDir)**\Build.zip" />
+ <_NestediOSAppZip Include="$(_WorkingDir)**\Xamarin.PreBuilt.iOS.app.zip" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dotnet/Workloads/SignList.xml b/dotnet/Workloads/SignList.xml
index cecbdf381152..c2936cd62f06 100644
--- a/dotnet/Workloads/SignList.xml
+++ b/dotnet/Workloads/SignList.xml
@@ -3,11 +3,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
@@ -21,5 +58,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dotnet/targets/Xamarin.Shared.Sdk.targets b/dotnet/targets/Xamarin.Shared.Sdk.targets
index 8d4aa650e419..db531f8f8413 100644
--- a/dotnet/targets/Xamarin.Shared.Sdk.targets
+++ b/dotnet/targets/Xamarin.Shared.Sdk.targets
@@ -349,10 +349,10 @@
- <_MonoLibrary Remove="@(_MonoRuntimeComponentDontLink -> '$(_MonoRuntimePackPath)/native/%(Identity)')" />
+ <_MonoLibrary Remove="@(_MonoRuntimeComponentDontLink -> '$(_MonoRuntimePackPath)native/%(Identity)')" />
- <_MonoLibrary Include="@(_MonoRuntimeComponentLink -> '$(_MonoRuntimePackPath)/native/%(Identity)')" />
+ <_MonoLibrary Include="@(_MonoRuntimeComponentLink -> '$(_MonoRuntimePackPath)native/%(Identity)')" />
diff --git a/mk/mono.mk b/mk/mono.mk
index d4ca385b47b5..9442f1803fe4 100644
--- a/mk/mono.mk
+++ b/mk/mono.mk
@@ -1,4 +1,4 @@
-NEEDED_MONO_VERSION := c633fe923832f0c3db3c4e6aa98e5592bf5a06e7
+NEEDED_MONO_VERSION := 8b6809243db21a9ab3e2c21570958ab9c537ce29
NEEDED_MONO_BRANCH := 2020-02
MONO_DIRECTORY := mono
diff --git a/msbuild/Xamarin.Mac.Tasks/Tasks/ACTool.cs b/msbuild/Xamarin.Mac.Tasks/Tasks/ACTool.cs
deleted file mode 100644
index fe666de7ec2c..000000000000
--- a/msbuild/Xamarin.Mac.Tasks/Tasks/ACTool.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Xamarin.MacDev;
-using Xamarin.MacDev.Tasks;
-
-namespace Xamarin.Mac.Tasks {
- public class ACTool : ACToolTaskBase
- {
- }
-}
diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs
index 3e1983e2fec8..815639b07c19 100644
--- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs
+++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs
@@ -129,7 +129,7 @@ public override bool Execute ()
if (!Compile (plist))
return false;
- // Merge with any partial plists generated by the Asset Catalog compiler...
+ // Merge with any partial plists...
MergePartialPlistTemplates (plist);
CompiledAppManifest = new TaskItem (Path.Combine (AppManifestBundleDirectory, "Info.plist"));
diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CoreMLCompilerTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CoreMLCompilerTaskBase.cs
index 4d30c083959c..5c52330b450c 100644
--- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CoreMLCompilerTaskBase.cs
+++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CoreMLCompilerTaskBase.cs
@@ -201,6 +201,9 @@ public override bool Execute ()
}
BundleResources = bundleResources.ToArray ();
+
+ if (PartialAppManifests != null)
+ partialPlists.AddRange (PartialAppManifests);
PartialAppManifests = partialPlists.ToArray ();
return !Log.HasLoggedErrors;
diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ParseBundlerArgumentsTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ParseBundlerArgumentsTaskBase.cs
index 910633da0a52..69876202bf29 100644
--- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ParseBundlerArgumentsTaskBase.cs
+++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ParseBundlerArgumentsTaskBase.cs
@@ -131,6 +131,7 @@ public override bool Execute ()
xml.Add (value);
break;
default:
+ Log.LogMessage (MessageImportance.Low, "Skipping unknown argument '{0}' with value '{1}'", name, value);
break;
}
}
diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ReadItemsFromFileBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ReadItemsFromFileBase.cs
index 2df2ee0692e2..1e6800034a38 100644
--- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ReadItemsFromFileBase.cs
+++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ReadItemsFromFileBase.cs
@@ -36,11 +36,16 @@ public override bool Execute ()
{
var document = XDocument.Load (this.File.ItemSpec);
- this.Items = document.Root
+ var items = document.Root
.Elements (ItemGroupElementName)
.SelectMany (element => element.Elements ())
.Select (element => this.CreateItemFromElement (element))
- .ToArray ();
+ .ToList ();
+
+ if (Items != null)
+ items.AddRange (Items);
+
+ Items = items.ToArray ();
return true;
}
diff --git a/msbuild/Xamarin.iOS.Tasks/Tasks/ACTool.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs
similarity index 93%
rename from msbuild/Xamarin.iOS.Tasks/Tasks/ACTool.cs
rename to msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs
index bdfe239a9e0c..483bd1df8c14 100644
--- a/msbuild/Xamarin.iOS.Tasks/Tasks/ACTool.cs
+++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs
@@ -2,7 +2,7 @@
using Xamarin.MacDev.Tasks;
using Xamarin.Messaging.Build.Client;
-namespace Xamarin.iOS.Tasks {
+namespace Xamarin.MacDev.Tasks {
public class ACTool : ACToolTaskBase, ICancelableTask
{
public override bool Execute ()
diff --git a/msbuild/Xamarin.Shared/Xamarin.Shared.targets b/msbuild/Xamarin.Shared/Xamarin.Shared.targets
index 43d74ed694b8..f3114959089c 100644
--- a/msbuild/Xamarin.Shared/Xamarin.Shared.targets
+++ b/msbuild/Xamarin.Shared/Xamarin.Shared.targets
@@ -34,7 +34,6 @@ Copyright (C) 2018 Microsoft. All rights reserved.
-
@@ -74,7 +73,6 @@ Copyright (C) 2018 Microsoft. All rights reserved.
-
@@ -93,6 +91,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
+
@@ -286,7 +285,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
-
+
@@ -476,7 +475,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
SdkVersion="$(_SdkVersion)"
TargetFrameworkMoniker="$(_ComputedTargetFrameworkMoniker)"
>
-
+
@@ -485,7 +484,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
-
+
@@ -703,7 +702,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
-
+
@@ -727,7 +726,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
ResourcePrefix="$(_ResourcePrefix)"
SdkDevPath="$(_SdkDevPath)">
-
+
@@ -735,7 +734,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
-
+
diff --git a/src/AppKit/NSApplication.cs b/src/AppKit/NSApplication.cs
index 22c26985afbc..f21eb5b06917 100644
--- a/src/AppKit/NSApplication.cs
+++ b/src/AppKit/NSApplication.cs
@@ -25,6 +25,7 @@
#if !__MACCATALYST__
using System;
+using System.ComponentModel;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
@@ -36,7 +37,14 @@ namespace AppKit {
public partial class NSApplication : NSResponder {
public static bool CheckForIllegalCrossThreadCalls = true;
public static bool CheckForEventAndDelegateMismatches = true;
+
+#if !(XAMCORE_4_0 && NET)
+#if NET
+ [EditorBrowsable (EditorBrowsableState.Never)]
+ [Obsolete ("This field is ignored (treated as if always true).")]
+#endif
public static bool IgnoreMissingAssembliesDuringRegistration = false;
+#endif
private static Thread mainThread;
diff --git a/src/AudioUnit/AudioComponentDescription.cs b/src/AudioUnit/AudioComponentDescription.cs
index 952c0fa214d5..fe93a64dba83 100644
--- a/src/AudioUnit/AudioComponentDescription.cs
+++ b/src/AudioUnit/AudioComponentDescription.cs
@@ -138,7 +138,6 @@ public enum AudioTypeEffect { // OSType in AudioComponentDescription
#endif
[Mac (10,15)]
[Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
Reverb2=0x72766232, // 'rvb2'
NBandEq=0x6e626571, // 'nbeq'
}
diff --git a/src/CoreFoundation/CFArray.cs b/src/CoreFoundation/CFArray.cs
index 071eb3018292..4a96833459f6 100644
--- a/src/CoreFoundation/CFArray.cs
+++ b/src/CoreFoundation/CFArray.cs
@@ -142,5 +142,31 @@ internal static nint GetCount (IntPtr array)
ret [i] = CFString.FromHandle (CFArrayGetValueAtIndex (handle, i));
return ret;
}
+
+ static T? UnsafeGetItem (IntPtr handle, nint index) where T : class, INativeObject
+ {
+ var val = CFArrayGetValueAtIndex (handle, index);
+ // Native code could return a CFArray with kCFNull inside its elements
+ // and they should be valid for things like T : NSDate so we handle
+ // them as just null values inside the array
+ if (val == CFNullHandle)
+ return null;
+
+ return Runtime.GetINativeObject (val, false);
+ }
+
+ // identical signature to NSArray API
+ static public T?[]? ArrayFromHandle (IntPtr handle) where T : class, INativeObject
+ {
+ if (handle == IntPtr.Zero)
+ return null;
+
+ var c = CFArrayGetCount (handle);
+ T?[] ret = new T [c];
+
+ for (nint i = 0; i < c; i++)
+ ret [i] = UnsafeGetItem (handle, i);
+ return ret;
+ }
}
}
diff --git a/src/ObjCRuntime/Runtime.cs b/src/ObjCRuntime/Runtime.cs
index 4605696e58b8..c608c9759c2d 100644
--- a/src/ObjCRuntime/Runtime.cs
+++ b/src/ObjCRuntime/Runtime.cs
@@ -611,7 +611,7 @@ static void CollectReferencedAssemblies (List assemblies, Assembly ass
// that's more important for XI because device builds don't go thru this step
// and we can end up with simulator-only failures - bug #29211
NSLog ("Could not find `{0}` referenced by assembly `{1}`.", fefe.FileName, assembly.FullName);
-#if MONOMAC
+#if MONOMAC && !NET
if (!NSApplication.IgnoreMissingAssembliesDuringRegistration)
throw;
#endif
diff --git a/src/SceneKit/Defs.cs b/src/SceneKit/Defs.cs
index 1eb9f8426b95..b3e23b53768d 100644
--- a/src/SceneKit/Defs.cs
+++ b/src/SceneKit/Defs.cs
@@ -363,7 +363,7 @@ public enum SCNRenderingApi : ulong
{
Metal,
#if !MONOMAC
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [Unavailable (PlatformName.MacCatalyst)]
OpenGLES2,
#else
OpenGLLegacy,
diff --git a/src/Security/SecProtocolOptions.cs b/src/Security/SecProtocolOptions.cs
index 041ea004884d..0c36d8b347fe 100644
--- a/src/Security/SecProtocolOptions.cs
+++ b/src/Security/SecProtocolOptions.cs
@@ -47,7 +47,7 @@ public void SetLocalIdentity (SecIdentity2 identity)
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'AddTlsCipherSuite (TlsCipherSuite)' instead.")]
[Deprecated (PlatformName.WatchOS, 6,0, message: "Use 'AddTlsCipherSuite (TlsCipherSuite)' instead.")]
[Deprecated (PlatformName.TvOS, 13,0, message: "Use 'AddTlsCipherSuite (TlsCipherSuite)' instead.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [Unavailable (PlatformName.MacCatalyst)]
public void AddTlsCipherSuite (SslCipherSuite cipherSuite) => sec_protocol_options_add_tls_ciphersuite (GetCheckedHandle (), cipherSuite);
[Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)]
@@ -88,7 +88,7 @@ public void SetLocalIdentity (SecIdentity2 identity)
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'SetTlsMinVersion (TlsProtocolVersion)' instead.")]
[Deprecated (PlatformName.WatchOS, 6,0, message: "Use 'SetTlsMinVersion (TlsProtocolVersion)' instead.")]
[Deprecated (PlatformName.TvOS, 13,0, message: "Use 'SetTlsMinVersion (TlsProtocolVersion)' instead.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [Unavailable (PlatformName.MacCatalyst)]
public void SetTlsMinVersion (SslProtocol protocol) => sec_protocol_options_set_tls_min_version (GetCheckedHandle (), protocol);
[Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)]
@@ -109,7 +109,7 @@ public void SetLocalIdentity (SecIdentity2 identity)
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'SetTlsMaxVersion (TlsProtocolVersion)' instead.")]
[Deprecated (PlatformName.WatchOS, 6,0, message: "Use 'SetTlsMaxVersion (TlsProtocolVersion)' instead.")]
[Deprecated (PlatformName.TvOS, 13,0, message: "Use 'SetTlsMaxVersion (TlsProtocolVersion)' instead.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [Unavailable (PlatformName.MacCatalyst)]
public void SetTlsMaxVersion (SslProtocol protocol) => sec_protocol_options_set_tls_max_version (GetCheckedHandle (), protocol);
[Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)]
diff --git a/src/StoreKit/Enums.cs b/src/StoreKit/Enums.cs
index 91d748c3a419..225032dac8be 100644
--- a/src/StoreKit/Enums.cs
+++ b/src/StoreKit/Enums.cs
@@ -114,7 +114,8 @@ public enum SKProductDiscountPaymentMode : ulong {
}
[NoWatch, NoTV, NoMac, iOS (14,0)]
- [Native, Advice ("This API is not available when using UIKit on macOS.")]
+ [MacCatalyst (14,0)]
+ [Native]
public enum SKOverlayPosition : long {
SKOverlayPositionBottom = 0,
Raised = 1,
diff --git a/src/appkit.cs b/src/appkit.cs
index ac61bd1e2680..d2c16276305a 100644
--- a/src/appkit.cs
+++ b/src/appkit.cs
@@ -17551,11 +17551,12 @@ interface NSTabViewController : NSTabViewDelegate, NSToolbarDelegate {
[Export ("tabView", ArgumentSemantic.Strong)]
NSTabView TabView { get; set; }
-// [FAIL] Selector not found for AppKit.NSTabViewController : segmentedControl
-// [FAIL] Selector not found for AppKit.NSTabViewController : setSegmentedControl:
- [Availability (Obsoleted = Platform.Mac_10_11)] // Test failures on El Capitan
+#if !XAMCORE_4_0 && MONOMAC
+ // This property does not exist in any stable header - it was probably added in a beta and then removed.
+ [Obsoleted (PlatformName.MacOSX, 10, 10, message: "Do not use; this API was removed.")]
[Export ("segmentedControl", ArgumentSemantic.Strong)]
NSSegmentedControl SegmentedControl { get; set; }
+#endif
[Export ("transitionOptions")]
NSViewControllerTransitionOptions TransitionOptions { get; set; }
diff --git a/src/avfoundation.cs b/src/avfoundation.cs
index d7006e14f5fc..6064b4873396 100644
--- a/src/avfoundation.cs
+++ b/src/avfoundation.cs
@@ -10993,7 +10993,7 @@ interface AVCaptureDeviceFormat {
bool MultiCamSupported { [Bind ("isMultiCamSupported")] get; }
[NoWatch, NoTV, NoMac, iOS (13, 0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [MacCatalyst (14,0)]
[Export ("globalToneMappingSupported")]
bool GlobalToneMappingSupported { [Bind ("isGlobalToneMappingSupported")] get; }
@@ -12917,9 +12917,8 @@ interface AVSpeechSynthesizer {
[Export ("paused")]
bool Paused { [Bind ("isPaused")] get; }
- [Unavailable (PlatformName.MacCatalyst)]
[Watch (6,0), TV (13,0), NoMac, iOS (13,0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("usesApplicationAudioSession")]
bool UsesApplicationAudioSession { get; set; }
diff --git a/src/callkit.cs b/src/callkit.cs
index fa94430beacb..d275c2816e78 100644
--- a/src/callkit.cs
+++ b/src/callkit.cs
@@ -296,9 +296,8 @@ interface CXCallDirectoryManager {
[Export ("getEnabledStatusForExtensionWithIdentifier:completionHandler:")]
void GetEnabledStatusForExtension (string identifier, Action completion);
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoMac, iOS (13,4)]
- [Advice ("This API is not available when using UIKit on macOS.")]
[Async]
[Export ("openSettingsWithCompletionHandler:")]
void OpenSettings ([NullAllowed] Action completion);
diff --git a/src/carplay.cs b/src/carplay.cs
index bc4f87cd0fd7..941dd5094d72 100644
--- a/src/carplay.cs
+++ b/src/carplay.cs
@@ -598,10 +598,6 @@ interface CPListTemplate : CPBarButtonProviding {
[Export ("initWithTitle:sections:")]
IntPtr Constructor ([NullAllowed] string title, CPListSection[] sections);
- [iOS (15,0)]
- [Export ("initWithTitle:sections:assistantCellVisibility:assistantCellPosition:")]
- IntPtr Constructor ([NullAllowed] string title, CPListSection[] sections, CPAssistantCellVisibility visibility, CPAssistantCellPosition position);
-
[Deprecated (PlatformName.iOS, 14, 0, message: "Use 'CPListItem.Handler' instead.")]
[Wrap ("WeakDelegate")]
[NullAllowed]
@@ -650,14 +646,6 @@ interface CPListTemplate : CPBarButtonProviding {
[iOS (14, 0)]
[Export ("emptyViewSubtitleVariants", ArgumentSemantic.Copy)]
string[] EmptyViewSubtitleVariants { get; set; }
-
- [iOS (15, 0)]
- [Export ("assistantCellVisibility", ArgumentSemantic.Assign)]
- CPAssistantCellVisibility AssistantCellVisibility { get; set; }
-
- [iOS (15, 0)]
- [Export ("assistantCellPosition", ArgumentSemantic.Assign)]
- CPAssistantCellPosition AssistantCellPosition { get; set; }
}
interface ICPListTemplateDelegate { }
diff --git a/src/coreaudiokit.cs b/src/coreaudiokit.cs
index 090bcb4213c7..40d2caa5660e 100644
--- a/src/coreaudiokit.cs
+++ b/src/coreaudiokit.cs
@@ -172,7 +172,7 @@ interface CABTMidiLocalPeripheralViewController {
[iOS (8,0)]
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'AudioUnit' instead.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (UIView))]
interface CAInterAppAudioSwitcherView {
[Export ("initWithFrame:")]
@@ -190,7 +190,7 @@ interface CAInterAppAudioSwitcherView {
[iOS (8,0)]
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'AudioUnit' instead.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (UIView))]
interface CAInterAppAudioTransportView {
[Export ("initWithFrame:")]
diff --git a/src/corefoundation.cs b/src/corefoundation.cs
index 0de50ee3f488..c454a2ea6a60 100644
--- a/src/corefoundation.cs
+++ b/src/corefoundation.cs
@@ -29,6 +29,13 @@ interface CFAllocator {
IntPtr null_ptr { get; }
}
+ [Partial]
+ interface CFArray {
+
+ [Internal][Field ("kCFNull")]
+ IntPtr /* CFNullRef */ CFNullHandle { get; }
+ }
+
[Partial]
[Internal]
interface CFBoolean {
diff --git a/src/corelocation.cs b/src/corelocation.cs
index 49f5c92f1b55..206625830b17 100644
--- a/src/corelocation.cs
+++ b/src/corelocation.cs
@@ -331,13 +331,13 @@ partial interface CLLocationManager {
[NoWatch][NoTV][NoMac]
[Deprecated (PlatformName.iOS, 13,0, message: "Not used anymore. Call will not have any effect.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("allowDeferredLocationUpdatesUntilTraveled:timeout:")]
void AllowDeferredLocationUpdatesUntil (double distance, double timeout);
[NoWatch][NoTV][NoMac]
[Deprecated (PlatformName.iOS, 13,0, message: "Not used anymore. Call will not have any effect.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("disallowDeferredLocationUpdates")]
void DisallowDeferredLocationUpdates ();
@@ -373,7 +373,7 @@ partial interface CLLocationManager {
void RequestState (CLRegion region);
[NoWatch][NoTV][NoMac]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'StartRangingBeacons(CLBeaconIdentityConstraint)' instead.")]
[iOS (7,0), Export ("startRangingBeaconsInRegion:")]
void StartRangingBeacons (CLBeaconRegion region);
@@ -383,7 +383,7 @@ partial interface CLLocationManager {
void StartRangingBeacons (CLBeaconIdentityConstraint constraint);
[NoWatch][NoTV][NoMac]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'StopRangingBeacons(CLBeaconIdentityConstraint)' instead.")]
[iOS (7,0), Export ("stopRangingBeaconsInRegion:")]
void StopRangingBeacons (CLBeaconRegion region);
diff --git a/src/coremotion.cs b/src/coremotion.cs
index d15552696c60..4b5726daea42 100644
--- a/src/coremotion.cs
+++ b/src/coremotion.cs
@@ -691,10 +691,12 @@ interface CMHeadphoneMotionManager {
[Export ("authorizationStatus")]
CMAuthorizationStatus AuthorizationStatus { get; }
+ [NoMac]
[Wrap ("WeakDelegate")]
[NullAllowed]
ICMHeadphoneMotionManagerDelegate Delegate { get; set; }
+ [NoMac]
[NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
NSObject WeakDelegate { get; set; }
@@ -721,7 +723,7 @@ interface ICMHeadphoneMotionManagerDelegate {}
[iOS (14,0)][Watch (7,0)]
[MacCatalyst (14,0)]
- [Mac (12,0)]
+ [NoMac]
[Protocol, Model (AutoGeneratedName = true)]
[BaseType (typeof (NSObject))]
interface CMHeadphoneMotionManagerDelegate {
diff --git a/src/fileprovider.cs b/src/fileprovider.cs
index 089199ad1a07..6990c0d96ca3 100644
--- a/src/fileprovider.cs
+++ b/src/fileprovider.cs
@@ -326,8 +326,7 @@ interface NSFileProviderDomain {
[Export ("hidden")]
bool Hidden { [Bind ("isHidden")] get; set; }
- [Advice ("This API is not available when using UIKit on macOS.")]
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
[Export ("testingModes", ArgumentSemantic.Assign)]
NSFileProviderDomainTestingModes TestingModes { get; set; }
@@ -742,8 +741,7 @@ interface NSFileProviderManager {
interface INSFileProviderPendingSetEnumerator { }
- [Advice ("This API is not available when using UIKit on macOS.")]
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
[Protocol]
interface NSFileProviderPendingSetEnumerator : NSFileProviderEnumerator {
@@ -878,9 +876,8 @@ interface NSFileProviderRequest {
[Export ("requestingExecutable", ArgumentSemantic.Copy)]
NSUrl RequestingExecutable { get; }
- [Unavailable (PlatformName.MacCatalyst)]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NullAllowed, Export ("domainVersion")]
NSFileProviderDomainVersion DomainVersion { get; }
}
@@ -1001,8 +998,7 @@ interface NSFileProviderReplicatedExtension : NSFileProviderEnumerating {
[Export ("materializedItemsDidChangeWithCompletionHandler:")]
void MaterializedItemsDidChange (Action completionHandler);
- [Advice ("This API is not available when using UIKit on macOS.")]
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
[Export ("pendingItemsDidChangeWithCompletionHandler:")]
void PendingItemsDidChange (Action completionHandler);
@@ -1010,8 +1006,7 @@ interface NSFileProviderReplicatedExtension : NSFileProviderEnumerating {
interface INSFileProviderDomainState { }
- [Advice ("This API is not available when using UIKit on macOS.")]
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
[Protocol]
interface NSFileProviderDomainState {
@@ -1033,8 +1028,7 @@ public enum NSFileProviderDomainTestingModes : ulong {
Interactive = 1uL << 1,
}
- [Advice ("This API is not available when using UIKit on macOS.")]
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
@@ -1047,9 +1041,9 @@ interface NSFileProviderDomainVersion : NSSecureCoding {
NSComparisonResult Compare (NSFileProviderDomainVersion otherVersion);
}
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Native, Advice ("This API is not available when using UIKit on macOS.")]
+ [Native]
public enum NSFileProviderTestingOperationType : long {
Ingestion = 0,
Lookup = 1,
@@ -1063,9 +1057,9 @@ public enum NSFileProviderTestingOperationType : long {
interface INSFileProviderTestingOperation : global::ObjCRuntime.INativeObject { }
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingOperation {
[Abstract]
@@ -1113,9 +1107,9 @@ interface NSFileProviderTestingOperation {
INSFileProviderTestingCollisionResolution GetAsCollisionResolution ();
}
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Native, Advice ("This API is not available when using UIKit on macOS.")]
+ [Native]
public enum NSFileProviderTestingOperationSide : ulong {
Disk = 0,
FileProvider = 1,
@@ -1123,9 +1117,9 @@ public enum NSFileProviderTestingOperationSide : ulong {
interface INSFileProviderTestingIngestion { }
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingIngestion : NSFileProviderTestingOperation {
[Abstract]
@@ -1143,9 +1137,8 @@ interface NSFileProviderTestingIngestion : NSFileProviderTestingOperation {
interface INSFileProviderTestingLookup { }
- [Unavailable (PlatformName.MacCatalyst)]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingLookup : NSFileProviderTestingOperation {
[Abstract]
@@ -1159,9 +1152,8 @@ interface NSFileProviderTestingLookup : NSFileProviderTestingOperation {
interface INSFileProviderTestingCreation { }
- [Unavailable (PlatformName.MacCatalyst)]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingCreation : NSFileProviderTestingOperation {
[Abstract]
@@ -1179,9 +1171,9 @@ interface NSFileProviderTestingCreation : NSFileProviderTestingOperation {
interface INSFileProviderTestingModification { }
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingModification : NSFileProviderTestingOperation {
[Abstract]
@@ -1211,9 +1203,9 @@ interface NSFileProviderTestingModification : NSFileProviderTestingOperation {
interface INSFileProviderTestingDeletion { }
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingDeletion : NSFileProviderTestingOperation {
[Abstract]
@@ -1239,9 +1231,9 @@ interface NSFileProviderTestingDeletion : NSFileProviderTestingOperation {
interface INSFileProviderTestingContentFetch { }
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingContentFetch : NSFileProviderTestingOperation {
[Abstract]
@@ -1255,9 +1247,9 @@ interface NSFileProviderTestingContentFetch : NSFileProviderTestingOperation {
interface INSFileProviderTestingChildrenEnumeration { }
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingChildrenEnumeration : NSFileProviderTestingOperation {
[Abstract]
@@ -1271,9 +1263,9 @@ interface NSFileProviderTestingChildrenEnumeration : NSFileProviderTestingOperat
interface INSFileProviderTestingCollisionResolution { }
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[NoWatch, NoTV, NoiOS, Mac (11,3)]
- [Protocol, Advice ("This API is not available when using UIKit on macOS.")]
+ [Protocol]
interface NSFileProviderTestingCollisionResolution : NSFileProviderTestingOperation {
[Abstract]
diff --git a/src/generator.cs b/src/generator.cs
index 2da9333b7d61..b27b2a0500c4 100644
--- a/src/generator.cs
+++ b/src/generator.cs
@@ -1760,7 +1760,7 @@ public TrampolineInfo MakeTrampoline (Type t)
Type et = pi.ParameterType.GetElementType ();
if (IsWrappedType (et)){
pars.AppendFormat ("IntPtr {0}", safe_name);
- invoke.AppendFormat ("NSArray.ArrayFromHandle<{0}> ({1})", FormatType (null, et), safe_name);
+ invoke.AppendFormat ("CFArray.ArrayFromHandle<{0}> ({1})!", FormatType (null, et), safe_name);
continue;
}
}
@@ -2708,7 +2708,7 @@ void GenerateTrampolinesForQueue (TrampolineInfo [] queue)
if (by_ref_processing.Length > 0)
print (sw, by_ref_processing.ToString ());
if (use_temp_return)
- print ("return ret;");
+ print ("return ret!;");
indent--; print ("}");
indent--;
print ("}} /* class {0} */", ti.NativeInvokerName);
@@ -3067,7 +3067,7 @@ void GenerateEventArgsFile ()
var fullname = propertyType.FullName;
if (is_property_array_wrapped_type) {
- print ("return NSArray.ArrayFromHandle<{0}> (value);", RenderType (et));
+ print ("return CFArray.ArrayFromHandle<{0}> (value)!;", RenderType (et));
} else if (is_property_wrapped_type) {
print ("return Runtime.GetNSObject<{0}> (value);", RenderType (propertyType));
} else if (propertyType == TypeManager.System_Double)
@@ -3852,16 +3852,16 @@ void GetReturnsWrappers (MethodInfo mi, MemberInformation minfo, Type declaringT
cast_a = "CFArray.StringArrayFromHandle (";
cast_b = ")!";
} else if (minfo != null && minfo.protocolize) {
- cast_a = "NSArray.ArrayFromHandle(";
- cast_b = ")";
+ cast_a = "CFArray.ArrayFromHandle(";
+ cast_b = ")!";
} else if (etype == TypeManager.Selector) {
exceptions.Add (ErrorHelper.CreateError (1066, mai.Type.FullName, mi.DeclaringType.FullName, mi.Name));
} else {
if (NamespaceManager.NamespacesThatConflictWithTypes.Contains (etype.Namespace))
- cast_a = "NSArray.ArrayFromHandle(";
+ cast_a = "CFArray.ArrayFromHandle(";
else
- cast_a = "NSArray.ArrayFromHandle<" + FormatType (mi.DeclaringType, etype) + ">(";
- cast_b = ")";
+ cast_a = "CFArray.ArrayFromHandle<" + FormatType (mi.DeclaringType, etype) + ">(";
+ cast_b = ")!";
}
}
}
@@ -4322,7 +4322,7 @@ void GenerateTypeLowering (MethodInfo mi, bool null_allowed_override, EnumMode e
by_ref_processing.AppendFormat ("if ({0}Value != ({0}ArrayValue is null ? IntPtr.Zero : {0}ArrayValue.Handle))\n\t", pi.Name.GetSafeParamName ());
if (isArrayOfNSObject || isArrayOfINativeObjectSubclass) {
- by_ref_processing.AppendFormat ("{0} = NSArray.ArrayFromHandle<{1}> ({0}Value);\n", pi.Name.GetSafeParamName (), RenderType (elementType.GetElementType ()));
+ by_ref_processing.AppendFormat ("{0} = CFArray.ArrayFromHandle<{1}> ({0}Value)!;\n", pi.Name.GetSafeParamName (), RenderType (elementType.GetElementType ()));
} else if (isArrayOfString) {
by_ref_processing.AppendFormat ("{0} = CFArray.StringArrayFromHandle ({0}Value)!;\n", pi.Name.GetSafeParamName ());
} else {
diff --git a/src/intentsui.cs b/src/intentsui.cs
index f33e4fe8977c..c5f4141e3b90 100644
--- a/src/intentsui.cs
+++ b/src/intentsui.cs
@@ -105,8 +105,7 @@ interface INUIAddVoiceShortcutViewController {
[NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
NSObject WeakDelegate { get; set; }
- [Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("initWithShortcut:")]
IntPtr Constructor (INShortcut shortcut);
}
@@ -139,8 +138,7 @@ interface INUIEditVoiceShortcutViewController {
[NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
NSObject WeakDelegate { get; set; }
- [Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("initWithVoiceShortcut:")]
IntPtr Constructor (INVoiceShortcut voiceShortcut);
}
diff --git a/src/metal.cs b/src/metal.cs
index 8921d07ecfaa..e9d0d0b064db 100644
--- a/src/metal.cs
+++ b/src/metal.cs
@@ -877,18 +877,16 @@ partial interface MTLBlitCommandEncoder : MTLCommandEncoder {
#if XAMCORE_4_0
[Abstract]
#endif
- [Unavailable (PlatformName.MacCatalyst)]
[Mac (11,0), NoTV, iOS (13,0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("getTextureAccessCounters:region:mipLevel:slice:resetCounters:countersBuffer:countersBufferOffset:")]
void GetTextureAccessCounters (IMTLTexture texture, MTLRegion region, nuint mipLevel, nuint slice, bool resetCounters, IMTLBuffer countersBuffer, nuint countersBufferOffset);
#if XAMCORE_4_0
[Abstract]
#endif
- [Unavailable (PlatformName.MacCatalyst)]
[Mac (11,0), NoTV, iOS (13,0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("resetTextureAccessCounters:region:mipLevel:slice:")]
void ResetTextureAccessCounters (IMTLTexture texture, MTLRegion region, nuint mipLevel, nuint slice);
@@ -1385,7 +1383,6 @@ partial interface MTLDevice {
#endif
[Introduced (PlatformName.MacCatalyst, 14, 0)]
[Mac (11,0), NoTV, iOS (13,0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
[Export ("sparseTileSizeWithTextureType:pixelFormat:sampleCount:")]
MTLSize GetSparseTileSize (MTLTextureType textureType, MTLPixelFormat pixelFormat, nuint sampleCount);
@@ -1834,27 +1831,24 @@ partial interface MTLTexture : MTLResource {
#if XAMCORE_4_0
[Abstract]
#endif
- [Unavailable (PlatformName.MacCatalyst)]
+ [NoMacCatalyst]
[Mac (11,0), NoTV, iOS (13, 0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
[Export ("firstMipmapInTail")]
nuint FirstMipmapInTail { get; }
#if XAMCORE_4_0
[Abstract]
#endif
- [Unavailable (PlatformName.MacCatalyst)]
[Mac (11,0), NoTV, iOS (13, 0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("tailSizeInBytes")]
nuint TailSizeInBytes { get; }
#if XAMCORE_4_0
[Abstract]
#endif
- [Unavailable (PlatformName.MacCatalyst)]
[Mac (11,0), NoTV, iOS (13, 0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("isSparse")]
bool IsSparse { get; }
@@ -3454,9 +3448,8 @@ interface MTLRenderPassDescriptor : NSCopying {
nuint RenderTargetHeight { get; set; }
/* Selectors reported missing by instrospection: https://github.com/xamarin/maccore/issues/1978
- [Unavailable (PlatformName.MacCatalyst)]
[NoMac, NoTV, iOS (13, 0)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("maxVertexAmplificationCount")]
nuint MaxVertexAmplificationCount { get; set; }
*/
diff --git a/src/passkit.cs b/src/passkit.cs
index 2b1582f7f4a6..76cd166e0538 100644
--- a/src/passkit.cs
+++ b/src/passkit.cs
@@ -243,14 +243,14 @@ interface PKPayment {
PKPaymentToken Token { get; }
[NoMac]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NoWatch]
[Export ("billingAddress", ArgumentSemantic.Assign)]
[Availability (Deprecated = Platform.iOS_9_0, Message = "Use 'BillingContact' instead.")]
ABRecord BillingAddress { get; }
[NoMac]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NoWatch]
[Export ("shippingAddress", ArgumentSemantic.Assign)]
[Availability (Deprecated = Platform.iOS_9_0, Message = "Use 'ShippingContact' instead.")]
@@ -307,7 +307,7 @@ interface PKPaymentAuthorizationViewControllerDelegate {
[EventArgs ("PKPaymentRequestShippingMethodUpdate")]
void DidSelectShippingMethod2 (PKPaymentAuthorizationViewController controller, PKShippingMethod shippingMethod, Action completion);
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Deprecated (PlatformName.iOS, 9, 0)]
[NoMac]
[Export ("paymentAuthorizationViewController:didSelectShippingAddress:completion:")]
@@ -481,7 +481,7 @@ interface PKPaymentRequest {
PKAddressField RequiredBillingAddressFields { get; set; }
[NoMac]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NoWatch]
[NullAllowed] // by default this property is null
[Export ("billingAddress", ArgumentSemantic.Assign)]
@@ -495,7 +495,7 @@ interface PKPaymentRequest {
PKAddressField RequiredShippingAddressFields { get; set; }
[NoMac]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NoWatch]
[NullAllowed] // by default this property is null
[Export ("shippingAddress", ArgumentSemantic.Assign)]
diff --git a/src/photos.cs b/src/photos.cs
index bfa713d9c8c3..c989f03aac2d 100644
--- a/src/photos.cs
+++ b/src/photos.cs
@@ -131,10 +131,9 @@ interface PHAsset {
[Deprecated (PlatformName.TvOS, 11,0)]
[Deprecated (PlatformName.iOS, 11,0)]
- [Unavailable (PlatformName.MacCatalyst)]
[NoMac]
[Static]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("fetchAssetsWithALAssetURLs:options:")]
PHFetchResult FetchAssets (NSUrl[] assetUrls, [NullAllowed] PHFetchOptions options);
@@ -1385,8 +1384,7 @@ interface PHLivePhotoEditingOption {
[Mac (10,13)]
[NoiOS][NoTV]
- [Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (PHAssetCollection))]
interface PHProject {
@@ -1401,7 +1399,7 @@ interface PHProject {
[Mac (10,13)]
[Unavailable (PlatformName.MacCatalyst)]
[NoiOS][NoTV]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (PHChangeRequest))]
interface PHProjectChangeRequest {
diff --git a/src/photosui.cs b/src/photosui.cs
index 4893956d964e..7c798dfe023c 100644
--- a/src/photosui.cs
+++ b/src/photosui.cs
@@ -477,8 +477,7 @@ interface PHProjectTypeDescriptionInvalidator
[iOS (8,0)]
[NoMac][NoTV]
[DisableDefaultCtor]
- [Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Deprecated (PlatformName.iOS, 13, 0)]
[BaseType (typeof (NSExtensionContext))]
interface PHEditingExtensionContext
diff --git a/src/pushkit.cs b/src/pushkit.cs
index e3db3a4a801d..d489205f0c03 100644
--- a/src/pushkit.cs
+++ b/src/pushkit.cs
@@ -96,7 +96,7 @@ interface PKPushRegistryDelegate {
[NoMac]
[Abstract] // now optional in iOS 11
[Deprecated (PlatformName.iOS, 11,0, message: "Use the 'DidReceiveIncomingPushWithPayload' overload accepting an 'Action' argument instead.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("pushRegistry:didReceiveIncomingPushWithPayload:forType:"), EventArgs ("PKPushRegistryRecieved"), EventName ("IncomingPushReceived")]
void DidReceiveIncomingPush (PKPushRegistry registry, PKPushPayload payload, string type);
diff --git a/src/scenekit.cs b/src/scenekit.cs
index f0229c3fe6b3..d3698621c7a2 100644
--- a/src/scenekit.cs
+++ b/src/scenekit.cs
@@ -1210,7 +1210,7 @@ interface SCNHitTestResult {
#if MONOMAC
[iOS (8,0)]
[Deprecated (PlatformName.MacOSX, 10, 14, message: "Please use Metal instead of OpenGL API.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (CAOpenGLLayer))]
interface SCNLayer : SCNSceneRenderer, SCNTechniqueSupport {
// We already pull in the Scene property from the SCNSceneRenderer protocol, no need to redefine it here.
@@ -1680,7 +1680,7 @@ interface SCNMaterialProperty : SCNAnimatable, NSSecureCoding {
[Deprecated (PlatformName.iOS, 10, 0)]
[Deprecated (PlatformName.MacOSX, 10, 12)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NoWatch, NoTV]
[NullAllowed, Export ("borderColor", ArgumentSemantic.Retain)]
NSObject BorderColor { get; set; }
@@ -2511,7 +2511,7 @@ interface SCNProgramDelegate {
[NoTV, NoWatch]
#endif
[Availability (Deprecated = Platform.Mac_10_10, Message = "Use the SCNProgram's Opaque property instead.")]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Export ("programIsOpaque:")]
bool IsProgramOpaque (SCNProgram program);
#endif
@@ -2568,7 +2568,7 @@ interface SCNRenderer : SCNSceneRenderer, SCNTechniqueSupport {
[Export ("render")]
[Deprecated (PlatformName.MacOSX, 10, 11)]
[Deprecated (PlatformName.iOS, 9, 0)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
void Render ();
[Mac (10,10)]
@@ -3442,7 +3442,7 @@ interface SCNTube {
[Internal] // we'll make it public if there's a need for them (beside the strong dictionary we provide)
interface SCNRenderingOptionsKeys {
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Field ("SCNPreferredRenderingAPIKey")]
NSString RenderingApiKey { get; }
diff --git a/src/uikit.cs b/src/uikit.cs
index 038ddfe590d7..81738061230c 100644
--- a/src/uikit.cs
+++ b/src/uikit.cs
@@ -2535,7 +2535,7 @@ interface UIApplicationShortcutIcon : NSCopying
UIApplicationShortcutIcon FromSystemImageName (string systemImageName);
#if IOS // This is inside ContactsUI.framework
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Static, Export ("iconWithContact:")]
UIApplicationShortcutIcon FromContact (CNContact contact);
#endif // IOS
@@ -15329,8 +15329,7 @@ partial interface TransitionCoordinator_UIViewController {
IUIViewControllerTransitionCoordinator GetTransitionCoordinator ();
}
- [Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NoTV]
[Deprecated (PlatformName.iOS, 12, 0, message: "No longer supported; please adopt 'WKWebView'.")]
[BaseType (typeof (UIView), Delegates=new string [] { "WeakDelegate" }, Events=new Type [] {typeof(UIWebViewDelegate)})]
@@ -15434,8 +15433,7 @@ interface UIWebView : UIScrollViewDelegate {
bool AllowsLinkPreview { get; set; }
}
- [Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[NoTV]
[Deprecated (PlatformName.iOS, 12, 0, message: "No longer supported; please adopt 'WKWebView' APIs.")]
[BaseType (typeof (NSObject))]
diff --git a/src/videosubscriberaccount.cs b/src/videosubscriberaccount.cs
index 0e0d90efd501..adbe569df049 100644
--- a/src/videosubscriberaccount.cs
+++ b/src/videosubscriberaccount.cs
@@ -24,7 +24,7 @@ namespace VideoSubscriberAccount {
[TV (10, 0)]
[Mac (10,14)]
[Unavailable (PlatformName.WatchOS)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[ErrorDomain ("VSErrorDomain")]
public enum VSErrorCode : long {
AccessNotGranted = 0,
@@ -42,7 +42,7 @@ public enum VSErrorCode : long {
[TV (10, 0)]
[Mac (10,14)]
[Unavailable (PlatformName.WatchOS)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
public enum VSAccountAccessStatus : long {
NotDetermined = 0,
Restricted = 1,
@@ -54,7 +54,7 @@ public enum VSAccountAccessStatus : long {
[TV (10, 0)]
[Mac (10,14)]
[Unavailable (PlatformName.WatchOS)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Static]
[Internal]
interface VSErrorInfoKeys {
@@ -98,7 +98,7 @@ interface IVSAccountManagerDelegate { }
[TV (10, 0)]
[Mac (10,14)]
[Unavailable (PlatformName.WatchOS)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (NSObject))]
interface VSAccountManagerDelegate {
@@ -158,7 +158,7 @@ interface VSAccountManager {
[Unavailable (PlatformName.WatchOS)]
[Static]
[Internal]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
interface VSCheckAccessOptionKeys {
[Field ("VSCheckAccessOptionPrompt")]
@@ -181,7 +181,7 @@ interface VSAccountManagerAccessOptions {
[TV (10, 0)]
[Mac (10,14)]
[Unavailable (PlatformName.WatchOS)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
interface VSAccountManagerResult {
@@ -194,7 +194,7 @@ interface VSAccountManagerResult {
[TV (10, 0)]
[Mac (10,14)]
[Unavailable (PlatformName.WatchOS)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (NSObject))]
interface VSAccountMetadata {
@@ -219,7 +219,7 @@ interface VSAccountMetadata {
[Mac (10,14)]
[TV (10, 0)]
[Unavailable (PlatformName.WatchOS)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (NSObject))]
interface VSAccountMetadataRequest {
@@ -271,7 +271,7 @@ interface VSAccountMetadataRequest {
[iOS (10,2)]
[TV (10,1)]
[Mac (10,14)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (NSObject))]
interface VSAccountProviderResponse {
@@ -292,7 +292,7 @@ interface VSAccountProviderResponse {
[iOS (10,2)]
[TV (10,1)]
[Mac (10,14)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
enum VSAccountProviderAuthenticationScheme {
[Field ("VSAccountProviderAuthenticationSchemeSAML")]
Saml,
@@ -335,7 +335,7 @@ interface VSSubscription {
[TV (11,0)][iOS (11,0)]
[Mac (10,14)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
interface VSSubscriptionRegistrationCenter {
@@ -348,7 +348,7 @@ interface VSSubscriptionRegistrationCenter {
}
[TV (14,2), iOS (14,2), Mac (11,0)]
- [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
interface VSAccountApplicationProvider {
diff --git a/src/xkit.cs b/src/xkit.cs
index 896deb8148b0..cd801b7eb0a1 100644
--- a/src/xkit.cs
+++ b/src/xkit.cs
@@ -1168,7 +1168,6 @@ partial interface NSLayoutManager : NSSecureCoding {
[Deprecated (PlatformName.iOS, 13, 0, message: "Please use 'UsesDefaultHyphenation' or 'NSParagraphStyle.HyphenationFactor' instead.")]
[Deprecated (PlatformName.WatchOS, 6, 0, message: "Please use 'UsesDefaultHyphenation' or 'NSParagraphStyle.HyphenationFactor' instead.")]
[Deprecated (PlatformName.TvOS, 13, 0, message: "Please use 'UsesDefaultHyphenation' or 'NSParagraphStyle.HyphenationFactor' instead.")]
- [Advice ("This API is not available when using UIKit on macOS.")]
[NoMacCatalyst]
[Export ("hyphenationFactor")]
#if MONOMAC
@@ -1296,8 +1295,7 @@ partial interface NSLayoutManager : NSSecureCoding {
[Deprecated (PlatformName.iOS, 13, 0, message: "Use the overload that takes 'nint glyphCount' instead.")]
[Deprecated (PlatformName.WatchOS, 6, 0, message: "Use the overload that takes 'nint glyphCount' instead.")]
[Deprecated (PlatformName.TvOS, 13, 0, message: "Use the overload that takes 'nint glyphCount' instead.")]
- [Unavailable (PlatformName.MacCatalyst)]
- [Advice ("This API is not available when using UIKit on macOS.")]
+ [NoMacCatalyst]
[Protected] // Can be overridden
[Export ("showCGGlyphs:positions:count:font:matrix:attributes:inContext:")]
void ShowGlyphs (IntPtr glyphs, IntPtr positions, nuint glyphCount, NSFont font, CGAffineTransform textMatrix, NSDictionary attributes, CGContext graphicsContext);
diff --git a/tests/bindings-xcframework-test/dotnet/MacCatalyst/Makefile b/tests/bindings-xcframework-test/dotnet/MacCatalyst/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/MacCatalyst/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/bindings-xcframework-test/dotnet/MacCatalyst/bindings-xcframework-test.csproj b/tests/bindings-xcframework-test/dotnet/MacCatalyst/bindings-xcframework-test.csproj
new file mode 100644
index 000000000000..f35666216397
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/MacCatalyst/bindings-xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-maccatalyst
+
+
+
+
+
+
+
+
+
diff --git a/tests/bindings-xcframework-test/dotnet/iOS/Makefile b/tests/bindings-xcframework-test/dotnet/iOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/iOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/bindings-xcframework-test/dotnet/iOS/bindings-xcframework-test.csproj b/tests/bindings-xcframework-test/dotnet/iOS/bindings-xcframework-test.csproj
new file mode 100644
index 000000000000..07d0bfb4fb49
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/iOS/bindings-xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-ios
+
+
+
+
+
+
+
+
+
diff --git a/tests/bindings-xcframework-test/dotnet/macOS/Makefile b/tests/bindings-xcframework-test/dotnet/macOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/macOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/bindings-xcframework-test/dotnet/macOS/bindings-xcframework-test.csproj b/tests/bindings-xcframework-test/dotnet/macOS/bindings-xcframework-test.csproj
new file mode 100644
index 000000000000..f1a8342a1577
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/macOS/bindings-xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-macos
+
+
+
+
+
+
+
+
+
diff --git a/tests/bindings-xcframework-test/dotnet/shared.csproj b/tests/bindings-xcframework-test/dotnet/shared.csproj
new file mode 100644
index 000000000000..582765de57cf
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/shared.csproj
@@ -0,0 +1,51 @@
+
+
+
+ Library
+ true
+ true
+ $(DefineConstants);NET
+ $(DefineConstants);NET;XCFRAMEWORK;FRAMEWORK_TEST
+ latest
+ bindingstest
+ True
+ ..\..\..\..\product.snk
+ True
+ bindings-framework-test
+
+ $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..'))
+ $(RootTestsDirectory)\test-libraries
+ $(RootTestsDirectory)\bindings-framework-test
+
+
+ true
+
+ $(DefineConstants);DEBUG
+
+
+
+
+
+
+
+
+
+ libframework.m
+
+
+ libframework.h
+
+
+
+
+
+ Framework
+ False
+ CoreLocation ModelIO
+
+
+
+
+
+
+
diff --git a/tests/bindings-xcframework-test/dotnet/shared.mk b/tests/bindings-xcframework-test/dotnet/shared.mk
new file mode 100644
index 000000000000..97d95a62af34
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/shared.mk
@@ -0,0 +1,22 @@
+TOP=../../../..
+include $(TOP)/Make.config
+include $(TOP)/mk/colors.mk
+
+prepare:
+ $(Q) $(MAKE) -C $(TOP)/tests/dotnet copy-dotnet-config
+
+reload:
+ $(Q) rm -Rf $(TOP)/tests/dotnet/packages
+ $(Q) $(MAKE) -C $(TOP) -j8 all
+ $(Q) $(MAKE) -C $(TOP) -j8 install
+ $(Q) git clean -xfdq
+
+reload-and-build:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) build
+
+build: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS)
+
+diag: prepare
+ $(Q) $(DOTNET6) build /v:diag msbuild.binlog
diff --git a/tests/bindings-xcframework-test/dotnet/tvOS/Makefile b/tests/bindings-xcframework-test/dotnet/tvOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/tvOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/bindings-xcframework-test/dotnet/tvOS/bindings-xcframework-test.csproj b/tests/bindings-xcframework-test/dotnet/tvOS/bindings-xcframework-test.csproj
new file mode 100644
index 000000000000..c34d0b9628f2
--- /dev/null
+++ b/tests/bindings-xcframework-test/dotnet/tvOS/bindings-xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-tvos
+
+
+
+
+
+
+
+
+
diff --git a/tests/common/PlatformInfo.cs b/tests/common/PlatformInfo.cs
index c3a20c62b97a..5794d9ed68f3 100644
--- a/tests/common/PlatformInfo.cs
+++ b/tests/common/PlatformInfo.cs
@@ -152,11 +152,16 @@ public static bool IsAvailable (this ICustomAttributeProvider attributeProvider,
#if NET
var list = new List ();
foreach (var ca in attributeProvider.GetCustomAttributes (true)) {
- if (ca is OSPlatformAttribute aa)
- list.Add (aa.Convert ());
+ if (ca is OSPlatformAttribute aa) {
+ var converted = aa.Convert ();
+ if (converted is not null)
+ list.Add (converted);
+ }
// FIXME - temporary, while older attributes co-exists (in manual bindings)
if (ca is AvailabilityBaseAttribute old)
list.Add (old);
+ if (ca is ObsoleteAttribute)
+ return false;
}
return list.IsAvailable (targetPlatform);
#else
diff --git a/tests/common/mac/MacMain.cs b/tests/common/mac/MacMain.cs
index 6d8c8adab388..28b3ae4af7ff 100644
--- a/tests/common/mac/MacMain.cs
+++ b/tests/common/mac/MacMain.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
@@ -12,7 +14,11 @@ static async Task Main (string [] args)
var arguments = new List (args);
arguments.RemoveAll ((arg) => arg.StartsWith ("-psn_", StringComparison.Ordinal));
- var exit_code = await MonoTouch.NUnit.UI.MacRunner.MainAsync (arguments, true, _exit, typeof (MainClass).Assembly);
+ var assemblies = new List ();
+ assemblies.Add (typeof (MainClass).Assembly);
+ TestLoader.AddTestAssemblies (assemblies);
+
+ var exit_code = await MonoTouch.NUnit.UI.MacRunner.MainAsync (arguments, true, _exit, assemblies.ToArray ());
#if NET
var exit_monitor = new Thread (() =>
@@ -37,4 +43,14 @@ static async Task Main (string [] args)
[DllImport ("/usr/lib/libSystem.dylib")]
static extern void _exit (int exit_code);
}
+
+ public static partial class TestLoader
+ {
+ static partial void AddTestAssembliesImpl (List assemblies);
+
+ public static void AddTestAssemblies (List assemblies)
+ {
+ AddTestAssembliesImpl (assemblies);
+ }
+ }
}
diff --git a/tests/dotnet/MyPartialAppManifestApp/AppDelegate.cs b/tests/dotnet/MyPartialAppManifestApp/AppDelegate.cs
new file mode 100644
index 000000000000..24a52b91ba7a
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/AppDelegate.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Runtime.InteropServices;
+
+using Foundation;
+
+namespace MySimpleApp
+{
+ public class Program
+ {
+ static int Main (string[] args)
+ {
+ GC.KeepAlive (typeof (NSObject)); // prevent linking away the platform assembly
+
+ Console.WriteLine (Environment.GetEnvironmentVariable ("MAGIC_WORD"));
+
+ return args.Length;
+ }
+ }
+}
diff --git a/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/Info.plist b/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/Info.plist
new file mode 100644
index 000000000000..6631ffa6f242
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/Info.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/Makefile b/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/MyPartialAppManifestApp.csproj b/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/MyPartialAppManifestApp.csproj
new file mode 100644
index 000000000000..ccebf1f77846
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/MacCatalyst/MyPartialAppManifestApp.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-maccatalyst
+
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/Makefile b/tests/dotnet/MyPartialAppManifestApp/Makefile
new file mode 100644
index 000000000000..efb2400edc0f
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/Makefile
@@ -0,0 +1,20 @@
+TOP=../../..
+
+include $(TOP)/Make.config
+
+prepare:
+ cd .. && $(MAKE) global.json NuGet.config
+ rm -Rf */bin */obj
+
+all-ios: prepare
+ $(DOTNET6) build iOS/*.csproj /bl
+
+all-mac: prepare
+ $(DOTNET6) build macOS/*.csproj /bl
+
+run-mac:
+ ./macOS/bin/Debug/net6.0-macos/osx-x64/$(notdir $(CURDIR)).app/Contents/MacOS/$(notdir $(CURDIR))
+
+diag:
+ cd .. && $(MAKE) global.json NuGet.config
+ $(DOTNET6) build /v:diag *binlog
diff --git a/tests/dotnet/MyPartialAppManifestApp/Partial.plist b/tests/dotnet/MyPartialAppManifestApp/Partial.plist
new file mode 100644
index 000000000000..e5046ab0188c
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/Partial.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ Something
+ SomeValue
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/iOS/Info.plist b/tests/dotnet/MyPartialAppManifestApp/iOS/Info.plist
new file mode 100644
index 000000000000..4cbda4223702
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/iOS/Info.plist
@@ -0,0 +1,8 @@
+
+
+
+
+
+ MinimumOSVersion
+ 10.0
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/iOS/Makefile b/tests/dotnet/MyPartialAppManifestApp/iOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/iOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/MyPartialAppManifestApp/iOS/MyPartialAppManifestApp.csproj b/tests/dotnet/MyPartialAppManifestApp/iOS/MyPartialAppManifestApp.csproj
new file mode 100644
index 000000000000..bbb942faa1a6
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/iOS/MyPartialAppManifestApp.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-ios
+
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/macOS/Info.plist b/tests/dotnet/MyPartialAppManifestApp/macOS/Info.plist
new file mode 100644
index 000000000000..246b63052cd0
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/macOS/Info.plist
@@ -0,0 +1,9 @@
+
+
+
+
+
+ LSMinimumSystemVersion
+ 11.0
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/macOS/Makefile b/tests/dotnet/MyPartialAppManifestApp/macOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/macOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/MyPartialAppManifestApp/macOS/MyPartialAppManifestApp.csproj b/tests/dotnet/MyPartialAppManifestApp/macOS/MyPartialAppManifestApp.csproj
new file mode 100644
index 000000000000..56f7fe0d8cb4
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/macOS/MyPartialAppManifestApp.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-macos
+
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/shared.csproj b/tests/dotnet/MyPartialAppManifestApp/shared.csproj
new file mode 100644
index 000000000000..fdd645a09bbf
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/shared.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+
+ MyPartialAppManifestApp
+ com.xamarin.mypartialappmanifestapp
+ 3.14
+
+
+
+
+
+
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/shared.mk b/tests/dotnet/MyPartialAppManifestApp/shared.mk
new file mode 100644
index 000000000000..b31ea91a76fd
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/shared.mk
@@ -0,0 +1,28 @@
+TOP=../../../..
+include $(TOP)/Make.config
+
+prepare:
+ $(Q) $(MAKE) -C $(TOP)/tests/dotnet copy-dotnet-config
+
+reload:
+ $(Q) rm -Rf $(TOP)/tests/dotnet/packages
+ $(Q) $(MAKE) -C $(TOP) -j8 all
+ $(Q) $(MAKE) -C $(TOP) -j8 install
+ $(Q) git clean -xfdq
+
+reload-and-build:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) build
+
+reload-and-run:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) run
+
+build: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS)
+
+run: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS) -t:Run
+
+diag: prepare
+ $(Q) $(DOTNET6) build /v:diag msbuild.binlog
diff --git a/tests/dotnet/MyPartialAppManifestApp/tvOS/Info.plist b/tests/dotnet/MyPartialAppManifestApp/tvOS/Info.plist
new file mode 100644
index 000000000000..6631ffa6f242
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/tvOS/Info.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/dotnet/MyPartialAppManifestApp/tvOS/Makefile b/tests/dotnet/MyPartialAppManifestApp/tvOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/tvOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/MyPartialAppManifestApp/tvOS/MyPartialAppManifestApp.csproj b/tests/dotnet/MyPartialAppManifestApp/tvOS/MyPartialAppManifestApp.csproj
new file mode 100644
index 000000000000..07832eb3e046
--- /dev/null
+++ b/tests/dotnet/MyPartialAppManifestApp/tvOS/MyPartialAppManifestApp.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-tvos
+
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/AppDelegate.cs b/tests/dotnet/SimpleAppWithOldReferences/AppDelegate.cs
new file mode 100644
index 000000000000..605c8b25384f
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/AppDelegate.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Runtime.InteropServices;
+
+using Foundation;
+
+namespace MySimpleApp
+{
+ public class Program
+ {
+ static int Main (string[] args)
+ {
+ GC.KeepAlive (typeof (NSObject)); // prevent linking away the platform assembly
+
+ Console.WriteLine (Environment.GetEnvironmentVariable ("MAGIC_WORD"));
+ Console.WriteLine (typeof (MyClass));
+
+ return args.Length;
+ }
+ }
+}
diff --git a/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/Info.plist b/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/Info.plist
new file mode 100644
index 000000000000..246b63052cd0
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/Info.plist
@@ -0,0 +1,9 @@
+
+
+
+
+
+ LSMinimumSystemVersion
+ 11.0
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/Makefile b/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/SimpleAppWithOldReferences.csproj b/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/SimpleAppWithOldReferences.csproj
new file mode 100644
index 000000000000..ccebf1f77846
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/MacCatalyst/SimpleAppWithOldReferences.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-maccatalyst
+
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/dotnet45assembly/Library.cs b/tests/dotnet/SimpleAppWithOldReferences/dotnet45assembly/Library.cs
new file mode 100644
index 000000000000..681db6e6b949
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/dotnet45assembly/Library.cs
@@ -0,0 +1,2 @@
+public class MyClass {
+}
diff --git a/tests/dotnet/SimpleAppWithOldReferences/dotnet45assembly/Makefile b/tests/dotnet/SimpleAppWithOldReferences/dotnet45assembly/Makefile
new file mode 100644
index 000000000000..9188c3e964f0
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/dotnet45assembly/Makefile
@@ -0,0 +1,8 @@
+TOP=../../../..
+
+include $(TOP)/Make.config
+
+dotnet45assembly.dll: Library.cs
+ $(SYSTEM_CSC) -target:library -out:$@ $<
+
+all-local:: dotnet45assembly.dll
diff --git a/tests/dotnet/SimpleAppWithOldReferences/iOS/Info.plist b/tests/dotnet/SimpleAppWithOldReferences/iOS/Info.plist
new file mode 100644
index 000000000000..87024a4f4b8a
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/iOS/Info.plist
@@ -0,0 +1,7 @@
+
+
+
+
+ MinimumOSVersion
+ 10.0
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/iOS/Makefile b/tests/dotnet/SimpleAppWithOldReferences/iOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/iOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/SimpleAppWithOldReferences/iOS/SimpleAppWithOldReferences.csproj b/tests/dotnet/SimpleAppWithOldReferences/iOS/SimpleAppWithOldReferences.csproj
new file mode 100644
index 000000000000..bbb942faa1a6
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/iOS/SimpleAppWithOldReferences.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-ios
+
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/macOS/Info.plist b/tests/dotnet/SimpleAppWithOldReferences/macOS/Info.plist
new file mode 100644
index 000000000000..246b63052cd0
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/macOS/Info.plist
@@ -0,0 +1,9 @@
+
+
+
+
+
+ LSMinimumSystemVersion
+ 11.0
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/macOS/Makefile b/tests/dotnet/SimpleAppWithOldReferences/macOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/macOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/SimpleAppWithOldReferences/macOS/SimpleAppWithOldReferences.csproj b/tests/dotnet/SimpleAppWithOldReferences/macOS/SimpleAppWithOldReferences.csproj
new file mode 100644
index 000000000000..0af05cf82e0c
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/macOS/SimpleAppWithOldReferences.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-macos
+
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/shared.csproj b/tests/dotnet/SimpleAppWithOldReferences/shared.csproj
new file mode 100644
index 000000000000..75a85d0b6fae
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/shared.csproj
@@ -0,0 +1,20 @@
+
+
+
+ Exe
+
+ SimpleAppWithOldReferences
+ com.xamarin.mysimpleappwitholdreferences
+ 1.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/shared.mk b/tests/dotnet/SimpleAppWithOldReferences/shared.mk
new file mode 100644
index 000000000000..2680d399f5b2
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/shared.mk
@@ -0,0 +1,34 @@
+TOP=../../../..
+
+include $(TOP)/Make.config
+
+TESTNAME=$(shell basename "$(shell dirname "$(CURDIR)")")
+
+prepare:
+ $(Q) $(MAKE) -C $(TOP)/tests/dotnet copy-dotnet-config
+
+reload:
+ $(Q) rm -Rf $(TOP)/tests/dotnet/packages
+ $(Q) $(MAKE) -C $(TOP) -j8 all
+ $(Q) $(MAKE) -C $(TOP) -j8 install
+ $(Q) git clean -xfdq
+
+reload-and-build:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) build
+
+reload-and-run:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) run
+
+build: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS)
+
+run: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS) -t:Run
+
+run-bare:
+ $(Q) ./bin/Debug/net6.0-*/*/"$(TESTNAME)".app/Contents/MacOS/"$(TESTNAME)"
+
+diag: prepare
+ $(Q) $(DOTNET6) build /v:diag msbuild.binlog
diff --git a/tests/dotnet/SimpleAppWithOldReferences/tvOS/Info.plist b/tests/dotnet/SimpleAppWithOldReferences/tvOS/Info.plist
new file mode 100644
index 000000000000..6631ffa6f242
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/tvOS/Info.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/dotnet/SimpleAppWithOldReferences/tvOS/Makefile b/tests/dotnet/SimpleAppWithOldReferences/tvOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/tvOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/dotnet/SimpleAppWithOldReferences/tvOS/SimpleAppWithOldReferences.csproj b/tests/dotnet/SimpleAppWithOldReferences/tvOS/SimpleAppWithOldReferences.csproj
new file mode 100644
index 000000000000..940a8d55a0e7
--- /dev/null
+++ b/tests/dotnet/SimpleAppWithOldReferences/tvOS/SimpleAppWithOldReferences.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0-tvos
+
+
+
diff --git a/tests/dotnet/UnitTests/PartialAppManifestTest.cs b/tests/dotnet/UnitTests/PartialAppManifestTest.cs
new file mode 100644
index 000000000000..4db85b728353
--- /dev/null
+++ b/tests/dotnet/UnitTests/PartialAppManifestTest.cs
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+
+using NUnit.Framework;
+
+using Xamarin.Utils;
+using Xamarin.MacDev;
+
+namespace Xamarin.Tests {
+ public class PartialAppManifestTest : TestBaseClass {
+
+ [Test]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ public void Build (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var project = "MyPartialAppManifestApp";
+ Configuration.IgnoreIfIgnoredPlatform (platform);
+
+ var project_path = GetProjectPath (project, runtimeIdentifiers: runtimeIdentifiers, platform: platform, out var appPath);
+ Clean (project_path);
+ var properties = new Dictionary (verbosity);
+ SetRuntimeIdentifiers (properties, runtimeIdentifiers);
+
+ DotNet.AssertBuild (project_path, properties);
+
+ var infoPlistPath = GetInfoPListPath (platform, appPath);
+ var infoPlist = PDictionary.FromFile (infoPlistPath);
+ Assert.AreEqual ("com.xamarin.mypartialappmanifestapp", infoPlist.GetString ("CFBundleIdentifier").Value, "CFBundleIdentifier");
+ Assert.AreEqual ("MyPartialAppManifestApp", infoPlist.GetString ("CFBundleDisplayName").Value, "CFBundleDisplayName");
+ Assert.AreEqual ("3.14", infoPlist.GetString ("CFBundleVersion").Value, "CFBundleVersion");
+ Assert.AreEqual ("3.14", infoPlist.GetString ("CFBundleShortVersionString").Value, "CFBundleShortVersionString");
+ Assert.AreEqual ("SomeValue", infoPlist.GetString ("Something").Value, "Something");
+ }
+ }
+}
diff --git a/tests/dotnet/UnitTests/ProjectTest.cs b/tests/dotnet/UnitTests/ProjectTest.cs
index 4dbe890123cb..910df67edd62 100644
--- a/tests/dotnet/UnitTests/ProjectTest.cs
+++ b/tests/dotnet/UnitTests/ProjectTest.cs
@@ -616,10 +616,39 @@ public void AbsoluteOutputPath (ApplePlatform platform, string runtimeIdentifier
ExecuteWithMagicWordAndAssert (appExecutable);
}
+ [Test]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ public void SimpleAppWithOldReferences (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var project = "SimpleAppWithOldReferences";
+ Configuration.IgnoreIfIgnoredPlatform (platform);
+
+ var project_path = GetProjectPath (project, runtimeIdentifiers: runtimeIdentifiers, platform: platform, out var appPath);
+ Clean (project_path);
+
+ DotNet.AssertBuild (project_path, GetDefaultProperties (runtimeIdentifiers));
+
+ var appExecutable = Path.Combine (appPath, "Contents", "MacOS", Path.GetFileNameWithoutExtension (project_path));
+ Assert.That (appExecutable, Does.Exist, "There is an executable");
+ ExecuteWithMagicWordAndAssert (platform, runtimeIdentifiers, appExecutable);
+ }
+
+ void ExecuteWithMagicWordAndAssert (ApplePlatform platform, string runtimeIdentifiers, string executable)
+ {
+ if (!CanExecute (platform, runtimeIdentifiers))
+ return;
+
+ ExecuteWithMagicWordAndAssert (executable);
+ }
+
void ExecuteWithMagicWordAndAssert (string executable)
{
var magicWord = Guid.NewGuid ().ToString ();
- var env = new Dictionary { { "MAGIC_WORD", magicWord } };
+ var env = new Dictionary {
+ { "MAGIC_WORD", magicWord },
+ { "DYLD_FALLBACK_LIBRARY_PATH", null }, // VSMac might set this, which may cause tests to crash.
+ };
var output = new StringBuilder ();
var rv = Execution.RunWithStringBuildersAsync (executable, Array.Empty (), environment: env, standardOutput: output, standardError: output, timeout: TimeSpan.FromSeconds (15)).Result;
@@ -641,21 +670,6 @@ void AssertThatLinkerDidNotExecute (ExecutionResult result)
Assert.That (output, Does.Not.Contain ("LinkerConfiguration:"), "Custom steps did not run as expected.");
}
- string GetInfoPListPath (ApplePlatform platform, string app_directory)
- {
- switch (platform) {
- case ApplePlatform.iOS:
- case ApplePlatform.TVOS:
- case ApplePlatform.WatchOS:
- return Path.Combine (app_directory, "Info.plist");
- case ApplePlatform.MacOSX:
- case ApplePlatform.MacCatalyst:
- return Path.Combine (app_directory, "Contents", "Info.plist");
- default:
- throw new NotImplementedException ($"Unknown platform: {platform}");
- }
- }
-
void AssertAppContents (ApplePlatform platform, string app_directory)
{
var info_plist_path = GetInfoPListPath (platform, app_directory);
diff --git a/tests/dotnet/UnitTests/TestBaseClass.cs b/tests/dotnet/UnitTests/TestBaseClass.cs
index 4b184886dbb4..31dc450c4ebf 100644
--- a/tests/dotnet/UnitTests/TestBaseClass.cs
+++ b/tests/dotnet/UnitTests/TestBaseClass.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Runtime.InteropServices;
using System.Text;
using Mono.Cecil;
@@ -77,5 +78,45 @@ protected void Clean (string project_path)
Directory.Delete (dir, true);
}
}
+
+ protected bool CanExecute (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ switch (platform) {
+ case ApplePlatform.iOS:
+ case ApplePlatform.TVOS:
+ case ApplePlatform.WatchOS:
+ return false;
+ case ApplePlatform.MacOSX:
+ case ApplePlatform.MacCatalyst:
+ // If we're targetting x64, then we can execute everywhere
+ if (runtimeIdentifiers.Contains ("-x64", StringComparison.Ordinal))
+ return true;
+
+ // If we're not targeting x64, and we're executing on x64, then we're out of luck
+ if (RuntimeInformation.ProcessArchitecture == Architecture.X64)
+ return false;
+
+ // Otherwise we can still execute.
+ return true;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+ }
+
+ protected string GetInfoPListPath (ApplePlatform platform, string app_directory)
+ {
+ switch (platform) {
+ case ApplePlatform.iOS:
+ case ApplePlatform.TVOS:
+ case ApplePlatform.WatchOS:
+ return Path.Combine (app_directory, "Info.plist");
+ case ApplePlatform.MacOSX:
+ case ApplePlatform.MacCatalyst:
+ return Path.Combine (app_directory, "Contents", "Info.plist");
+ default:
+ throw new NotImplementedException ($"Unknown platform: {platform}");
+ }
+ }
+
}
}
diff --git a/tests/interdependent-binding-projects/Main.cs b/tests/interdependent-binding-projects/Main.cs
index 5d621154db34..ae02ef6a198f 100644
--- a/tests/interdependent-binding-projects/Main.cs
+++ b/tests/interdependent-binding-projects/Main.cs
@@ -1,13 +1,27 @@
using System;
+using System.Collections.Generic;
+using System.Reflection;
using Foundation;
+#if !__MACOS__
using UIKit;
+#endif
using MonoTouch.NUnit.UI;
using NUnit.Framework;
using NUnit.Framework.Internal;
-#if !__WATCHOS__
+#if __MACOS__
+namespace Xamarin.Mac.Tests {
+ public static partial class TestLoader {
+ static partial void AddTestAssembliesImpl (List assemblies)
+ {
+ assemblies.Add (typeof (Xamarin.BindingTests2.BindingTest).Assembly);
+ assemblies.Add (typeof (Xamarin.BindingTests.ProtocolTest).Assembly);
+ }
+ }
+}
+#elif !__WATCHOS__
[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
@@ -48,3 +62,13 @@ static partial void AddTestAssembliesImpl (BaseTouchRunner runner)
}
#endif // !__WATCHOS__
+
+// In some cases NUnit fails if asked to run tests from an assembly that doesn't have any tests. So add a dummy test here to not fail in that scenario.
+[TestFixture]
+public class DummyTest
+{
+ public void TestMe ()
+ {
+ Assert.True (true, "YAY!");
+ }
+}
diff --git a/tests/interdependent-binding-projects/dotnet/MacCatalyst/Info.plist b/tests/interdependent-binding-projects/dotnet/MacCatalyst/Info.plist
index 0c59aa4d9d24..9e52cea65e2f 100644
--- a/tests/interdependent-binding-projects/dotnet/MacCatalyst/Info.plist
+++ b/tests/interdependent-binding-projects/dotnet/MacCatalyst/Info.plist
@@ -8,12 +8,7 @@
com.xamarin.dotnet.interdependentbindingprojects
CFBundleName
InterdependentBindingProject
- MinimumOSVersion
- 7.0
- UIDeviceFamily
-
- 1
- 2
-
+ LSMinimumSystemVersion
+ 10.15
diff --git a/tests/interdependent-binding-projects/dotnet/MacCatalyst/Makefile b/tests/interdependent-binding-projects/dotnet/MacCatalyst/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/interdependent-binding-projects/dotnet/MacCatalyst/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/interdependent-binding-projects/dotnet/MacCatalyst/interdependent-binding-projects.csproj b/tests/interdependent-binding-projects/dotnet/MacCatalyst/interdependent-binding-projects.csproj
index e98c4fe4a4aa..f35666216397 100644
--- a/tests/interdependent-binding-projects/dotnet/MacCatalyst/interdependent-binding-projects.csproj
+++ b/tests/interdependent-binding-projects/dotnet/MacCatalyst/interdependent-binding-projects.csproj
@@ -2,29 +2,12 @@
net6.0-maccatalyst
- Exe
- true
- latest
- maccatalyst-x64
- xamarinios10;$(AssetTargetFallback)
- ..\..\..\
-
- $(DefaultItemExcludes);packages/**;
- $(RootTestsDirectory)\..\product.snk
-
-
-
-
-
-
-
-
-
+
+
-
-
+
diff --git a/tests/interdependent-binding-projects/dotnet/iOS/Makefile b/tests/interdependent-binding-projects/dotnet/iOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/interdependent-binding-projects/dotnet/iOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/interdependent-binding-projects/dotnet/iOS/interdependent-binding-projects.csproj b/tests/interdependent-binding-projects/dotnet/iOS/interdependent-binding-projects.csproj
index 7547040cb83f..07d0bfb4fb49 100644
--- a/tests/interdependent-binding-projects/dotnet/iOS/interdependent-binding-projects.csproj
+++ b/tests/interdependent-binding-projects/dotnet/iOS/interdependent-binding-projects.csproj
@@ -2,29 +2,12 @@
net6.0-ios
- Exe
- true
- latest
- iossimulator-x64
- xamarinios10;$(AssetTargetFallback)
- ..\..\..\
-
- $(DefaultItemExcludes);packages/**;
- $(RootTestsDirectory)\..\product.snk
-
-
-
-
-
-
-
-
-
+
+
-
-
+
diff --git a/tests/interdependent-binding-projects/dotnet/macOS/Info.plist b/tests/interdependent-binding-projects/dotnet/macOS/Info.plist
index ce0ca562299d..9627353712b1 100644
--- a/tests/interdependent-binding-projects/dotnet/macOS/Info.plist
+++ b/tests/interdependent-binding-projects/dotnet/macOS/Info.plist
@@ -7,7 +7,7 @@
CFBundleIdentifier
com.xamarin.dotnet.interdependentbindingprojects
CFBundleName
- CFBundleIdentifier
+ InterdependentBindingProject
LSMinimumSystemVersion
10.14
diff --git a/tests/interdependent-binding-projects/dotnet/macOS/Makefile b/tests/interdependent-binding-projects/dotnet/macOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/interdependent-binding-projects/dotnet/macOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/interdependent-binding-projects/dotnet/macOS/interdependent-binding-projects.csproj b/tests/interdependent-binding-projects/dotnet/macOS/interdependent-binding-projects.csproj
index 2c7e9dc36c5b..f1a8342a1577 100644
--- a/tests/interdependent-binding-projects/dotnet/macOS/interdependent-binding-projects.csproj
+++ b/tests/interdependent-binding-projects/dotnet/macOS/interdependent-binding-projects.csproj
@@ -2,25 +2,12 @@
net6.0-macos
- Exe
- true
- latest
- osx-x64
- ..\..\..\
-
- $(DefaultItemExcludes);packages/**;
- $(RootTestsDirectory)\..\product.snk
-
-
-
-
-
-
+
+
-
-
+
diff --git a/tests/interdependent-binding-projects/dotnet/shared.csproj b/tests/interdependent-binding-projects/dotnet/shared.csproj
new file mode 100644
index 000000000000..ac9e039cf643
--- /dev/null
+++ b/tests/interdependent-binding-projects/dotnet/shared.csproj
@@ -0,0 +1,39 @@
+
+
+
+ Exe
+ $(DefineConstants);NET
+ latest
+ interdependentbindingprojects
+
+ true
+
+ $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..'))
+ $(RootTestsDirectory)\test-libraries
+ $(RootTestsDirectory)\interdependent-binding-projects
+
+ $(RootTestsDirectory)\..\product.snk
+
+
+ true
+
+ $(DefineConstants);DEBUG
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/interdependent-binding-projects/dotnet/shared.mk b/tests/interdependent-binding-projects/dotnet/shared.mk
new file mode 100644
index 000000000000..bc7ccd259626
--- /dev/null
+++ b/tests/interdependent-binding-projects/dotnet/shared.mk
@@ -0,0 +1,29 @@
+TOP=../../../..
+include $(TOP)/Make.config
+include $(TOP)/mk/colors.mk
+
+prepare:
+ $(Q) $(MAKE) -C $(TOP)/tests/dotnet copy-dotnet-config
+
+reload:
+ $(Q) rm -Rf $(TOP)/tests/dotnet/packages
+ $(Q) $(MAKE) -C $(TOP) -j8 all
+ $(Q) $(MAKE) -C $(TOP) -j8 install
+ $(Q) git clean -xfdq
+
+reload-and-build:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) build
+
+reload-and-run:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) run
+
+build: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS)
+
+run: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS) -t:Run
+
+diag: prepare
+ $(Q) $(DOTNET6) build /v:diag msbuild.binlog
diff --git a/tests/interdependent-binding-projects/dotnet/tvOS/Makefile b/tests/interdependent-binding-projects/dotnet/tvOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/interdependent-binding-projects/dotnet/tvOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/interdependent-binding-projects/dotnet/tvOS/interdependent-binding-projects.csproj b/tests/interdependent-binding-projects/dotnet/tvOS/interdependent-binding-projects.csproj
index a04ec67be0f7..eab18ac80497 100644
--- a/tests/interdependent-binding-projects/dotnet/tvOS/interdependent-binding-projects.csproj
+++ b/tests/interdependent-binding-projects/dotnet/tvOS/interdependent-binding-projects.csproj
@@ -2,29 +2,12 @@
net6.0-tvos
- Exe
- true
- latest
- tvossimulator-x64
- xamarintvos10;$(AssetTargetFallback)
- ..\..\..\
-
- $(DefaultItemExcludes);packages/**;
- $(RootTestsDirectory)\..\product.snk
-
-
-
-
-
-
-
-
-
+
+
-
-
+
diff --git a/tests/interdependent-binding-projects/dotnet/watchOS/Info.plist b/tests/interdependent-binding-projects/dotnet/watchOS/Info.plist
deleted file mode 100644
index 710fcccd2972..000000000000
--- a/tests/interdependent-binding-projects/dotnet/watchOS/Info.plist
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
- CFBundleDisplayName
- InterdependentBindingProject
- CFBundleIdentifier
- com.xamarin.dotnet.interdependentbindingprojects_watch.watchkitapp.watchkitextension
- CFBundleName
- InterdependentBindingProject
- MinimumOSVersion
- 2.0
- UIDeviceFamily
-
- 4
-
- RemoteInterfacePrincipleClass
- InterfaceController
- NSExtension
-
- NSExtensionAttributes
-
- WKAppBundleIdentifier
- com.xamarin.dotnet.interdependentbindingprojects_watch.watchkitapp
-
- NSExtensionPointIdentifier
- com.apple.watchkit
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
-
-
-
diff --git a/tests/interdependent-binding-projects/dotnet/watchOS/interdependent-binding-projects.csproj b/tests/interdependent-binding-projects/dotnet/watchOS/interdependent-binding-projects.csproj
deleted file mode 100644
index 4186d81ebbd0..000000000000
--- a/tests/interdependent-binding-projects/dotnet/watchOS/interdependent-binding-projects.csproj
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- net6.0-watchos
- Exe
- true
- latest
- watchos-x86
- ..\..\..\
-
- $(DefaultItemExcludes);packages/**;
- $(RootTestsDirectory)\..\product.snk
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/introspection/ApiAvailabilityTest.cs b/tests/introspection/ApiAvailabilityTest.cs
index 413bbade7538..d0a4592c342a 100644
--- a/tests/introspection/ApiAvailabilityTest.cs
+++ b/tests/introspection/ApiAvailabilityTest.cs
@@ -393,9 +393,7 @@ string CheckLegacyAttributes (ICustomAttributeProvider cap)
}
[Test]
-#if IOS || TVOS || __MACCATALYST__
[Ignore ("work in progress")]
-#endif
public void LegacyAttributes ()
{
//LogProgress = true;
diff --git a/tests/introspection/ApiCMAttachmentTest.cs b/tests/introspection/ApiCMAttachmentTest.cs
index 63191aede12d..228151091d6d 100644
--- a/tests/introspection/ApiCMAttachmentTest.cs
+++ b/tests/introspection/ApiCMAttachmentTest.cs
@@ -229,6 +229,7 @@ protected virtual bool Skip (string nativeName)
return true;
case "SecIdentity": // hangs with xcode12.5 beta 2 while loading p12 file
case "SecIdentity2": // same (dupe logic)
+ case "Authorization":
return true;
default:
return false;
@@ -464,6 +465,10 @@ protected INativeObject GetINativeInstance (Type t)
}
case "SecAccessControl":
return new SecAccessControl (SecAccessible.WhenPasscodeSetThisDeviceOnly);
+#if __MACCATALYST__
+ case "Authorization":
+ return Security.Authorization.Create (AuthorizationFlags.Defaults);
+#endif
default:
throw new InvalidOperationException (string.Format ("Could not create the new instance for type {0}.", t.Name));
}
diff --git a/tests/introspection/Mac/MacApiProtocolTest.cs b/tests/introspection/Mac/MacApiProtocolTest.cs
index dda291df14f3..de0fc3c83225 100644
--- a/tests/introspection/Mac/MacApiProtocolTest.cs
+++ b/tests/introspection/Mac/MacApiProtocolTest.cs
@@ -160,6 +160,7 @@ protected override bool Skip (Type type, string protocolName)
case "NSEntityMapping":
case "NSMappingModel":
case "NSPropertyMapping":
+ case "HMAccessoryOwnershipToken":
return true;
}
break;
diff --git a/tests/introspection/dotnet/MacCatalyst/introspection.csproj b/tests/introspection/dotnet/MacCatalyst/introspection.csproj
index 44cef04563a6..f35666216397 100644
--- a/tests/introspection/dotnet/MacCatalyst/introspection.csproj
+++ b/tests/introspection/dotnet/MacCatalyst/introspection.csproj
@@ -2,136 +2,12 @@
net6.0-maccatalyst
- maccatalyst-x64
- Exe
- NET
- latest
- Introspection
- introspection
- None
- xamarinios10;$(AssetTargetFallback)
-
- $(DefaultItemExcludes);packages/**;
- false
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
- ApiBaseTest.cs
-
-
- ApiClassPtrTest.cs
-
-
- ApiCMAttachmentTest.cs
-
-
- ApiCoreImageFiltersTest.cs
-
-
- ApiCtorInitTest.cs
-
-
- ApiFieldTest.cs
-
-
- ApiPInvokeTest.cs
-
-
- ApiProtocolTest.cs
-
-
- ApiSelectorTest.cs
-
-
- ApiSignatureTest.cs
-
-
- ApiStructTest.cs
-
-
- ApiTypoTest.cs
-
-
- ApiWeakPropertyTest.cs
-
-
- CoreSelectorTest.cs
-
-
- EnvironmentVariable.cs
-
-
- MonoNativeConfig.cs
-
-
- PlatformInfo.cs
-
-
- TestRuntime.cs
-
-
- ApiAvailabilityTest.cs
-
-
- Frameworks.cs
-
-
- ApplePlatform.cs
-
-
- SdkVersions.cs
-
-
- ApiFrameworkTest.cs
-
-
- ApiTypeTest.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- xamarin1.png
-
-
- simlauncher64-sgen.frameworks
-
+
diff --git a/tests/introspection/dotnet/Makefile b/tests/introspection/dotnet/Makefile
new file mode 100644
index 000000000000..c07acf79f160
--- /dev/null
+++ b/tests/introspection/dotnet/Makefile
@@ -0,0 +1,8 @@
+TOP=../../..
+include $(TOP)/Make.config
+
+build-all:
+ for platform in $(DOTNET_PLATFORMS); do \
+ echo "Building in $$platform"; \
+ $(MAKE) -C "$$platform" build; \
+ done
diff --git a/tests/introspection/dotnet/iOS/Makefile b/tests/introspection/dotnet/iOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/introspection/dotnet/iOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/introspection/dotnet/iOS/introspection.csproj b/tests/introspection/dotnet/iOS/introspection.csproj
index 8ea98ed3c625..07d0bfb4fb49 100644
--- a/tests/introspection/dotnet/iOS/introspection.csproj
+++ b/tests/introspection/dotnet/iOS/introspection.csproj
@@ -2,136 +2,12 @@
net6.0-ios
- iossimulator-x64
- Exe
- NET
- latest
- Introspection
- introspection
- None
- xamarinios10;$(AssetTargetFallback)
-
- $(DefaultItemExcludes);packages/**;
- false
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
- ApiBaseTest.cs
-
-
- ApiClassPtrTest.cs
-
-
- ApiCMAttachmentTest.cs
-
-
- ApiCoreImageFiltersTest.cs
-
-
- ApiCtorInitTest.cs
-
-
- ApiFieldTest.cs
-
-
- ApiPInvokeTest.cs
-
-
- ApiProtocolTest.cs
-
-
- ApiSelectorTest.cs
-
-
- ApiSignatureTest.cs
-
-
- ApiStructTest.cs
-
-
- ApiTypoTest.cs
-
-
- ApiWeakPropertyTest.cs
-
-
- CoreSelectorTest.cs
-
-
- EnvironmentVariable.cs
-
-
- MonoNativeConfig.cs
-
-
- PlatformInfo.cs
-
-
- TestRuntime.cs
-
-
- ApiAvailabilityTest.cs
-
-
- Frameworks.cs
-
-
- ApplePlatform.cs
-
-
- SdkVersions.cs
-
-
- ApiFrameworkTest.cs
-
-
- ApiTypeTest.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- xamarin1.png
-
-
- simlauncher64-sgen.frameworks
-
+
diff --git a/tests/introspection/dotnet/macOS/Info.plist b/tests/introspection/dotnet/macOS/Info.plist
new file mode 100644
index 000000000000..9c5a6b69d974
--- /dev/null
+++ b/tests/introspection/dotnet/macOS/Info.plist
@@ -0,0 +1,34 @@
+
+
+
+
+ CFBundleDisplayName
+ introspection
+ CFBundleIdentifier
+ com.xamarin.introspection
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ 10.14
+ NSPrincipalClass
+ NSApplication
+ LSApplicationCategoryType
+ public.app-category.developer-tools
+ CFBundleName
+ introspection
+ LSUIElement
+ 1
+ NSAppleMusicUsageDescription
+ Testing tastes
+ NSCameraUsageDescription
+ Smile!
+ NSContactsUsageDescription
+ Testing friends
+ NSHomeKitUsageDescription
+ Testing roofs
+ NSMicrophoneUsageDescription
+ Testing mike
+ NSPhotoLibraryUsageDescription
+ Testing lens
+
+
diff --git a/tests/introspection/dotnet/macOS/Makefile b/tests/introspection/dotnet/macOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/introspection/dotnet/macOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/introspection/dotnet/macOS/introspection.csproj b/tests/introspection/dotnet/macOS/introspection.csproj
new file mode 100644
index 000000000000..f1a8342a1577
--- /dev/null
+++ b/tests/introspection/dotnet/macOS/introspection.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-macos
+
+
+
+
+
+
+
+
+
diff --git a/tests/introspection/dotnet/shared.csproj b/tests/introspection/dotnet/shared.csproj
new file mode 100644
index 000000000000..17e52f7dfde7
--- /dev/null
+++ b/tests/introspection/dotnet/shared.csproj
@@ -0,0 +1,166 @@
+
+
+
+ Exe
+ $(DefineConstants);NET
+ latest
+ Introspection
+ introspection
+ None
+
+ $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..'))
+ $(RootTestsDirectory)\test-libraries
+ $(RootTestsDirectory)\introspection
+
+
+ true
+
+ $(DefineConstants);DEBUG
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MacMain.cs
+
+
+ Mac.cs
+
+
+ TestRuntime.macos.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ApiCMAttachmentTest.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ApiBaseTest.cs
+
+
+ ApiClassPtrTest.cs
+
+
+ ApiCoreImageFiltersTest.cs
+
+
+ ApiCtorInitTest.cs
+
+
+ ApiFieldTest.cs
+
+
+ ApiPInvokeTest.cs
+
+
+ ApiProtocolTest.cs
+
+
+ ApiSelectorTest.cs
+
+
+ ApiSignatureTest.cs
+
+
+ ApiStructTest.cs
+
+
+ ApiTypoTest.cs
+
+
+ ApiWeakPropertyTest.cs
+
+
+ CoreSelectorTest.cs
+
+
+ EnvironmentVariable.cs
+
+
+ MonoNativeConfig.cs
+
+
+ PlatformInfo.cs
+
+
+ TestRuntime.cs
+
+
+ ApiAvailabilityTest.cs
+
+
+ Frameworks.cs
+
+
+ ApplePlatform.cs
+
+
+ SdkVersions.cs
+
+
+ ApiFrameworkTest.cs
+
+
+ ApiTypeTest.cs
+
+
+
+
+
+
+
+
+
+ xamarin1.png
+
+
+ simlauncher64-sgen.frameworks
+
+
+
diff --git a/tests/introspection/dotnet/shared.mk b/tests/introspection/dotnet/shared.mk
index 29a8be2e1683..bc7ccd259626 100644
--- a/tests/introspection/dotnet/shared.mk
+++ b/tests/introspection/dotnet/shared.mk
@@ -1,12 +1,29 @@
TOP=../../../..
-
include $(TOP)/Make.config
+include $(TOP)/mk/colors.mk
prepare:
- $(MAKE) -C $(TOP)/tests/dotnet copy-dotnet-config
+ $(Q) $(MAKE) -C $(TOP)/tests/dotnet copy-dotnet-config
+
+reload:
+ $(Q) rm -Rf $(TOP)/tests/dotnet/packages
+ $(Q) $(MAKE) -C $(TOP) -j8 all
+ $(Q) $(MAKE) -C $(TOP) -j8 install
+ $(Q) git clean -xfdq
+
+reload-and-build:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) build
+
+reload-and-run:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) run
build: prepare
- $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY)
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS)
run: prepare
- $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) /t:Run
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS) -t:Run
+
+diag: prepare
+ $(Q) $(DOTNET6) build /v:diag msbuild.binlog
diff --git a/tests/introspection/dotnet/tvOS/Makefile b/tests/introspection/dotnet/tvOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/introspection/dotnet/tvOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/introspection/dotnet/tvOS/introspection.csproj b/tests/introspection/dotnet/tvOS/introspection.csproj
index 4a11ce8cd0c2..eab18ac80497 100644
--- a/tests/introspection/dotnet/tvOS/introspection.csproj
+++ b/tests/introspection/dotnet/tvOS/introspection.csproj
@@ -2,130 +2,12 @@
net6.0-tvos
- tvossimulator-x64
- Exe
- NET
- latest
- Introspection
- introspection
- None
- xamarintvos10;$(AssetTargetFallback)
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
- ApiBaseTest.cs
-
-
- ApiClassPtrTest.cs
-
-
- ApiCMAttachmentTest.cs
-
-
- ApiCoreImageFiltersTest.cs
-
-
- ApiCtorInitTest.cs
-
-
- ApiFieldTest.cs
-
-
- ApiPInvokeTest.cs
-
-
- ApiProtocolTest.cs
-
-
- ApiSelectorTest.cs
-
-
- ApiSignatureTest.cs
-
-
- ApiStructTest.cs
-
-
- ApiTypoTest.cs
-
-
- ApiWeakPropertyTest.cs
-
-
- CoreSelectorTest.cs
-
-
- EnvironmentVariable.cs
-
-
- MonoNativeConfig.cs
-
-
- PlatformInfo.cs
-
-
- TestRuntime.cs
-
-
- ApiAvailabilityTest.cs
-
-
- Frameworks.cs
-
-
- ApplePlatform.cs
-
-
- SdkVersions.cs
-
-
- ApiFrameworkTest.cs
-
-
- ApiTypeTest.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- xamarin1.png
-
-
- simlauncher64-sgen.frameworks
-
+
diff --git a/tests/introspection/iOS/iOSApiProtocolTest.cs b/tests/introspection/iOS/iOSApiProtocolTest.cs
index 17bc99cecf54..7c769d5ac646 100644
--- a/tests/introspection/iOS/iOSApiProtocolTest.cs
+++ b/tests/introspection/iOS/iOSApiProtocolTest.cs
@@ -761,6 +761,7 @@ protected override bool Skip (Type type, string protocolName)
case "HKDiscreteQuantitySample": // Conformance not in headers
case "HKAudiogramSample": // Conformance not in headers
case "UIImage": // only complains on tvOS beta 6
+ case "HMAccessoryOwnershipToken":
return true;
// Xcode 12 beta 2
case "HKElectrocardiogram": // Conformance not in headers
diff --git a/tests/linker/ios/link sdk/ReflectionTest.cs b/tests/linker/ios/link sdk/ReflectionTest.cs
index 999f3c2f2786..7d834d164bf5 100644
--- a/tests/linker/ios/link sdk/ReflectionTest.cs
+++ b/tests/linker/ios/link sdk/ReflectionTest.cs
@@ -16,9 +16,6 @@ public void MethodWithParameters (string firstParameter, int secondParameter)
{
}
-#if NET
- [Ignore ("Metadata reduction not implemented yet: https://github.com/xamarin/xamarin-macios/issues/9612")]
-#endif
[Test]
public void ParameterInfoName ()
{
@@ -28,7 +25,8 @@ public void ParameterInfoName ()
var mi = this.GetType ().GetMethod ("MethodWithParameters");
var p = mi.GetParameters ();
-#if DEBUG
+#if DEBUG && !NET
+ // dotnet has adopted (and adapted) the metadata reducer and runs it on it's own conditions
var optimized = false;
#else
var optimized = TestRuntime.IsLinkAll;
diff --git a/tests/monotouch-test/ObjCRuntime/RegistrarTest.cs b/tests/monotouch-test/ObjCRuntime/RegistrarTest.cs
index 38426f12042e..8cffcf8fd813 100644
--- a/tests/monotouch-test/ObjCRuntime/RegistrarTest.cs
+++ b/tests/monotouch-test/ObjCRuntime/RegistrarTest.cs
@@ -1374,9 +1374,7 @@ public void TestProtocolRegistration ()
Assert.AreNotEqual (IntPtr.Zero, Runtime.GetProtocol (iProtocol), "IProtocol");
Assert.IsTrue (Messaging.bool_objc_msgSend_IntPtr (Class.GetHandle (typeof (MyProtocolImplementation)), Selector.GetHandle ("conformsToProtocol:"), Runtime.GetProtocol (iProtocol)), "Interface/IProtocol");
#if !__TVOS__ && !__WATCHOS__ && !MONOMAC
- #if !NET // https://github.com/xamarin/xamarin-macios/issues/11540
Assert.IsTrue (Messaging.bool_objc_msgSend_IntPtr (Class.GetHandle (typeof (Test24970)), Selector.GetHandle ("conformsToProtocol:"), Protocol.GetHandle ("UIApplicationDelegate")), "UIApplicationDelegate/17669");
- #endif
#endif
// We don't support [Adopts] (yet at least).
// Assert.IsTrue (Messaging.bool_objc_msgSend_IntPtr (Class.GetHandle (typeof (ConformsToProtocolTestClass)), Selector.GetHandle ("conformsToProtocol:"), Runtime.GetProtocol ("NSCoding")), "Adopts/ConformsToProtocolTestClass");
diff --git a/tests/monotouch-test/UIKit/TextFieldTest.cs b/tests/monotouch-test/UIKit/TextFieldTest.cs
index 16a44cd1a4b4..62e80cb40839 100644
--- a/tests/monotouch-test/UIKit/TextFieldTest.cs
+++ b/tests/monotouch-test/UIKit/TextFieldTest.cs
@@ -45,9 +45,15 @@ public void EmptySelection ()
} else {
Assert.IsNull (tf.SelectedTextRange, "SelectedTextRange");
}
- if (TestRuntime.CheckXcodeVersion (11, 0)) {
+ if (TestRuntime.CheckXcodeVersion (13, 0)) {
+#if !__TVOS__
+ Assert.That (tf.TypingAttributes, Is.Empty, "default 13.0");
+#else
+ Assert.That (tf.TypingAttributes, Is.Not.Empty, "default 13.0");
+#endif
+ } else if (TestRuntime.CheckXcodeVersion (11, 0)) {
if (TestRuntime.CheckXcodeVersion (11, 4))
- Assert.That (tf.TypingAttributes, Is.Not.Empty, "default"); // iOS 13.4 returns contents
+ Assert.That (tf.TypingAttributes, Is.Not.Empty, "default 11.4"); // iOS 13.4 returns contents
else
Assert.That (tf.TypingAttributes, Is.Empty, "default");
} else {
@@ -55,13 +61,20 @@ public void EmptySelection ()
}
// ^ calling TypingAttributes does not crash like UITextView does, it simply returns null
tf.TypingAttributes = new NSDictionary ();
- if (TestRuntime.CheckXcodeVersion (11, 0)) {
+ if (TestRuntime.CheckXcodeVersion (13, 0)) {
+#if !__TVOS__
+ Assert.That (tf.TypingAttributes, Is.Empty, "empty 13.0");
+#else
+ Assert.That (tf.TypingAttributes, Is.Not.Empty, "empty 13.0");
+#endif
+
+ } else if (TestRuntime.CheckXcodeVersion (11, 0)) {
if (TestRuntime.CheckXcodeVersion (11, 4))
- Assert.That (tf.TypingAttributes, Is.Not.Empty, "not empty"); // iOS 13.4 returns contents
+ Assert.That (tf.TypingAttributes, Is.Not.Empty, "not empty 11.4"); // iOS 13.4 returns contents
else
Assert.That (tf.TypingAttributes, Is.Empty, "empty");
} else {
- Assert.IsNull (tf.TypingAttributes, "empty");
+ Assert.IsNull (tf.TypingAttributes, "empty not xcode 11");
}
// and it stays null, even if assigned, since there's not selection
}
diff --git a/tests/perftest/TollFreeBridge.cs b/tests/perftest/TollFreeBridge.cs
index 9623a9683869..a21079e1f4fc 100644
--- a/tests/perftest/TollFreeBridge.cs
+++ b/tests/perftest/TollFreeBridge.cs
@@ -120,5 +120,25 @@ public void NSArray_StringArrayFromHandle (string name, NSArray value)
{
NSArray.StringArrayFromHandle (value.Handle);
}
- }
+
+ /*
+ * Measure time required to create a managed `NSObject[]` array from a native one using `CFArray.ArrayFromHandle`
+ */
+ [Benchmark]
+ [ArgumentsSource (nameof (ArraysOfStrings))]
+ public void CFArray_ArrayFromHandle (string name, NSArray value)
+ {
+ CFArray.ArrayFromHandle (value.Handle);
+ }
+
+ /*
+ * Measure time required to create a managed `NSObject[]` array from a native one using `CFArray.ArrayFromHandle`
+ */
+ [Benchmark]
+ [ArgumentsSource (nameof (ArraysOfStrings))]
+ public void NSArray_ArrayFromHandle (string name, NSArray value)
+ {
+ NSArray.ArrayFromHandle (value.Handle);
+ }
+ }
}
diff --git a/tests/xcframework-test/dotnet/MacCatalyst/Info.plist b/tests/xcframework-test/dotnet/MacCatalyst/Info.plist
new file mode 100644
index 000000000000..6af0db6e2155
--- /dev/null
+++ b/tests/xcframework-test/dotnet/MacCatalyst/Info.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ CFBundleDisplayName
+ xcframework-test
+ CFBundleIdentifier
+ com.xamarin.xcframework-test
+ CFBundleName
+ xcframework-test
+ LSMinimumSystemVersion
+ 10.15
+
+
diff --git a/tests/xcframework-test/dotnet/MacCatalyst/Makefile b/tests/xcframework-test/dotnet/MacCatalyst/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/xcframework-test/dotnet/MacCatalyst/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/xcframework-test/dotnet/MacCatalyst/xcframework-test.csproj b/tests/xcframework-test/dotnet/MacCatalyst/xcframework-test.csproj
new file mode 100644
index 000000000000..f35666216397
--- /dev/null
+++ b/tests/xcframework-test/dotnet/MacCatalyst/xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-maccatalyst
+
+
+
+
+
+
+
+
+
diff --git a/tests/xcframework-test/dotnet/Makefile b/tests/xcframework-test/dotnet/Makefile
new file mode 100644
index 000000000000..c07acf79f160
--- /dev/null
+++ b/tests/xcframework-test/dotnet/Makefile
@@ -0,0 +1,8 @@
+TOP=../../..
+include $(TOP)/Make.config
+
+build-all:
+ for platform in $(DOTNET_PLATFORMS); do \
+ echo "Building in $$platform"; \
+ $(MAKE) -C "$$platform" build; \
+ done
diff --git a/tests/xcframework-test/dotnet/iOS/Info.plist b/tests/xcframework-test/dotnet/iOS/Info.plist
new file mode 100644
index 000000000000..f2bfebf8a085
--- /dev/null
+++ b/tests/xcframework-test/dotnet/iOS/Info.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ CFBundleDisplayName
+ xcframework-test
+ CFBundleIdentifier
+ com.xamarin.xcframework-test
+ CFBundleName
+ xcframework-test
+ MinimumOSVersion
+ 10.0
+
+
diff --git a/tests/xcframework-test/dotnet/iOS/Makefile b/tests/xcframework-test/dotnet/iOS/Makefile
new file mode 100644
index 000000000000..75e1f69ed63a
--- /dev/null
+++ b/tests/xcframework-test/dotnet/iOS/Makefile
@@ -0,0 +1,2 @@
+include ../shared.mk
+
diff --git a/tests/xcframework-test/dotnet/iOS/xcframework-test.csproj b/tests/xcframework-test/dotnet/iOS/xcframework-test.csproj
new file mode 100644
index 000000000000..07d0bfb4fb49
--- /dev/null
+++ b/tests/xcframework-test/dotnet/iOS/xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-ios
+
+
+
+
+
+
+
+
+
diff --git a/tests/xcframework-test/dotnet/macOS/Info.plist b/tests/xcframework-test/dotnet/macOS/Info.plist
new file mode 100644
index 000000000000..322f39775970
--- /dev/null
+++ b/tests/xcframework-test/dotnet/macOS/Info.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ CFBundleDisplayName
+ xcframework-test
+ CFBundleIdentifier
+ com.xamarin.xcframework-test
+ CFBundleName
+ xcframework-test
+ LSMinimumSystemVersion
+ 10.14
+
+
diff --git a/tests/xcframework-test/dotnet/macOS/Makefile b/tests/xcframework-test/dotnet/macOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/xcframework-test/dotnet/macOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/xcframework-test/dotnet/macOS/xcframework-test.csproj b/tests/xcframework-test/dotnet/macOS/xcframework-test.csproj
new file mode 100644
index 000000000000..f1a8342a1577
--- /dev/null
+++ b/tests/xcframework-test/dotnet/macOS/xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-macos
+
+
+
+
+
+
+
+
+
diff --git a/tests/xcframework-test/dotnet/shared.csproj b/tests/xcframework-test/dotnet/shared.csproj
new file mode 100644
index 000000000000..56e301713b80
--- /dev/null
+++ b/tests/xcframework-test/dotnet/shared.csproj
@@ -0,0 +1,43 @@
+
+
+
+ Exe
+ $(DefineConstants);NET
+ latest
+ xcframeworktest
+
+ $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..'))
+ $(RootTestsDirectory)\test-libraries
+ $(RootTestsDirectory)\xcframework-test
+
+
+ true
+
+ $(DefineConstants);DEBUG
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resources\Default-568h%402x.png
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/xcframework-test/dotnet/shared.mk b/tests/xcframework-test/dotnet/shared.mk
new file mode 100644
index 000000000000..bc7ccd259626
--- /dev/null
+++ b/tests/xcframework-test/dotnet/shared.mk
@@ -0,0 +1,29 @@
+TOP=../../../..
+include $(TOP)/Make.config
+include $(TOP)/mk/colors.mk
+
+prepare:
+ $(Q) $(MAKE) -C $(TOP)/tests/dotnet copy-dotnet-config
+
+reload:
+ $(Q) rm -Rf $(TOP)/tests/dotnet/packages
+ $(Q) $(MAKE) -C $(TOP) -j8 all
+ $(Q) $(MAKE) -C $(TOP) -j8 install
+ $(Q) git clean -xfdq
+
+reload-and-build:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) build
+
+reload-and-run:
+ $(Q) $(MAKE) reload
+ $(Q) $(MAKE) run
+
+build: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS)
+
+run: prepare
+ $(Q) $(DOTNET6) build /bl *.csproj $(MSBUILD_VERBOSITY) $(BUILD_ARGUMENTS) -t:Run
+
+diag: prepare
+ $(Q) $(DOTNET6) build /v:diag msbuild.binlog
diff --git a/tests/xcframework-test/dotnet/tvOS/Info.plist b/tests/xcframework-test/dotnet/tvOS/Info.plist
new file mode 100644
index 000000000000..86dfecf2a233
--- /dev/null
+++ b/tests/xcframework-test/dotnet/tvOS/Info.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ CFBundleDisplayName
+ xcframework-test
+ CFBundleIdentifier
+ com.xamarin.xcframework-test
+ CFBundleName
+ xcframework-test
+ MinimumOSVersion
+ 10.0
+
+
diff --git a/tests/xcframework-test/dotnet/tvOS/Makefile b/tests/xcframework-test/dotnet/tvOS/Makefile
new file mode 100644
index 000000000000..110d078f4577
--- /dev/null
+++ b/tests/xcframework-test/dotnet/tvOS/Makefile
@@ -0,0 +1 @@
+include ../shared.mk
diff --git a/tests/xcframework-test/dotnet/tvOS/xcframework-test.csproj b/tests/xcframework-test/dotnet/tvOS/xcframework-test.csproj
new file mode 100644
index 000000000000..c34d0b9628f2
--- /dev/null
+++ b/tests/xcframework-test/dotnet/tvOS/xcframework-test.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0-tvos
+
+
+
+
+
+
+
+
+
diff --git a/tests/xharness/Harness.cs b/tests/xharness/Harness.cs
index f92769494264..c04636db2517 100644
--- a/tests/xharness/Harness.cs
+++ b/tests/xharness/Harness.cs
@@ -292,12 +292,22 @@ int AutoConfigureMac (bool generate_projects)
});
}
+ MacTestProjects.Add (new MacTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "introspection", "dotnet", "macOS", "introspection.csproj"))) {
+ Name = "introspection",
+ IsDotNetProject = true,
+ TargetFrameworkFlavors = MacFlavors.DotNet,
+ Platform = "AnyCPU",
+ Ignore = !ENABLE_DOTNET,
+ TestPlatform = TestPlatform.Mac,
+ });
+
MacTestProjects.Add (new MacTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "introspection", "dotnet", "MacCatalyst", "introspection.csproj"))) {
Name = "introspection",
IsDotNetProject = true,
TargetFrameworkFlavors = MacFlavors.MacCatalyst,
Platform = "AnyCPU",
Ignore = !ENABLE_DOTNET,
+ TestPlatform = TestPlatform.MacCatalyst,
});
MacTestProjects.Add (new MacTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "monotouch-test", "dotnet", "macOS", "monotouch-test.csproj"))) {
@@ -395,6 +405,46 @@ int AutoConfigureMac (bool generate_projects)
TestPlatform = TestPlatform.MacCatalyst,
});
+ // xcframework-test
+
+ MacTestProjects.Add (new MacTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "xcframework-test", "dotnet", "macOS", "xcframework-test.csproj"))) {
+ Name = "xcframework-test",
+ IsDotNetProject = true,
+ TargetFrameworkFlavors = MacFlavors.DotNet,
+ Platform = "AnyCPU",
+ Ignore = !ENABLE_DOTNET,
+ TestPlatform = TestPlatform.Mac,
+ });
+
+ MacTestProjects.Add (new MacTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "xcframework-test", "dotnet", "MacCatalyst", "xcframework-test.csproj"))) {
+ Name = "xcframework-test",
+ IsDotNetProject = true,
+ TargetFrameworkFlavors = MacFlavors.MacCatalyst,
+ Platform = "AnyCPU",
+ Ignore = !ENABLE_DOTNET,
+ TestPlatform = TestPlatform.MacCatalyst,
+ });
+
+ // interdependent-binding-projects
+
+ MacTestProjects.Add (new MacTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "interdependent-binding-projects", "dotnet", "macOS", "interdependent-binding-projects.csproj"))) {
+ Name = "interdependent-binding-projects",
+ IsDotNetProject = true,
+ TargetFrameworkFlavors = MacFlavors.DotNet,
+ Platform = "AnyCPU",
+ Ignore = !ENABLE_DOTNET,
+ TestPlatform = TestPlatform.Mac,
+ });
+
+ MacTestProjects.Add (new MacTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "interdependent-binding-projects", "dotnet", "MacCatalyst", "interdependent-binding-projects.csproj"))) {
+ Name = "interdependent-binding-projects",
+ IsDotNetProject = true,
+ TargetFrameworkFlavors = MacFlavors.MacCatalyst,
+ Platform = "AnyCPU",
+ Ignore = !ENABLE_DOTNET,
+ TestPlatform = TestPlatform.MacCatalyst,
+ });
+
var monoImportTestFactory = new BCLTestImportTargetFactory (this);
MacTestProjects.AddRange (monoImportTestFactory.GetMacBclTargets ());
@@ -495,9 +545,8 @@ void AutoConfigureIOS ()
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "bindings-test", "iOS", "bindings-test.csproj")), false) { Name = "bindings-test" });
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "interdependent-binding-projects", "interdependent-binding-projects.csproj"))) { Name = "interdependent-binding-projects" });
- IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "interdependent-binding-projects", "dotnet", "iOS", "interdependent-binding-projects.csproj"))) { Name = "interdependent-binding-projects", IsDotNetProject = true, SkipiOSVariation = false, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, });
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "introspection", "iOS", "introspection-ios.csproj"))) { Name = "introspection", IgnoreMacCatalystVariation = false });
- IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "introspection", "dotnet", "iOS", "introspection.csproj"))) { Name = "introspection", IsDotNetProject = true, SkipiOSVariation = false, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, SkipMacCatalystVariation = true, });
+ IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "introspection", "dotnet", "iOS", "introspection.csproj"))) { Name = "introspection", IsDotNetProject = true, SkipiOSVariation = false, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, SkipMacCatalystVariation = true, TestPlatform = TestPlatform.iOS_Unified, });
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "introspection", "dotnet", "tvOS", "introspection.csproj"))) { Name = "introspection", IsDotNetProject = true, SkipiOSVariation = true, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, GenerateVariations = false, TestPlatform = TestPlatform.tvOS, });
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "monotouch-test", "dotnet", "iOS", "monotouch-test.csproj"))) { Name = "monotouch-test", IsDotNetProject = true, SkipiOSVariation = false, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, GenerateVariations = false, TestPlatform = TestPlatform.iOS_Unified, });
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "monotouch-test", "dotnet", "tvOS", "monotouch-test.csproj"))) { Name = "monotouch-test", IsDotNetProject = true, SkipiOSVariation = true, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, GenerateVariations = false, TestPlatform = TestPlatform.tvOS, });
@@ -528,6 +577,14 @@ void AutoConfigureIOS ()
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "framework-test", "dotnet", "iOS", "framework-test.csproj"))) { Name = "framework-test", IsDotNetProject = true, SkipiOSVariation = false, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, SkipMacCatalystVariation = true, TestPlatform = TestPlatform.iOS_Unified, });
IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "framework-test", "dotnet", "tvOS", "framework-test.csproj"))) { Name = "framework-test", IsDotNetProject = true, SkipiOSVariation = true, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, GenerateVariations = false, TestPlatform = TestPlatform.tvOS, });
+ // xcframework-test
+ IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "xcframework-test", "dotnet", "iOS", "xcframework-test.csproj"))) { Name = "xcframework-test", IsDotNetProject = true, SkipiOSVariation = false, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, SkipMacCatalystVariation = true, TestPlatform = TestPlatform.iOS_Unified, });
+ IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "xcframework-test", "dotnet", "tvOS", "xcframework-test.csproj"))) { Name = "xcframework-test", IsDotNetProject = true, SkipiOSVariation = true, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, GenerateVariations = false, TestPlatform = TestPlatform.tvOS, });
+
+ // interdependent-binding-projects
+ IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "interdependent-binding-projects", "dotnet", "iOS", "interdependent-binding-projects.csproj"))) { Name = "interdependent-binding-projects", IsDotNetProject = true, SkipiOSVariation = false, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, SkipMacCatalystVariation = true, TestPlatform = TestPlatform.iOS_Unified, });
+ IOSTestProjects.Add (new iOSTestProject (Path.GetFullPath (Path.Combine (RootDirectory, "interdependent-binding-projects", "dotnet", "tvOS", "interdependent-binding-projects.csproj"))) { Name = "interdependent-binding-projects", IsDotNetProject = true, SkipiOSVariation = true, SkiptvOSVariation = true, SkipwatchOSVariation = true, SkipTodayExtensionVariation = true, SkipDeviceVariations = false, SkipiOS32Variation = true, GenerateVariations = false, TestPlatform = TestPlatform.tvOS, });
+
foreach (var flavor in new MonoNativeFlavor [] { MonoNativeFlavor.Compat, MonoNativeFlavor.Unified }) {
var monoNativeInfo = new MonoNativeInfo (DevicePlatform.iOS, flavor, RootDirectory, Log);
var iosTestProject = new iOSTestProject (monoNativeInfo.ProjectPath) {
diff --git a/tests/xharness/TestProject.cs b/tests/xharness/TestProject.cs
index e59f5817824d..25a117942010 100644
--- a/tests/xharness/TestProject.cs
+++ b/tests/xharness/TestProject.cs
@@ -118,7 +118,7 @@ async Task CreateCopyAsync (ILog log, IProcessManager processManager, ITestTask
// Check for variables that won't work correctly if the shared code is moved to a different file
var xml = File.ReadAllText (sharedProjectPath);
if (xml.Contains ("$(MSBuildThis"))
- throw new InvalidOperationException ($"Can't use MSBuildThis* variables in shared MSBuild test code.");
+ throw new InvalidOperationException ($"Can't use MSBuildThis* variables in shared MSBuild test code: {sharedProjectPath}");
var import = new XmlDocument ();
import.LoadXmlWithoutNetworkAccess (xml);
diff --git a/tests/xtro-sharpie/MacCatalyst-AVFoundation.todo b/tests/xtro-sharpie/MacCatalyst-AVFoundation.todo
index e687383d9aa5..d8a2848df522 100644
--- a/tests/xtro-sharpie/MacCatalyst-AVFoundation.todo
+++ b/tests/xtro-sharpie/MacCatalyst-AVFoundation.todo
@@ -374,3 +374,4 @@
!missing-type! AVSampleBufferRequest not bound
!missing-type! AVSampleCursor not bound
## appended from unclassified file
+!missing-field! AVSampleBufferAudioRendererOutputConfigurationDidChangeNotification not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-AudioToolbox.todo b/tests/xtro-sharpie/MacCatalyst-AudioToolbox.todo
index 940ffea52928..4f8d2ef733d0 100644
--- a/tests/xtro-sharpie/MacCatalyst-AudioToolbox.todo
+++ b/tests/xtro-sharpie/MacCatalyst-AudioToolbox.todo
@@ -39,7 +39,6 @@
!missing-pinvoke! MusicDeviceMIDIEventList is not bound
!missing-selector! AUAudioUnit::AudioUnitMIDIProtocol not bound
!missing-selector! AUAudioUnit::hostMIDIProtocol not bound
-!missing-selector! AUAudioUnit::MIDIEventListOutputNames not bound
!missing-selector! AUAudioUnit::MIDIOutputEventListBlock not bound
!missing-selector! AUAudioUnit::scheduleMIDIEventListBlock not bound
!missing-selector! AUAudioUnit::setHostMIDIProtocol: not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-CoreGraphics.todo b/tests/xtro-sharpie/MacCatalyst-CoreGraphics.todo
index eb996b9e6518..082c5ed105eb 100644
--- a/tests/xtro-sharpie/MacCatalyst-CoreGraphics.todo
+++ b/tests/xtro-sharpie/MacCatalyst-CoreGraphics.todo
@@ -259,3 +259,5 @@
!missing-pinvoke! CGWindowServerCFMachPort is not bound
!missing-pinvoke! CGWindowServerCreateServerPort is not bound
## appended from unclassified file
+!missing-field! kCGColorSpaceLinearDisplayP3 not bound
+!missing-field! kCGColorSpaceLinearITUR_2020 not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-DataDetection.todo b/tests/xtro-sharpie/MacCatalyst-DataDetection.todo
index 0b4cde239c9d..fe5af8d5e736 100644
--- a/tests/xtro-sharpie/MacCatalyst-DataDetection.todo
+++ b/tests/xtro-sharpie/MacCatalyst-DataDetection.todo
@@ -1,32 +1,31 @@
-!missing-selector! DDDetectedValue::matchedRange not bound
-!missing-selector! DDDetectedValue::matchedString not bound
-!missing-selector! DDDetectedValueCalendarEvent::endDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::endTimeZone not bound
-!missing-selector! DDDetectedValueCalendarEvent::isAllDay not bound
-!missing-selector! DDDetectedValueCalendarEvent::startDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::startTimeZone not bound
-!missing-selector! DDDetectedValueEmailAddress::emailAddress not bound
-!missing-selector! DDDetectedValueEmailAddress::label not bound
-!missing-selector! DDDetectedValueFlightNumber::airline not bound
-!missing-selector! DDDetectedValueFlightNumber::flightNumber not bound
-!missing-selector! DDDetectedValueLink::URL not bound
-!missing-selector! DDDetectedValueMoneyAmount::amount not bound
-!missing-selector! DDDetectedValueMoneyAmount::currency not bound
-!missing-selector! DDDetectedValuePhoneNumber::label not bound
-!missing-selector! DDDetectedValuePhoneNumber::phoneNumber not bound
-!missing-selector! DDDetectedValuePostalAddress::city not bound
-!missing-selector! DDDetectedValuePostalAddress::country not bound
-!missing-selector! DDDetectedValuePostalAddress::postalCode not bound
-!missing-selector! DDDetectedValuePostalAddress::state not bound
-!missing-selector! DDDetectedValuePostalAddress::street not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::carrier not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::trackingNumber not bound
-!missing-type! DDDetectedValue not bound
-!missing-type! DDDetectedValueCalendarEvent not bound
-!missing-type! DDDetectedValueEmailAddress not bound
-!missing-type! DDDetectedValueFlightNumber not bound
-!missing-type! DDDetectedValueLink not bound
-!missing-type! DDDetectedValueMoneyAmount not bound
-!missing-type! DDDetectedValuePhoneNumber not bound
-!missing-type! DDDetectedValuePostalAddress not bound
-!missing-type! DDDetectedValueShipmentTrackingNumber not bound
+!missing-selector! DDMatch::matchedString not bound
+!missing-selector! DDMatchCalendarEvent::endDate not bound
+!missing-selector! DDMatchCalendarEvent::endTimeZone not bound
+!missing-selector! DDMatchCalendarEvent::isAllDay not bound
+!missing-selector! DDMatchCalendarEvent::startDate not bound
+!missing-selector! DDMatchCalendarEvent::startTimeZone not bound
+!missing-selector! DDMatchEmailAddress::emailAddress not bound
+!missing-selector! DDMatchEmailAddress::label not bound
+!missing-selector! DDMatchFlightNumber::airline not bound
+!missing-selector! DDMatchFlightNumber::flightNumber not bound
+!missing-selector! DDMatchLink::URL not bound
+!missing-selector! DDMatchMoneyAmount::amount not bound
+!missing-selector! DDMatchMoneyAmount::currency not bound
+!missing-selector! DDMatchPhoneNumber::label not bound
+!missing-selector! DDMatchPhoneNumber::phoneNumber not bound
+!missing-selector! DDMatchPostalAddress::city not bound
+!missing-selector! DDMatchPostalAddress::country not bound
+!missing-selector! DDMatchPostalAddress::postalCode not bound
+!missing-selector! DDMatchPostalAddress::state not bound
+!missing-selector! DDMatchPostalAddress::street not bound
+!missing-selector! DDMatchShipmentTrackingNumber::carrier not bound
+!missing-selector! DDMatchShipmentTrackingNumber::trackingNumber not bound
+!missing-type! DDMatch not bound
+!missing-type! DDMatchCalendarEvent not bound
+!missing-type! DDMatchEmailAddress not bound
+!missing-type! DDMatchFlightNumber not bound
+!missing-type! DDMatchLink not bound
+!missing-type! DDMatchMoneyAmount not bound
+!missing-type! DDMatchPhoneNumber not bound
+!missing-type! DDMatchPostalAddress not bound
+!missing-type! DDMatchShipmentTrackingNumber not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-FileProvider.todo b/tests/xtro-sharpie/MacCatalyst-FileProvider.todo
index ead3852b143c..7e392a1cc70a 100644
--- a/tests/xtro-sharpie/MacCatalyst-FileProvider.todo
+++ b/tests/xtro-sharpie/MacCatalyst-FileProvider.todo
@@ -134,3 +134,4 @@
!missing-protocol-member! NSFileProviderItem::typeAndCreator not found
!missing-selector! +NSFileProviderManager::removeDomain:mode:completionHandler: not bound
!missing-selector! NSFileProviderDomain::backingStoreIdentity not bound
+!missing-selector! +NSFileProviderItemVersion::beforeFirstSyncComponent not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-GameController.todo b/tests/xtro-sharpie/MacCatalyst-GameController.todo
new file mode 100644
index 000000000000..10e430e90746
--- /dev/null
+++ b/tests/xtro-sharpie/MacCatalyst-GameController.todo
@@ -0,0 +1,6 @@
+!missing-field! GCInputButtonShare not bound
+!missing-field! GCInputMicroGamepadButtonMenu not bound
+!missing-selector! GCPhysicalInputProfile::hasRemappedElements not bound
+!missing-selector! GCPhysicalInputProfile::mappedElementAliasForPhysicalInputName: not bound
+!missing-selector! GCPhysicalInputProfile::mappedPhysicalInputNamesForElementAlias: not bound
+!missing-selector! GCXboxGamepad::buttonShare not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-Intents.todo b/tests/xtro-sharpie/MacCatalyst-Intents.todo
index 7db3284ff9fc..5cd08718e341 100644
--- a/tests/xtro-sharpie/MacCatalyst-Intents.todo
+++ b/tests/xtro-sharpie/MacCatalyst-Intents.todo
@@ -33,3 +33,5 @@
!missing-selector! INSendMessageIntentDonationMetadata::notifyRecipientAnyway not bound
!missing-selector! INSendMessageIntentDonationMetadata::setNotifyRecipientAnyway: not bound
!missing-selector! INSendMessageIntentDonationMetadata::setReplyToCurrentUser: not bound
+!missing-selector! INPerson::initWithPersonHandle:nameComponents:displayName:image:contactIdentifier:customIdentifier:isContactSuggestion:suggestionType: not bound
+!missing-selector! INPerson::isContactSuggestion not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-MailKit.todo b/tests/xtro-sharpie/MacCatalyst-MailKit.todo
index bbcb97e3529b..526a711c0b98 100644
--- a/tests/xtro-sharpie/MacCatalyst-MailKit.todo
+++ b/tests/xtro-sharpie/MacCatalyst-MailKit.todo
@@ -20,7 +20,6 @@
!missing-selector! +MEMessageAction::moveToTrashAction not bound
!missing-selector! +MEMessageAction::setColorActionWithColor: not bound
!missing-selector! +MEMessageAction::unflagAction not bound
-!missing-selector! +MEMessageActionDecision::applyAction: not bound
!missing-selector! +MEMessageActionDecision::invokeAgainWithBody not bound
!missing-selector! MEComposeSession::mailMessage not bound
!missing-selector! MEComposeSession::reloadSession not bound
@@ -77,3 +76,10 @@
!missing-selector! MEEmailAddress::initWithRawString: not bound
!missing-selector! MEEmailAddress::rawString not bound
!missing-type! MEEmailAddress not bound
+!missing-selector! +MEExtensionManager::reloadContentBlockerWithIdentifier:completionHandler: not bound
+!missing-selector! +MEMessageActionDecision::decisionApplyingAction: not bound
+!missing-selector! +MEMessageActionDecision::decisionApplyingActions: not bound
+!missing-selector! MEMessageSecurityInformation::initWithSigners:isEncrypted:signingError:encryptionError:shouldBlockRemoteContent:localizedRemoteContentBlockingReason: not bound
+!missing-selector! MEMessageSecurityInformation::localizedRemoteContentBlockingReason not bound
+!missing-selector! MEMessageSecurityInformation::shouldBlockRemoteContent not bound
+!missing-type! MEExtensionManager not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-MetalPerformanceShadersGraph.todo b/tests/xtro-sharpie/MacCatalyst-MetalPerformanceShadersGraph.todo
index aa8651949ea2..a861c057b45e 100644
--- a/tests/xtro-sharpie/MacCatalyst-MetalPerformanceShadersGraph.todo
+++ b/tests/xtro-sharpie/MacCatalyst-MetalPerformanceShadersGraph.todo
@@ -397,3 +397,24 @@
!missing-type! MPSGraphVariableOp not bound
## appended from unclassified file
## appended from unclassified file
+!missing-selector! MPSGraph::broadcastTensor:toShape:name: not bound
+!missing-selector! MPSGraph::broadcastTensor:toShapeTensor:name: not bound
+!missing-selector! MPSGraph::castTensor:toType:name: not bound
+!missing-selector! MPSGraph::convolution2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolution2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWithSourceTensor:weightsTensor:outputShapeTensor:descriptor:name: not bound
+!missing-selector! MPSGraph::leakyReLUGradientWithIncomingGradient:sourceTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alpha:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::reshapeTensor:withShapeTensor:name: not bound
+!missing-selector! MPSGraph::resizeTensor:sizeTensor:mode:centerResult:alignCorners:layout:name: not bound
+!missing-selector! MPSGraph::scatterNDWithDataTensor:updatesTensor:indicesTensor:batchDimensions:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithDataTensor:updatesTensor:indicesTensor:axis:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithUpdatesTensor:indicesTensor:shape:axis:mode:name: not bound
+!missing-selector! MPSGraph::shapeOfTensor:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:k:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:kTensor:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:k:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:kTensor:name: not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-Network.todo b/tests/xtro-sharpie/MacCatalyst-Network.todo
index 9992ed8d5e95..c33e8e1beb09 100644
--- a/tests/xtro-sharpie/MacCatalyst-Network.todo
+++ b/tests/xtro-sharpie/MacCatalyst-Network.todo
@@ -81,3 +81,4 @@
!missing-pinvoke! nw_quic_set_stream_application_error is not bound
!missing-pinvoke! nw_quic_set_stream_is_unidirectional is not bound
!missing-pinvoke! nw_tcp_options_set_multipath_force_version is not bound
+!missing-pinvoke! nw_group_descriptor_create_multiplex is not bound
diff --git a/tests/xtro-sharpie/MacCatalyst-UIKit.todo b/tests/xtro-sharpie/MacCatalyst-UIKit.todo
index 609b8c04b145..17d19beb0744 100644
--- a/tests/xtro-sharpie/MacCatalyst-UIKit.todo
+++ b/tests/xtro-sharpie/MacCatalyst-UIKit.todo
@@ -68,7 +68,6 @@
!missing-enum! UIButtonConfigurationTitleAlignment not bound
!missing-enum! UIDirectionalRectEdge not bound
!missing-enum! UIFocusHaloEffectPosition not bound
-!missing-enum! UIImageVariant not bound
!missing-enum! UITitlebarTitleVisibility not bound
!missing-enum! UITitlebarToolbarStyle not bound
!missing-enum! UIWindowScenePresentationStyle not bound
@@ -90,7 +89,6 @@
!missing-field! UIKeyInputDelete not bound
!missing-field! UIKeyInputF1 not bound
!missing-field! UIMenuSidebar not bound
-!missing-field! UIPasteboardDetectionPatternAddress not bound
!missing-field! UIPasteboardDetectionPatternCalendarEvent not bound
!missing-field! UIPasteboardDetectionPatternEmailAddress not bound
!missing-field! UIPasteboardDetectionPatternFlightNumber not bound
@@ -546,10 +544,6 @@
!missing-selector! +UIFocusSystem::registerURL:forSoundIdentifier: not bound
!missing-selector! +UIFont::defaultFontSize not bound
!missing-selector! +UIFont::systemMinimumFontSize not bound
-!missing-selector! +UIImage::imageNamed:variant: not bound
-!missing-selector! +UIImage::imageNamed:variant:withConfiguration: not bound
-!missing-selector! +UIImage::systemImageNamed:variant: not bound
-!missing-selector! +UIImage::systemImageNamed:variant:withConfiguration: not bound
!missing-selector! +UIImageSymbolConfiguration::configurationPreferringMulticolor not bound
!missing-selector! +UIImageSymbolConfiguration::configurationWithHierarchicalColor: not bound
!missing-selector! +UIImageSymbolConfiguration::configurationWithPaletteColors: not bound
@@ -889,11 +883,8 @@
!missing-selector! UIFocusHaloEffect::setPosition: not bound
!missing-selector! UIFocusHaloEffect::setReferenceView: not bound
!missing-selector! UIGestureRecognizer::initWithCoder: not bound
-!missing-selector! UIImage::imageByApplyingVariant: not bound
-!missing-selector! UIImage::imageByApplyingVariantFromImage: not bound
!missing-selector! UIImage::imageByPreparingForDisplay not bound
!missing-selector! UIImage::imageByPreparingThumbnailOfSize: not bound
-!missing-selector! UIImage::imageByRemovingVariant not bound
!missing-selector! UIImage::prepareForDisplayWithCompletionHandler: not bound
!missing-selector! UIImage::prepareThumbnailOfSize:completionHandler: not bound
!missing-selector! UIImageView::adjustsImageWhenAncestorFocused not bound
@@ -924,29 +915,6 @@
!missing-selector! UINavigationBar::setCompactScrollEdgeAppearance: not bound
!missing-selector! UINavigationItem::compactScrollEdgeAppearance not bound
!missing-selector! UINavigationItem::setCompactScrollEdgeAppearance: not bound
-!missing-selector! UIPasteboardDetectionResult::matchedRange not bound
-!missing-selector! UIPasteboardDetectionResult::matchedString not bound
-!missing-selector! UIPasteboardDetectionResultAddress::city not bound
-!missing-selector! UIPasteboardDetectionResultAddress::country not bound
-!missing-selector! UIPasteboardDetectionResultAddress::postalCode not bound
-!missing-selector! UIPasteboardDetectionResultAddress::state not bound
-!missing-selector! UIPasteboardDetectionResultAddress::street not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::allDay not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::endDate not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::endTimeZone not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::startDate not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::startTimeZone not bound
-!missing-selector! UIPasteboardDetectionResultEmailAddress::emailAddress not bound
-!missing-selector! UIPasteboardDetectionResultEmailAddress::label not bound
-!missing-selector! UIPasteboardDetectionResultFlightNumber::airline not bound
-!missing-selector! UIPasteboardDetectionResultFlightNumber::flightNumber not bound
-!missing-selector! UIPasteboardDetectionResultLink::url not bound
-!missing-selector! UIPasteboardDetectionResultMoneyAmount::amount not bound
-!missing-selector! UIPasteboardDetectionResultMoneyAmount::currency not bound
-!missing-selector! UIPasteboardDetectionResultPhoneNumber::label not bound
-!missing-selector! UIPasteboardDetectionResultPhoneNumber::phoneNumber not bound
-!missing-selector! UIPasteboardDetectionResultShipmentTrackingNumber::carrier not bound
-!missing-selector! UIPasteboardDetectionResultShipmentTrackingNumber::trackingNumber not bound
!missing-selector! UIPointerAccessory::orientationMatchesAngle not bound
!missing-selector! UIPointerAccessory::position not bound
!missing-selector! UIPointerAccessory::setOrientationMatchesAngle: not bound
@@ -1166,15 +1134,6 @@
!missing-type! UIFocusEffect not bound
!missing-type! UIFocusHaloEffect not bound
!missing-type! UIKeyboardLayoutGuide not bound
-!missing-type! UIPasteboardDetectionResult not bound
-!missing-type! UIPasteboardDetectionResultAddress not bound
-!missing-type! UIPasteboardDetectionResultCalendarEvent not bound
-!missing-type! UIPasteboardDetectionResultEmailAddress not bound
-!missing-type! UIPasteboardDetectionResultFlightNumber not bound
-!missing-type! UIPasteboardDetectionResultLink not bound
-!missing-type! UIPasteboardDetectionResultMoneyAmount not bound
-!missing-type! UIPasteboardDetectionResultPhoneNumber not bound
-!missing-type! UIPasteboardDetectionResultShipmentTrackingNumber not bound
!missing-type! UIPointerAccessory not bound
!missing-type! UISearchSuggestionItem not bound
!missing-type! UISheetPresentationController not bound
@@ -1189,3 +1148,13 @@
!missing-type! UIWindowSceneActivationInteraction not bound
!missing-type! UIWindowSceneActivationRequestOptions not bound
## appended from unclassified file
+!missing-field! UIPasteboardDetectionPatternPostalAddress not bound
+!missing-selector! +UIButtonConfiguration::borderedButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderedProminentButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderedTintedButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderlessButtonConfiguration not bound
+!missing-selector! UIButtonConfiguration::activityIndicatorColorTransformer not bound
+!missing-selector! UIButtonConfiguration::automaticallyUpdateForSelection not bound
+!missing-selector! UIButtonConfiguration::setActivityIndicatorColorTransformer: not bound
+!missing-selector! UIButtonConfiguration::setAutomaticallyUpdateForSelection: not bound
+!missing-selector! UIButtonConfiguration::setDefaultContentInsets not bound
diff --git a/tests/xtro-sharpie/common-CoreFoundation.ignore b/tests/xtro-sharpie/common-CoreFoundation.ignore
index 780044da1a84..b8b2ababbb4b 100644
--- a/tests/xtro-sharpie/common-CoreFoundation.ignore
+++ b/tests/xtro-sharpie/common-CoreFoundation.ignore
@@ -127,7 +127,6 @@
!missing-field! kCFLocaleScriptCode not bound
!missing-field! kCFLocaleUsesMetricSystem not bound
!missing-field! kCFLocaleVariantCode not bound
-!missing-field! kCFNull not bound
!missing-field! kCFNumberFormatterAlwaysShowDecimalSeparator not bound
!missing-field! kCFNumberFormatterCurrencyCode not bound
!missing-field! kCFNumberFormatterCurrencyDecimalSeparator not bound
diff --git a/tests/xtro-sharpie/iOS-AVFoundation.todo b/tests/xtro-sharpie/iOS-AVFoundation.todo
index 4fb8cd2f938a..2dd784238dfd 100644
--- a/tests/xtro-sharpie/iOS-AVFoundation.todo
+++ b/tests/xtro-sharpie/iOS-AVFoundation.todo
@@ -212,3 +212,4 @@
!missing-type! AVPlaybackCoordinator not bound
!missing-type! AVPlayerPlaybackCoordinator not bound
## appended from unclassified file
+!missing-field! AVSampleBufferAudioRendererOutputConfigurationDidChangeNotification not bound
diff --git a/tests/xtro-sharpie/iOS-AudioToolbox.todo b/tests/xtro-sharpie/iOS-AudioToolbox.todo
index b32b672c7afe..ed1a006bc2b0 100644
--- a/tests/xtro-sharpie/iOS-AudioToolbox.todo
+++ b/tests/xtro-sharpie/iOS-AudioToolbox.todo
@@ -5,7 +5,6 @@
!missing-pinvoke! MusicDeviceMIDIEventList is not bound
!missing-selector! AUAudioUnit::AudioUnitMIDIProtocol not bound
!missing-selector! AUAudioUnit::hostMIDIProtocol not bound
-!missing-selector! AUAudioUnit::MIDIEventListOutputNames not bound
!missing-selector! AUAudioUnit::MIDIOutputEventListBlock not bound
!missing-selector! AUAudioUnit::scheduleMIDIEventListBlock not bound
!missing-selector! AUAudioUnit::setHostMIDIProtocol: not bound
diff --git a/tests/xtro-sharpie/iOS-CarPlay.todo b/tests/xtro-sharpie/iOS-CarPlay.todo
new file mode 100644
index 000000000000..1b5c4de4f0bc
--- /dev/null
+++ b/tests/xtro-sharpie/iOS-CarPlay.todo
@@ -0,0 +1,10 @@
+!missing-enum! CPAssistantCellActionType not bound
+!missing-selector! CPAssistantCellConfiguration::assistantAction not bound
+!missing-selector! CPAssistantCellConfiguration::initWithPosition:visibility:assistantAction: not bound
+!missing-selector! CPAssistantCellConfiguration::position not bound
+!missing-selector! CPAssistantCellConfiguration::visibility not bound
+!missing-selector! CPListSection::setHeaderImage: not bound
+!missing-selector! CPListTemplate::assistantCellConfiguration not bound
+!missing-selector! CPListTemplate::initWithTitle:sections:assistantCellConfiguration: not bound
+!missing-selector! CPListTemplate::setAssistantCellConfiguration: not bound
+!missing-type! CPAssistantCellConfiguration not bound
diff --git a/tests/xtro-sharpie/iOS-CoreGraphics.todo b/tests/xtro-sharpie/iOS-CoreGraphics.todo
index d7d1672b0f0c..41628a6931f4 100644
--- a/tests/xtro-sharpie/iOS-CoreGraphics.todo
+++ b/tests/xtro-sharpie/iOS-CoreGraphics.todo
@@ -4,3 +4,5 @@
!missing-pinvoke! CGColorSpaceIsPQBased is not bound
!missing-pinvoke! CGConvertColorDataWithFormat is not bound
!missing-pinvoke! CGErrorSetCallback is not bound
+!missing-field! kCGColorSpaceLinearDisplayP3 not bound
+!missing-field! kCGColorSpaceLinearITUR_2020 not bound
diff --git a/tests/xtro-sharpie/iOS-DataDetection.todo b/tests/xtro-sharpie/iOS-DataDetection.todo
index 0b4cde239c9d..fe5af8d5e736 100644
--- a/tests/xtro-sharpie/iOS-DataDetection.todo
+++ b/tests/xtro-sharpie/iOS-DataDetection.todo
@@ -1,32 +1,31 @@
-!missing-selector! DDDetectedValue::matchedRange not bound
-!missing-selector! DDDetectedValue::matchedString not bound
-!missing-selector! DDDetectedValueCalendarEvent::endDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::endTimeZone not bound
-!missing-selector! DDDetectedValueCalendarEvent::isAllDay not bound
-!missing-selector! DDDetectedValueCalendarEvent::startDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::startTimeZone not bound
-!missing-selector! DDDetectedValueEmailAddress::emailAddress not bound
-!missing-selector! DDDetectedValueEmailAddress::label not bound
-!missing-selector! DDDetectedValueFlightNumber::airline not bound
-!missing-selector! DDDetectedValueFlightNumber::flightNumber not bound
-!missing-selector! DDDetectedValueLink::URL not bound
-!missing-selector! DDDetectedValueMoneyAmount::amount not bound
-!missing-selector! DDDetectedValueMoneyAmount::currency not bound
-!missing-selector! DDDetectedValuePhoneNumber::label not bound
-!missing-selector! DDDetectedValuePhoneNumber::phoneNumber not bound
-!missing-selector! DDDetectedValuePostalAddress::city not bound
-!missing-selector! DDDetectedValuePostalAddress::country not bound
-!missing-selector! DDDetectedValuePostalAddress::postalCode not bound
-!missing-selector! DDDetectedValuePostalAddress::state not bound
-!missing-selector! DDDetectedValuePostalAddress::street not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::carrier not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::trackingNumber not bound
-!missing-type! DDDetectedValue not bound
-!missing-type! DDDetectedValueCalendarEvent not bound
-!missing-type! DDDetectedValueEmailAddress not bound
-!missing-type! DDDetectedValueFlightNumber not bound
-!missing-type! DDDetectedValueLink not bound
-!missing-type! DDDetectedValueMoneyAmount not bound
-!missing-type! DDDetectedValuePhoneNumber not bound
-!missing-type! DDDetectedValuePostalAddress not bound
-!missing-type! DDDetectedValueShipmentTrackingNumber not bound
+!missing-selector! DDMatch::matchedString not bound
+!missing-selector! DDMatchCalendarEvent::endDate not bound
+!missing-selector! DDMatchCalendarEvent::endTimeZone not bound
+!missing-selector! DDMatchCalendarEvent::isAllDay not bound
+!missing-selector! DDMatchCalendarEvent::startDate not bound
+!missing-selector! DDMatchCalendarEvent::startTimeZone not bound
+!missing-selector! DDMatchEmailAddress::emailAddress not bound
+!missing-selector! DDMatchEmailAddress::label not bound
+!missing-selector! DDMatchFlightNumber::airline not bound
+!missing-selector! DDMatchFlightNumber::flightNumber not bound
+!missing-selector! DDMatchLink::URL not bound
+!missing-selector! DDMatchMoneyAmount::amount not bound
+!missing-selector! DDMatchMoneyAmount::currency not bound
+!missing-selector! DDMatchPhoneNumber::label not bound
+!missing-selector! DDMatchPhoneNumber::phoneNumber not bound
+!missing-selector! DDMatchPostalAddress::city not bound
+!missing-selector! DDMatchPostalAddress::country not bound
+!missing-selector! DDMatchPostalAddress::postalCode not bound
+!missing-selector! DDMatchPostalAddress::state not bound
+!missing-selector! DDMatchPostalAddress::street not bound
+!missing-selector! DDMatchShipmentTrackingNumber::carrier not bound
+!missing-selector! DDMatchShipmentTrackingNumber::trackingNumber not bound
+!missing-type! DDMatch not bound
+!missing-type! DDMatchCalendarEvent not bound
+!missing-type! DDMatchEmailAddress not bound
+!missing-type! DDMatchFlightNumber not bound
+!missing-type! DDMatchLink not bound
+!missing-type! DDMatchMoneyAmount not bound
+!missing-type! DDMatchPhoneNumber not bound
+!missing-type! DDMatchPostalAddress not bound
+!missing-type! DDMatchShipmentTrackingNumber not bound
diff --git a/tests/xtro-sharpie/iOS-GameController.todo b/tests/xtro-sharpie/iOS-GameController.todo
new file mode 100644
index 000000000000..10e430e90746
--- /dev/null
+++ b/tests/xtro-sharpie/iOS-GameController.todo
@@ -0,0 +1,6 @@
+!missing-field! GCInputButtonShare not bound
+!missing-field! GCInputMicroGamepadButtonMenu not bound
+!missing-selector! GCPhysicalInputProfile::hasRemappedElements not bound
+!missing-selector! GCPhysicalInputProfile::mappedElementAliasForPhysicalInputName: not bound
+!missing-selector! GCPhysicalInputProfile::mappedPhysicalInputNamesForElementAlias: not bound
+!missing-selector! GCXboxGamepad::buttonShare not bound
diff --git a/tests/xtro-sharpie/iOS-HealthKit.todo b/tests/xtro-sharpie/iOS-HealthKit.todo
new file mode 100644
index 000000000000..bb9c0f51866b
--- /dev/null
+++ b/tests/xtro-sharpie/iOS-HealthKit.todo
@@ -0,0 +1 @@
+!missing-field! HKMetadataKeyAlgorithmVersion not bound
diff --git a/tests/xtro-sharpie/iOS-Intents.todo b/tests/xtro-sharpie/iOS-Intents.todo
index 866e1c828074..9ad4c7acd902 100644
--- a/tests/xtro-sharpie/iOS-Intents.todo
+++ b/tests/xtro-sharpie/iOS-Intents.todo
@@ -81,3 +81,8 @@
!missing-type! INShareFocusStatusIntentResponse not bound
## appended from unclassified file
## appended from unclassified file
+!deprecated-attribute-missing! INRelativeReferenceResolutionResult missing a [Deprecated] attribute
+!deprecated-attribute-missing! INRelativeSettingResolutionResult missing a [Deprecated] attribute
+!deprecated-attribute-missing! INTemperatureResolutionResult missing a [Deprecated] attribute
+!missing-selector! INPerson::initWithPersonHandle:nameComponents:displayName:image:contactIdentifier:customIdentifier:isContactSuggestion:suggestionType: not bound
+!missing-selector! INPerson::isContactSuggestion not bound
diff --git a/tests/xtro-sharpie/iOS-MetalPerformanceShadersGraph.todo b/tests/xtro-sharpie/iOS-MetalPerformanceShadersGraph.todo
index aa8651949ea2..a861c057b45e 100644
--- a/tests/xtro-sharpie/iOS-MetalPerformanceShadersGraph.todo
+++ b/tests/xtro-sharpie/iOS-MetalPerformanceShadersGraph.todo
@@ -397,3 +397,24 @@
!missing-type! MPSGraphVariableOp not bound
## appended from unclassified file
## appended from unclassified file
+!missing-selector! MPSGraph::broadcastTensor:toShape:name: not bound
+!missing-selector! MPSGraph::broadcastTensor:toShapeTensor:name: not bound
+!missing-selector! MPSGraph::castTensor:toType:name: not bound
+!missing-selector! MPSGraph::convolution2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolution2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWithSourceTensor:weightsTensor:outputShapeTensor:descriptor:name: not bound
+!missing-selector! MPSGraph::leakyReLUGradientWithIncomingGradient:sourceTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alpha:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::reshapeTensor:withShapeTensor:name: not bound
+!missing-selector! MPSGraph::resizeTensor:sizeTensor:mode:centerResult:alignCorners:layout:name: not bound
+!missing-selector! MPSGraph::scatterNDWithDataTensor:updatesTensor:indicesTensor:batchDimensions:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithDataTensor:updatesTensor:indicesTensor:axis:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithUpdatesTensor:indicesTensor:shape:axis:mode:name: not bound
+!missing-selector! MPSGraph::shapeOfTensor:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:k:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:kTensor:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:k:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:kTensor:name: not bound
diff --git a/tests/xtro-sharpie/iOS-Network.todo b/tests/xtro-sharpie/iOS-Network.todo
index 0cdf77cf6f79..c21bc8e55823 100644
--- a/tests/xtro-sharpie/iOS-Network.todo
+++ b/tests/xtro-sharpie/iOS-Network.todo
@@ -72,3 +72,4 @@
!missing-pinvoke! nw_quic_set_stream_application_error is not bound
!missing-pinvoke! nw_quic_set_stream_is_unidirectional is not bound
!missing-pinvoke! nw_tcp_options_set_multipath_force_version is not bound
+!missing-pinvoke! nw_group_descriptor_create_multiplex is not bound
diff --git a/tests/xtro-sharpie/iOS-PassKit.todo b/tests/xtro-sharpie/iOS-PassKit.todo
new file mode 100644
index 000000000000..8fa5217f6a6e
--- /dev/null
+++ b/tests/xtro-sharpie/iOS-PassKit.todo
@@ -0,0 +1,2 @@
+!missing-field! PKPaymentNetworkNanaco not bound
+!missing-field! PKPaymentNetworkWaon not bound
diff --git a/tests/xtro-sharpie/iOS-UIKit.todo b/tests/xtro-sharpie/iOS-UIKit.todo
index 5abd2e3e0844..3d9ec646fe8f 100644
--- a/tests/xtro-sharpie/iOS-UIKit.todo
+++ b/tests/xtro-sharpie/iOS-UIKit.todo
@@ -42,7 +42,6 @@
!missing-enum! UIButtonConfigurationSize not bound
!missing-enum! UIButtonConfigurationTitleAlignment not bound
!missing-enum! UIFocusHaloEffectPosition not bound
-!missing-enum! UIImageVariant not bound
!missing-enum! UIWindowScenePresentationStyle not bound
!missing-enum-value! UIFocusHeading native value UIFocusHeadingFirst = 256 not bound
!missing-enum-value! UIFocusHeading native value UIFocusHeadingLast = 512 not bound
@@ -56,7 +55,6 @@
!missing-field! UICollectionViewLayoutAutomaticDimension not bound
!missing-field! UIKeyInputDelete not bound
!missing-field! UIMenuSidebar not bound
-!missing-field! UIPasteboardDetectionPatternAddress not bound
!missing-field! UIPasteboardDetectionPatternCalendarEvent not bound
!missing-field! UIPasteboardDetectionPatternEmailAddress not bound
!missing-field! UIPasteboardDetectionPatternFlightNumber not bound
@@ -124,10 +122,6 @@
!missing-selector! +UIFocusHaloEffect::effectWithPath: not bound
!missing-selector! +UIFocusHaloEffect::effectWithRect: not bound
!missing-selector! +UIFocusHaloEffect::effectWithRoundedRect:cornerRadius:curve: not bound
-!missing-selector! +UIImage::imageNamed:variant: not bound
-!missing-selector! +UIImage::imageNamed:variant:withConfiguration: not bound
-!missing-selector! +UIImage::systemImageNamed:variant: not bound
-!missing-selector! +UIImage::systemImageNamed:variant:withConfiguration: not bound
!missing-selector! +UIImageSymbolConfiguration::configurationPreferringMulticolor not bound
!missing-selector! +UIImageSymbolConfiguration::configurationWithHierarchicalColor: not bound
!missing-selector! +UIImageSymbolConfiguration::configurationWithPaletteColors: not bound
@@ -438,11 +432,8 @@
!missing-selector! UIFocusHaloEffect::setContainerView: not bound
!missing-selector! UIFocusHaloEffect::setPosition: not bound
!missing-selector! UIFocusHaloEffect::setReferenceView: not bound
-!missing-selector! UIImage::imageByApplyingVariant: not bound
-!missing-selector! UIImage::imageByApplyingVariantFromImage: not bound
!missing-selector! UIImage::imageByPreparingForDisplay not bound
!missing-selector! UIImage::imageByPreparingThumbnailOfSize: not bound
-!missing-selector! UIImage::imageByRemovingVariant not bound
!missing-selector! UIImage::prepareForDisplayWithCompletionHandler: not bound
!missing-selector! UIImage::prepareThumbnailOfSize:completionHandler: not bound
!missing-selector! UIKeyCommand::allowsAutomaticLocalization not bound
@@ -464,29 +455,6 @@
!missing-selector! UINavigationBar::setCompactScrollEdgeAppearance: not bound
!missing-selector! UINavigationItem::compactScrollEdgeAppearance not bound
!missing-selector! UINavigationItem::setCompactScrollEdgeAppearance: not bound
-!missing-selector! UIPasteboardDetectionResult::matchedRange not bound
-!missing-selector! UIPasteboardDetectionResult::matchedString not bound
-!missing-selector! UIPasteboardDetectionResultAddress::city not bound
-!missing-selector! UIPasteboardDetectionResultAddress::country not bound
-!missing-selector! UIPasteboardDetectionResultAddress::postalCode not bound
-!missing-selector! UIPasteboardDetectionResultAddress::state not bound
-!missing-selector! UIPasteboardDetectionResultAddress::street not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::allDay not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::endDate not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::endTimeZone not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::startDate not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::startTimeZone not bound
-!missing-selector! UIPasteboardDetectionResultEmailAddress::emailAddress not bound
-!missing-selector! UIPasteboardDetectionResultEmailAddress::label not bound
-!missing-selector! UIPasteboardDetectionResultFlightNumber::airline not bound
-!missing-selector! UIPasteboardDetectionResultFlightNumber::flightNumber not bound
-!missing-selector! UIPasteboardDetectionResultLink::url not bound
-!missing-selector! UIPasteboardDetectionResultMoneyAmount::amount not bound
-!missing-selector! UIPasteboardDetectionResultMoneyAmount::currency not bound
-!missing-selector! UIPasteboardDetectionResultPhoneNumber::label not bound
-!missing-selector! UIPasteboardDetectionResultPhoneNumber::phoneNumber not bound
-!missing-selector! UIPasteboardDetectionResultShipmentTrackingNumber::carrier not bound
-!missing-selector! UIPasteboardDetectionResultShipmentTrackingNumber::trackingNumber not bound
!missing-selector! UIPointerAccessory::orientationMatchesAngle not bound
!missing-selector! UIPointerAccessory::position not bound
!missing-selector! UIPointerAccessory::setOrientationMatchesAngle: not bound
@@ -622,15 +590,6 @@
!missing-type! UIFocusEffect not bound
!missing-type! UIFocusHaloEffect not bound
!missing-type! UIKeyboardLayoutGuide not bound
-!missing-type! UIPasteboardDetectionResult not bound
-!missing-type! UIPasteboardDetectionResultAddress not bound
-!missing-type! UIPasteboardDetectionResultCalendarEvent not bound
-!missing-type! UIPasteboardDetectionResultEmailAddress not bound
-!missing-type! UIPasteboardDetectionResultFlightNumber not bound
-!missing-type! UIPasteboardDetectionResultLink not bound
-!missing-type! UIPasteboardDetectionResultMoneyAmount not bound
-!missing-type! UIPasteboardDetectionResultPhoneNumber not bound
-!missing-type! UIPasteboardDetectionResultShipmentTrackingNumber not bound
!missing-type! UIPointerAccessory not bound
!missing-type! UISheetPresentationController not bound
!missing-type! UISheetPresentationControllerDetent not bound
@@ -643,3 +602,15 @@
!missing-type! UIWindowSceneActivationRequestOptions not bound
## appended from unclassified file
## appended from unclassified file
+!missing-field! UIPasteboardDetectionPatternPostalAddress not bound
+!missing-selector! +UIButtonConfiguration::borderedButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderedProminentButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderedTintedButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderlessButtonConfiguration not bound
+!missing-selector! UIButtonConfiguration::activityIndicatorColorTransformer not bound
+!missing-selector! UIButtonConfiguration::automaticallyUpdateForSelection not bound
+!missing-selector! UIButtonConfiguration::setActivityIndicatorColorTransformer: not bound
+!missing-selector! UIButtonConfiguration::setAutomaticallyUpdateForSelection: not bound
+!missing-selector! UIButtonConfiguration::setDefaultContentInsets not bound
+!missing-selector! UICollectionView::contextMenuInteraction not bound
+!missing-selector! UITableView::contextMenuInteraction not bound
diff --git a/tests/xtro-sharpie/macOS-AVFoundation.todo b/tests/xtro-sharpie/macOS-AVFoundation.todo
index a6f7091cd3e2..41edb0791c2f 100644
--- a/tests/xtro-sharpie/macOS-AVFoundation.todo
+++ b/tests/xtro-sharpie/macOS-AVFoundation.todo
@@ -385,3 +385,4 @@
!missing-type! AVPlaybackCoordinator not bound
!missing-type! AVPlayerPlaybackCoordinator not bound
## appended from unclassified file
+!missing-field! AVSampleBufferAudioRendererOutputConfigurationDidChangeNotification not bound
diff --git a/tests/xtro-sharpie/macOS-AudioToolbox.todo b/tests/xtro-sharpie/macOS-AudioToolbox.todo
index b32b672c7afe..ed1a006bc2b0 100644
--- a/tests/xtro-sharpie/macOS-AudioToolbox.todo
+++ b/tests/xtro-sharpie/macOS-AudioToolbox.todo
@@ -5,7 +5,6 @@
!missing-pinvoke! MusicDeviceMIDIEventList is not bound
!missing-selector! AUAudioUnit::AudioUnitMIDIProtocol not bound
!missing-selector! AUAudioUnit::hostMIDIProtocol not bound
-!missing-selector! AUAudioUnit::MIDIEventListOutputNames not bound
!missing-selector! AUAudioUnit::MIDIOutputEventListBlock not bound
!missing-selector! AUAudioUnit::scheduleMIDIEventListBlock not bound
!missing-selector! AUAudioUnit::setHostMIDIProtocol: not bound
diff --git a/tests/xtro-sharpie/macOS-CoreGraphics.todo b/tests/xtro-sharpie/macOS-CoreGraphics.todo
index d7d1672b0f0c..41628a6931f4 100644
--- a/tests/xtro-sharpie/macOS-CoreGraphics.todo
+++ b/tests/xtro-sharpie/macOS-CoreGraphics.todo
@@ -4,3 +4,5 @@
!missing-pinvoke! CGColorSpaceIsPQBased is not bound
!missing-pinvoke! CGConvertColorDataWithFormat is not bound
!missing-pinvoke! CGErrorSetCallback is not bound
+!missing-field! kCGColorSpaceLinearDisplayP3 not bound
+!missing-field! kCGColorSpaceLinearITUR_2020 not bound
diff --git a/tests/xtro-sharpie/macOS-CoreMotion.ignore b/tests/xtro-sharpie/macOS-CoreMotion.ignore
index 9846ecc15106..f75c3f47ecb5 100644
--- a/tests/xtro-sharpie/macOS-CoreMotion.ignore
+++ b/tests/xtro-sharpie/macOS-CoreMotion.ignore
@@ -2,3 +2,5 @@
!missing-enum! CMAttitudeReferenceFrame not bound
!missing-enum! CMFallDetectionEventUserResolution not bound
!missing-enum! CMMotionActivityConfidence not bound
+
+## available in headers but results in a compilation error
diff --git a/tests/xtro-sharpie/macOS-CoreMotion.todo b/tests/xtro-sharpie/macOS-CoreMotion.todo
new file mode 100644
index 000000000000..e3b614a320bf
--- /dev/null
+++ b/tests/xtro-sharpie/macOS-CoreMotion.todo
@@ -0,0 +1 @@
+!unknown-type! CMHeadphoneMotionManager bound
diff --git a/tests/xtro-sharpie/macOS-DataDetection.todo b/tests/xtro-sharpie/macOS-DataDetection.todo
index 0b4cde239c9d..fe5af8d5e736 100644
--- a/tests/xtro-sharpie/macOS-DataDetection.todo
+++ b/tests/xtro-sharpie/macOS-DataDetection.todo
@@ -1,32 +1,31 @@
-!missing-selector! DDDetectedValue::matchedRange not bound
-!missing-selector! DDDetectedValue::matchedString not bound
-!missing-selector! DDDetectedValueCalendarEvent::endDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::endTimeZone not bound
-!missing-selector! DDDetectedValueCalendarEvent::isAllDay not bound
-!missing-selector! DDDetectedValueCalendarEvent::startDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::startTimeZone not bound
-!missing-selector! DDDetectedValueEmailAddress::emailAddress not bound
-!missing-selector! DDDetectedValueEmailAddress::label not bound
-!missing-selector! DDDetectedValueFlightNumber::airline not bound
-!missing-selector! DDDetectedValueFlightNumber::flightNumber not bound
-!missing-selector! DDDetectedValueLink::URL not bound
-!missing-selector! DDDetectedValueMoneyAmount::amount not bound
-!missing-selector! DDDetectedValueMoneyAmount::currency not bound
-!missing-selector! DDDetectedValuePhoneNumber::label not bound
-!missing-selector! DDDetectedValuePhoneNumber::phoneNumber not bound
-!missing-selector! DDDetectedValuePostalAddress::city not bound
-!missing-selector! DDDetectedValuePostalAddress::country not bound
-!missing-selector! DDDetectedValuePostalAddress::postalCode not bound
-!missing-selector! DDDetectedValuePostalAddress::state not bound
-!missing-selector! DDDetectedValuePostalAddress::street not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::carrier not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::trackingNumber not bound
-!missing-type! DDDetectedValue not bound
-!missing-type! DDDetectedValueCalendarEvent not bound
-!missing-type! DDDetectedValueEmailAddress not bound
-!missing-type! DDDetectedValueFlightNumber not bound
-!missing-type! DDDetectedValueLink not bound
-!missing-type! DDDetectedValueMoneyAmount not bound
-!missing-type! DDDetectedValuePhoneNumber not bound
-!missing-type! DDDetectedValuePostalAddress not bound
-!missing-type! DDDetectedValueShipmentTrackingNumber not bound
+!missing-selector! DDMatch::matchedString not bound
+!missing-selector! DDMatchCalendarEvent::endDate not bound
+!missing-selector! DDMatchCalendarEvent::endTimeZone not bound
+!missing-selector! DDMatchCalendarEvent::isAllDay not bound
+!missing-selector! DDMatchCalendarEvent::startDate not bound
+!missing-selector! DDMatchCalendarEvent::startTimeZone not bound
+!missing-selector! DDMatchEmailAddress::emailAddress not bound
+!missing-selector! DDMatchEmailAddress::label not bound
+!missing-selector! DDMatchFlightNumber::airline not bound
+!missing-selector! DDMatchFlightNumber::flightNumber not bound
+!missing-selector! DDMatchLink::URL not bound
+!missing-selector! DDMatchMoneyAmount::amount not bound
+!missing-selector! DDMatchMoneyAmount::currency not bound
+!missing-selector! DDMatchPhoneNumber::label not bound
+!missing-selector! DDMatchPhoneNumber::phoneNumber not bound
+!missing-selector! DDMatchPostalAddress::city not bound
+!missing-selector! DDMatchPostalAddress::country not bound
+!missing-selector! DDMatchPostalAddress::postalCode not bound
+!missing-selector! DDMatchPostalAddress::state not bound
+!missing-selector! DDMatchPostalAddress::street not bound
+!missing-selector! DDMatchShipmentTrackingNumber::carrier not bound
+!missing-selector! DDMatchShipmentTrackingNumber::trackingNumber not bound
+!missing-type! DDMatch not bound
+!missing-type! DDMatchCalendarEvent not bound
+!missing-type! DDMatchEmailAddress not bound
+!missing-type! DDMatchFlightNumber not bound
+!missing-type! DDMatchLink not bound
+!missing-type! DDMatchMoneyAmount not bound
+!missing-type! DDMatchPhoneNumber not bound
+!missing-type! DDMatchPostalAddress not bound
+!missing-type! DDMatchShipmentTrackingNumber not bound
diff --git a/tests/xtro-sharpie/macOS-FileProvider.todo b/tests/xtro-sharpie/macOS-FileProvider.todo
new file mode 100644
index 000000000000..ac1f373897e5
--- /dev/null
+++ b/tests/xtro-sharpie/macOS-FileProvider.todo
@@ -0,0 +1 @@
+!missing-selector! +NSFileProviderItemVersion::beforeFirstSyncComponent not bound
diff --git a/tests/xtro-sharpie/macOS-GameController.todo b/tests/xtro-sharpie/macOS-GameController.todo
new file mode 100644
index 000000000000..10e430e90746
--- /dev/null
+++ b/tests/xtro-sharpie/macOS-GameController.todo
@@ -0,0 +1,6 @@
+!missing-field! GCInputButtonShare not bound
+!missing-field! GCInputMicroGamepadButtonMenu not bound
+!missing-selector! GCPhysicalInputProfile::hasRemappedElements not bound
+!missing-selector! GCPhysicalInputProfile::mappedElementAliasForPhysicalInputName: not bound
+!missing-selector! GCPhysicalInputProfile::mappedPhysicalInputNamesForElementAlias: not bound
+!missing-selector! GCXboxGamepad::buttonShare not bound
diff --git a/tests/xtro-sharpie/macOS-Intents.todo b/tests/xtro-sharpie/macOS-Intents.todo
index 20471b7ce8dd..c525dff1f2ea 100644
--- a/tests/xtro-sharpie/macOS-Intents.todo
+++ b/tests/xtro-sharpie/macOS-Intents.todo
@@ -86,3 +86,6 @@
!missing-selector! INSendMessageIntentDonationMetadata::notifyRecipientAnyway not bound
!missing-selector! INSendMessageIntentDonationMetadata::setNotifyRecipientAnyway: not bound
!missing-selector! INSendMessageIntentDonationMetadata::setReplyToCurrentUser: not bound
+!missing-selector! INPerson::initWithPersonHandle:nameComponents:displayName:image:contactIdentifier:customIdentifier:isContactSuggestion:suggestionType: not bound
+!missing-selector! INPerson::isContactSuggestion not bound
+!unknown-type! INTemperatureResolutionResult bound
diff --git a/tests/xtro-sharpie/macOS-MailKit.todo b/tests/xtro-sharpie/macOS-MailKit.todo
index f8361628ce31..aa312eee1b35 100644
--- a/tests/xtro-sharpie/macOS-MailKit.todo
+++ b/tests/xtro-sharpie/macOS-MailKit.todo
@@ -20,7 +20,6 @@
!missing-selector! +MEMessageAction::moveToTrashAction not bound
!missing-selector! +MEMessageAction::setColorActionWithColor: not bound
!missing-selector! +MEMessageAction::unflagAction not bound
-!missing-selector! +MEMessageActionDecision::applyAction: not bound
!missing-selector! +MEMessageActionDecision::invokeAgainWithBody not bound
!missing-selector! MEComposeSession::mailMessage not bound
!missing-selector! MEComposeSession::reloadSession not bound
@@ -78,3 +77,10 @@
!missing-selector! MEEmailAddress::initWithRawString: not bound
!missing-selector! MEEmailAddress::rawString not bound
!missing-type! MEEmailAddress not bound
+!missing-selector! +MEExtensionManager::reloadContentBlockerWithIdentifier:completionHandler: not bound
+!missing-selector! +MEMessageActionDecision::decisionApplyingAction: not bound
+!missing-selector! +MEMessageActionDecision::decisionApplyingActions: not bound
+!missing-selector! MEMessageSecurityInformation::initWithSigners:isEncrypted:signingError:encryptionError:shouldBlockRemoteContent:localizedRemoteContentBlockingReason: not bound
+!missing-selector! MEMessageSecurityInformation::localizedRemoteContentBlockingReason not bound
+!missing-selector! MEMessageSecurityInformation::shouldBlockRemoteContent not bound
+!missing-type! MEExtensionManager not bound
diff --git a/tests/xtro-sharpie/macOS-MetalPerformanceShadersGraph.todo b/tests/xtro-sharpie/macOS-MetalPerformanceShadersGraph.todo
index 49446e690001..2c4d21d221a1 100644
--- a/tests/xtro-sharpie/macOS-MetalPerformanceShadersGraph.todo
+++ b/tests/xtro-sharpie/macOS-MetalPerformanceShadersGraph.todo
@@ -398,3 +398,24 @@
## appended from unclassified file
## appended from unclassified file
## appended from unclassified file
+!missing-selector! MPSGraph::broadcastTensor:toShape:name: not bound
+!missing-selector! MPSGraph::broadcastTensor:toShapeTensor:name: not bound
+!missing-selector! MPSGraph::castTensor:toType:name: not bound
+!missing-selector! MPSGraph::convolution2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolution2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWithSourceTensor:weightsTensor:outputShapeTensor:descriptor:name: not bound
+!missing-selector! MPSGraph::leakyReLUGradientWithIncomingGradient:sourceTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alpha:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::reshapeTensor:withShapeTensor:name: not bound
+!missing-selector! MPSGraph::resizeTensor:sizeTensor:mode:centerResult:alignCorners:layout:name: not bound
+!missing-selector! MPSGraph::scatterNDWithDataTensor:updatesTensor:indicesTensor:batchDimensions:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithDataTensor:updatesTensor:indicesTensor:axis:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithUpdatesTensor:indicesTensor:shape:axis:mode:name: not bound
+!missing-selector! MPSGraph::shapeOfTensor:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:k:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:kTensor:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:k:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:kTensor:name: not bound
diff --git a/tests/xtro-sharpie/macOS-Network.todo b/tests/xtro-sharpie/macOS-Network.todo
index 0cdf77cf6f79..c21bc8e55823 100644
--- a/tests/xtro-sharpie/macOS-Network.todo
+++ b/tests/xtro-sharpie/macOS-Network.todo
@@ -72,3 +72,4 @@
!missing-pinvoke! nw_quic_set_stream_application_error is not bound
!missing-pinvoke! nw_quic_set_stream_is_unidirectional is not bound
!missing-pinvoke! nw_tcp_options_set_multipath_force_version is not bound
+!missing-pinvoke! nw_group_descriptor_create_multiplex is not bound
diff --git a/tests/xtro-sharpie/macOS-WebKit.todo b/tests/xtro-sharpie/macOS-WebKit.todo
index 1f3087b3b1fc..d5b4d8066bdc 100644
--- a/tests/xtro-sharpie/macOS-WebKit.todo
+++ b/tests/xtro-sharpie/macOS-WebKit.todo
@@ -1,7 +1,6 @@
!missing-enum! WKMediaCaptureState not bound
!missing-enum! WKMediaCaptureType not bound
!missing-enum! WKPermissionDecision not bound
-!missing-protocol-member! WKUIDelegate::webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler: not found
!missing-protocol-member! WKUIDelegate::webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler: not found
!missing-selector! WKPreferences::isTextInteractionEnabled not bound
!missing-selector! WKWebView::cameraCaptureState not bound
diff --git a/tests/xtro-sharpie/tvOS-AVFoundation.todo b/tests/xtro-sharpie/tvOS-AVFoundation.todo
index 122bacf3dd3a..87f8018363ce 100644
--- a/tests/xtro-sharpie/tvOS-AVFoundation.todo
+++ b/tests/xtro-sharpie/tvOS-AVFoundation.todo
@@ -194,3 +194,4 @@
!missing-type! AVPlaybackCoordinator not bound
!missing-type! AVPlayerPlaybackCoordinator not bound
## appended from unclassified file
+!missing-field! AVSampleBufferAudioRendererOutputConfigurationDidChangeNotification not bound
diff --git a/tests/xtro-sharpie/tvOS-AudioToolbox.todo b/tests/xtro-sharpie/tvOS-AudioToolbox.todo
index b32b672c7afe..ed1a006bc2b0 100644
--- a/tests/xtro-sharpie/tvOS-AudioToolbox.todo
+++ b/tests/xtro-sharpie/tvOS-AudioToolbox.todo
@@ -5,7 +5,6 @@
!missing-pinvoke! MusicDeviceMIDIEventList is not bound
!missing-selector! AUAudioUnit::AudioUnitMIDIProtocol not bound
!missing-selector! AUAudioUnit::hostMIDIProtocol not bound
-!missing-selector! AUAudioUnit::MIDIEventListOutputNames not bound
!missing-selector! AUAudioUnit::MIDIOutputEventListBlock not bound
!missing-selector! AUAudioUnit::scheduleMIDIEventListBlock not bound
!missing-selector! AUAudioUnit::setHostMIDIProtocol: not bound
diff --git a/tests/xtro-sharpie/tvOS-CoreGraphics.todo b/tests/xtro-sharpie/tvOS-CoreGraphics.todo
index d7d1672b0f0c..41628a6931f4 100644
--- a/tests/xtro-sharpie/tvOS-CoreGraphics.todo
+++ b/tests/xtro-sharpie/tvOS-CoreGraphics.todo
@@ -4,3 +4,5 @@
!missing-pinvoke! CGColorSpaceIsPQBased is not bound
!missing-pinvoke! CGConvertColorDataWithFormat is not bound
!missing-pinvoke! CGErrorSetCallback is not bound
+!missing-field! kCGColorSpaceLinearDisplayP3 not bound
+!missing-field! kCGColorSpaceLinearITUR_2020 not bound
diff --git a/tests/xtro-sharpie/tvOS-DataDetection.todo b/tests/xtro-sharpie/tvOS-DataDetection.todo
index 0b4cde239c9d..fe5af8d5e736 100644
--- a/tests/xtro-sharpie/tvOS-DataDetection.todo
+++ b/tests/xtro-sharpie/tvOS-DataDetection.todo
@@ -1,32 +1,31 @@
-!missing-selector! DDDetectedValue::matchedRange not bound
-!missing-selector! DDDetectedValue::matchedString not bound
-!missing-selector! DDDetectedValueCalendarEvent::endDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::endTimeZone not bound
-!missing-selector! DDDetectedValueCalendarEvent::isAllDay not bound
-!missing-selector! DDDetectedValueCalendarEvent::startDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::startTimeZone not bound
-!missing-selector! DDDetectedValueEmailAddress::emailAddress not bound
-!missing-selector! DDDetectedValueEmailAddress::label not bound
-!missing-selector! DDDetectedValueFlightNumber::airline not bound
-!missing-selector! DDDetectedValueFlightNumber::flightNumber not bound
-!missing-selector! DDDetectedValueLink::URL not bound
-!missing-selector! DDDetectedValueMoneyAmount::amount not bound
-!missing-selector! DDDetectedValueMoneyAmount::currency not bound
-!missing-selector! DDDetectedValuePhoneNumber::label not bound
-!missing-selector! DDDetectedValuePhoneNumber::phoneNumber not bound
-!missing-selector! DDDetectedValuePostalAddress::city not bound
-!missing-selector! DDDetectedValuePostalAddress::country not bound
-!missing-selector! DDDetectedValuePostalAddress::postalCode not bound
-!missing-selector! DDDetectedValuePostalAddress::state not bound
-!missing-selector! DDDetectedValuePostalAddress::street not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::carrier not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::trackingNumber not bound
-!missing-type! DDDetectedValue not bound
-!missing-type! DDDetectedValueCalendarEvent not bound
-!missing-type! DDDetectedValueEmailAddress not bound
-!missing-type! DDDetectedValueFlightNumber not bound
-!missing-type! DDDetectedValueLink not bound
-!missing-type! DDDetectedValueMoneyAmount not bound
-!missing-type! DDDetectedValuePhoneNumber not bound
-!missing-type! DDDetectedValuePostalAddress not bound
-!missing-type! DDDetectedValueShipmentTrackingNumber not bound
+!missing-selector! DDMatch::matchedString not bound
+!missing-selector! DDMatchCalendarEvent::endDate not bound
+!missing-selector! DDMatchCalendarEvent::endTimeZone not bound
+!missing-selector! DDMatchCalendarEvent::isAllDay not bound
+!missing-selector! DDMatchCalendarEvent::startDate not bound
+!missing-selector! DDMatchCalendarEvent::startTimeZone not bound
+!missing-selector! DDMatchEmailAddress::emailAddress not bound
+!missing-selector! DDMatchEmailAddress::label not bound
+!missing-selector! DDMatchFlightNumber::airline not bound
+!missing-selector! DDMatchFlightNumber::flightNumber not bound
+!missing-selector! DDMatchLink::URL not bound
+!missing-selector! DDMatchMoneyAmount::amount not bound
+!missing-selector! DDMatchMoneyAmount::currency not bound
+!missing-selector! DDMatchPhoneNumber::label not bound
+!missing-selector! DDMatchPhoneNumber::phoneNumber not bound
+!missing-selector! DDMatchPostalAddress::city not bound
+!missing-selector! DDMatchPostalAddress::country not bound
+!missing-selector! DDMatchPostalAddress::postalCode not bound
+!missing-selector! DDMatchPostalAddress::state not bound
+!missing-selector! DDMatchPostalAddress::street not bound
+!missing-selector! DDMatchShipmentTrackingNumber::carrier not bound
+!missing-selector! DDMatchShipmentTrackingNumber::trackingNumber not bound
+!missing-type! DDMatch not bound
+!missing-type! DDMatchCalendarEvent not bound
+!missing-type! DDMatchEmailAddress not bound
+!missing-type! DDMatchFlightNumber not bound
+!missing-type! DDMatchLink not bound
+!missing-type! DDMatchMoneyAmount not bound
+!missing-type! DDMatchPhoneNumber not bound
+!missing-type! DDMatchPostalAddress not bound
+!missing-type! DDMatchShipmentTrackingNumber not bound
diff --git a/tests/xtro-sharpie/tvOS-GameController.todo b/tests/xtro-sharpie/tvOS-GameController.todo
new file mode 100644
index 000000000000..10e430e90746
--- /dev/null
+++ b/tests/xtro-sharpie/tvOS-GameController.todo
@@ -0,0 +1,6 @@
+!missing-field! GCInputButtonShare not bound
+!missing-field! GCInputMicroGamepadButtonMenu not bound
+!missing-selector! GCPhysicalInputProfile::hasRemappedElements not bound
+!missing-selector! GCPhysicalInputProfile::mappedElementAliasForPhysicalInputName: not bound
+!missing-selector! GCPhysicalInputProfile::mappedPhysicalInputNamesForElementAlias: not bound
+!missing-selector! GCXboxGamepad::buttonShare not bound
diff --git a/tests/xtro-sharpie/tvOS-MetalPerformanceShadersGraph.todo b/tests/xtro-sharpie/tvOS-MetalPerformanceShadersGraph.todo
index aa8651949ea2..a861c057b45e 100644
--- a/tests/xtro-sharpie/tvOS-MetalPerformanceShadersGraph.todo
+++ b/tests/xtro-sharpie/tvOS-MetalPerformanceShadersGraph.todo
@@ -397,3 +397,24 @@
!missing-type! MPSGraphVariableOp not bound
## appended from unclassified file
## appended from unclassified file
+!missing-selector! MPSGraph::broadcastTensor:toShape:name: not bound
+!missing-selector! MPSGraph::broadcastTensor:toShapeTensor:name: not bound
+!missing-selector! MPSGraph::castTensor:toType:name: not bound
+!missing-selector! MPSGraph::convolution2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolution2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DDataGradientWithIncomingGradientTensor:weightsTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWeightsGradientWithIncomingGradientTensor:sourceTensor:outputShapeTensor:forwardConvolutionDescriptor:name: not bound
+!missing-selector! MPSGraph::convolutionTranspose2DWithSourceTensor:weightsTensor:outputShapeTensor:descriptor:name: not bound
+!missing-selector! MPSGraph::leakyReLUGradientWithIncomingGradient:sourceTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alpha:name: not bound
+!missing-selector! MPSGraph::leakyReLUWithTensor:alphaTensor:name: not bound
+!missing-selector! MPSGraph::reshapeTensor:withShapeTensor:name: not bound
+!missing-selector! MPSGraph::resizeTensor:sizeTensor:mode:centerResult:alignCorners:layout:name: not bound
+!missing-selector! MPSGraph::scatterNDWithDataTensor:updatesTensor:indicesTensor:batchDimensions:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithDataTensor:updatesTensor:indicesTensor:axis:mode:name: not bound
+!missing-selector! MPSGraph::scatterWithUpdatesTensor:indicesTensor:shape:axis:mode:name: not bound
+!missing-selector! MPSGraph::shapeOfTensor:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:k:name: not bound
+!missing-selector! MPSGraph::topKWithGradientTensor:source:kTensor:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:k:name: not bound
+!missing-selector! MPSGraph::topKWithSourceTensor:kTensor:name: not bound
diff --git a/tests/xtro-sharpie/tvOS-Network.todo b/tests/xtro-sharpie/tvOS-Network.todo
index 0cdf77cf6f79..c21bc8e55823 100644
--- a/tests/xtro-sharpie/tvOS-Network.todo
+++ b/tests/xtro-sharpie/tvOS-Network.todo
@@ -72,3 +72,4 @@
!missing-pinvoke! nw_quic_set_stream_application_error is not bound
!missing-pinvoke! nw_quic_set_stream_is_unidirectional is not bound
!missing-pinvoke! nw_tcp_options_set_multipath_force_version is not bound
+!missing-pinvoke! nw_group_descriptor_create_multiplex is not bound
diff --git a/tests/xtro-sharpie/tvOS-UIKit.todo b/tests/xtro-sharpie/tvOS-UIKit.todo
index 25c46a5c4931..694171dec66d 100644
--- a/tests/xtro-sharpie/tvOS-UIKit.todo
+++ b/tests/xtro-sharpie/tvOS-UIKit.todo
@@ -41,7 +41,6 @@
!missing-enum! UIButtonConfigurationMacIdiomStyle not bound
!missing-enum! UIButtonConfigurationSize not bound
!missing-enum! UIButtonConfigurationTitleAlignment not bound
-!missing-enum! UIImageVariant not bound
!missing-enum! UIWindowScenePresentationStyle not bound
!missing-enum-value! UIFocusHeading native value UIFocusHeadingFirst = 256 not bound
!missing-enum-value! UIFocusHeading native value UIFocusHeadingLast = 512 not bound
@@ -54,7 +53,6 @@
!missing-field! UICollectionViewLayoutAutomaticDimension not bound
!missing-field! UIKeyInputDelete not bound
!missing-field! UIMenuSidebar not bound
-!missing-field! UIPasteboardDetectionPatternAddress not bound
!missing-field! UIPasteboardDetectionPatternCalendarEvent not bound
!missing-field! UIPasteboardDetectionPatternEmailAddress not bound
!missing-field! UIPasteboardDetectionPatternFlightNumber not bound
@@ -95,10 +93,6 @@
!missing-selector! +UIColor::tintColor not bound
!missing-selector! +UIDeferredMenuElement::elementWithUncachedProvider: not bound
!missing-selector! +UIFocusDebugger::checkFocusGroupTreeForEnvironment: not bound
-!missing-selector! +UIImage::imageNamed:variant: not bound
-!missing-selector! +UIImage::imageNamed:variant:withConfiguration: not bound
-!missing-selector! +UIImage::systemImageNamed:variant: not bound
-!missing-selector! +UIImage::systemImageNamed:variant:withConfiguration: not bound
!missing-selector! +UIImageSymbolConfiguration::configurationPreferringMulticolor not bound
!missing-selector! +UIImageSymbolConfiguration::configurationWithHierarchicalColor: not bound
!missing-selector! +UIImageSymbolConfiguration::configurationWithPaletteColors: not bound
@@ -371,11 +365,8 @@
!missing-selector! UICollectionViewDiffableDataSourceSectionSnapshotHandlers::snapshotForExpandingParentItemHandler not bound
!missing-selector! UICollectionViewDiffableDataSourceSectionSnapshotHandlers::willCollapseItemHandler not bound
!missing-selector! UICollectionViewDiffableDataSourceSectionSnapshotHandlers::willExpandItemHandler not bound
-!missing-selector! UIImage::imageByApplyingVariant: not bound
-!missing-selector! UIImage::imageByApplyingVariantFromImage: not bound
!missing-selector! UIImage::imageByPreparingForDisplay not bound
!missing-selector! UIImage::imageByPreparingThumbnailOfSize: not bound
-!missing-selector! UIImage::imageByRemovingVariant not bound
!missing-selector! UIImage::prepareForDisplayWithCompletionHandler: not bound
!missing-selector! UIImage::prepareThumbnailOfSize:completionHandler: not bound
!missing-selector! UIKeyCommand::allowsAutomaticLocalization not bound
@@ -393,29 +384,6 @@
!missing-selector! UINavigationBar::setCompactScrollEdgeAppearance: not bound
!missing-selector! UINavigationItem::compactScrollEdgeAppearance not bound
!missing-selector! UINavigationItem::setCompactScrollEdgeAppearance: not bound
-!missing-selector! UIPasteboardDetectionResult::matchedRange not bound
-!missing-selector! UIPasteboardDetectionResult::matchedString not bound
-!missing-selector! UIPasteboardDetectionResultAddress::city not bound
-!missing-selector! UIPasteboardDetectionResultAddress::country not bound
-!missing-selector! UIPasteboardDetectionResultAddress::postalCode not bound
-!missing-selector! UIPasteboardDetectionResultAddress::state not bound
-!missing-selector! UIPasteboardDetectionResultAddress::street not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::allDay not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::endDate not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::endTimeZone not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::startDate not bound
-!missing-selector! UIPasteboardDetectionResultCalendarEvent::startTimeZone not bound
-!missing-selector! UIPasteboardDetectionResultEmailAddress::emailAddress not bound
-!missing-selector! UIPasteboardDetectionResultEmailAddress::label not bound
-!missing-selector! UIPasteboardDetectionResultFlightNumber::airline not bound
-!missing-selector! UIPasteboardDetectionResultFlightNumber::flightNumber not bound
-!missing-selector! UIPasteboardDetectionResultLink::url not bound
-!missing-selector! UIPasteboardDetectionResultMoneyAmount::amount not bound
-!missing-selector! UIPasteboardDetectionResultMoneyAmount::currency not bound
-!missing-selector! UIPasteboardDetectionResultPhoneNumber::label not bound
-!missing-selector! UIPasteboardDetectionResultPhoneNumber::phoneNumber not bound
-!missing-selector! UIPasteboardDetectionResultShipmentTrackingNumber::carrier not bound
-!missing-selector! UIPasteboardDetectionResultShipmentTrackingNumber::trackingNumber not bound
!missing-selector! UIResponder::captureTextFromCamera: not bound
!missing-selector! UIScene::completeStateRestoration not bound
!missing-selector! UIScene::extendStateRestoration not bound
@@ -475,15 +443,16 @@
!missing-type! NSTextSelectionNavigation not bound
!missing-type! NSTextViewportLayoutController not bound
!missing-type! UIButtonConfiguration not bound
-!missing-type! UIPasteboardDetectionResult not bound
-!missing-type! UIPasteboardDetectionResultAddress not bound
-!missing-type! UIPasteboardDetectionResultCalendarEvent not bound
-!missing-type! UIPasteboardDetectionResultEmailAddress not bound
-!missing-type! UIPasteboardDetectionResultFlightNumber not bound
-!missing-type! UIPasteboardDetectionResultLink not bound
-!missing-type! UIPasteboardDetectionResultMoneyAmount not bound
-!missing-type! UIPasteboardDetectionResultPhoneNumber not bound
-!missing-type! UIPasteboardDetectionResultShipmentTrackingNumber not bound
!missing-type! UIWindowSceneActivationRequestOptions not bound
## appended from unclassified file
## appended from unclassified file
+!missing-field! UIPasteboardDetectionPatternPostalAddress not bound
+!missing-selector! +UIButtonConfiguration::borderedButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderedProminentButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderedTintedButtonConfiguration not bound
+!missing-selector! +UIButtonConfiguration::borderlessButtonConfiguration not bound
+!missing-selector! UIButtonConfiguration::activityIndicatorColorTransformer not bound
+!missing-selector! UIButtonConfiguration::automaticallyUpdateForSelection not bound
+!missing-selector! UIButtonConfiguration::setActivityIndicatorColorTransformer: not bound
+!missing-selector! UIButtonConfiguration::setAutomaticallyUpdateForSelection: not bound
+!missing-selector! UIButtonConfiguration::setDefaultContentInsets not bound
diff --git a/tests/xtro-sharpie/watchOS-AVFoundation.todo b/tests/xtro-sharpie/watchOS-AVFoundation.todo
index 06b9de55385b..116a570cc2b5 100644
--- a/tests/xtro-sharpie/watchOS-AVFoundation.todo
+++ b/tests/xtro-sharpie/watchOS-AVFoundation.todo
@@ -95,3 +95,4 @@
!missing-type! AVAssetVariantVideoAttributes not bound
!missing-type! AVMetadataItemFilter not bound
## appended from unclassified file
+!missing-field! AVSampleBufferAudioRendererOutputConfigurationDidChangeNotification not bound
diff --git a/tests/xtro-sharpie/watchOS-CoreGraphics.todo b/tests/xtro-sharpie/watchOS-CoreGraphics.todo
index d7d1672b0f0c..41628a6931f4 100644
--- a/tests/xtro-sharpie/watchOS-CoreGraphics.todo
+++ b/tests/xtro-sharpie/watchOS-CoreGraphics.todo
@@ -4,3 +4,5 @@
!missing-pinvoke! CGColorSpaceIsPQBased is not bound
!missing-pinvoke! CGConvertColorDataWithFormat is not bound
!missing-pinvoke! CGErrorSetCallback is not bound
+!missing-field! kCGColorSpaceLinearDisplayP3 not bound
+!missing-field! kCGColorSpaceLinearITUR_2020 not bound
diff --git a/tests/xtro-sharpie/watchOS-DataDetection.todo b/tests/xtro-sharpie/watchOS-DataDetection.todo
index 0b4cde239c9d..fe5af8d5e736 100644
--- a/tests/xtro-sharpie/watchOS-DataDetection.todo
+++ b/tests/xtro-sharpie/watchOS-DataDetection.todo
@@ -1,32 +1,31 @@
-!missing-selector! DDDetectedValue::matchedRange not bound
-!missing-selector! DDDetectedValue::matchedString not bound
-!missing-selector! DDDetectedValueCalendarEvent::endDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::endTimeZone not bound
-!missing-selector! DDDetectedValueCalendarEvent::isAllDay not bound
-!missing-selector! DDDetectedValueCalendarEvent::startDate not bound
-!missing-selector! DDDetectedValueCalendarEvent::startTimeZone not bound
-!missing-selector! DDDetectedValueEmailAddress::emailAddress not bound
-!missing-selector! DDDetectedValueEmailAddress::label not bound
-!missing-selector! DDDetectedValueFlightNumber::airline not bound
-!missing-selector! DDDetectedValueFlightNumber::flightNumber not bound
-!missing-selector! DDDetectedValueLink::URL not bound
-!missing-selector! DDDetectedValueMoneyAmount::amount not bound
-!missing-selector! DDDetectedValueMoneyAmount::currency not bound
-!missing-selector! DDDetectedValuePhoneNumber::label not bound
-!missing-selector! DDDetectedValuePhoneNumber::phoneNumber not bound
-!missing-selector! DDDetectedValuePostalAddress::city not bound
-!missing-selector! DDDetectedValuePostalAddress::country not bound
-!missing-selector! DDDetectedValuePostalAddress::postalCode not bound
-!missing-selector! DDDetectedValuePostalAddress::state not bound
-!missing-selector! DDDetectedValuePostalAddress::street not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::carrier not bound
-!missing-selector! DDDetectedValueShipmentTrackingNumber::trackingNumber not bound
-!missing-type! DDDetectedValue not bound
-!missing-type! DDDetectedValueCalendarEvent not bound
-!missing-type! DDDetectedValueEmailAddress not bound
-!missing-type! DDDetectedValueFlightNumber not bound
-!missing-type! DDDetectedValueLink not bound
-!missing-type! DDDetectedValueMoneyAmount not bound
-!missing-type! DDDetectedValuePhoneNumber not bound
-!missing-type! DDDetectedValuePostalAddress not bound
-!missing-type! DDDetectedValueShipmentTrackingNumber not bound
+!missing-selector! DDMatch::matchedString not bound
+!missing-selector! DDMatchCalendarEvent::endDate not bound
+!missing-selector! DDMatchCalendarEvent::endTimeZone not bound
+!missing-selector! DDMatchCalendarEvent::isAllDay not bound
+!missing-selector! DDMatchCalendarEvent::startDate not bound
+!missing-selector! DDMatchCalendarEvent::startTimeZone not bound
+!missing-selector! DDMatchEmailAddress::emailAddress not bound
+!missing-selector! DDMatchEmailAddress::label not bound
+!missing-selector! DDMatchFlightNumber::airline not bound
+!missing-selector! DDMatchFlightNumber::flightNumber not bound
+!missing-selector! DDMatchLink::URL not bound
+!missing-selector! DDMatchMoneyAmount::amount not bound
+!missing-selector! DDMatchMoneyAmount::currency not bound
+!missing-selector! DDMatchPhoneNumber::label not bound
+!missing-selector! DDMatchPhoneNumber::phoneNumber not bound
+!missing-selector! DDMatchPostalAddress::city not bound
+!missing-selector! DDMatchPostalAddress::country not bound
+!missing-selector! DDMatchPostalAddress::postalCode not bound
+!missing-selector! DDMatchPostalAddress::state not bound
+!missing-selector! DDMatchPostalAddress::street not bound
+!missing-selector! DDMatchShipmentTrackingNumber::carrier not bound
+!missing-selector! DDMatchShipmentTrackingNumber::trackingNumber not bound
+!missing-type! DDMatch not bound
+!missing-type! DDMatchCalendarEvent not bound
+!missing-type! DDMatchEmailAddress not bound
+!missing-type! DDMatchFlightNumber not bound
+!missing-type! DDMatchLink not bound
+!missing-type! DDMatchMoneyAmount not bound
+!missing-type! DDMatchPhoneNumber not bound
+!missing-type! DDMatchPostalAddress not bound
+!missing-type! DDMatchShipmentTrackingNumber not bound
diff --git a/tests/xtro-sharpie/watchOS-HealthKit.todo b/tests/xtro-sharpie/watchOS-HealthKit.todo
new file mode 100644
index 000000000000..bb9c0f51866b
--- /dev/null
+++ b/tests/xtro-sharpie/watchOS-HealthKit.todo
@@ -0,0 +1 @@
+!missing-field! HKMetadataKeyAlgorithmVersion not bound
diff --git a/tests/xtro-sharpie/watchOS-Intents.todo b/tests/xtro-sharpie/watchOS-Intents.todo
index 2aa332b1d9c8..8e5d398bc3b3 100644
--- a/tests/xtro-sharpie/watchOS-Intents.todo
+++ b/tests/xtro-sharpie/watchOS-Intents.todo
@@ -62,3 +62,6 @@
!missing-type! INShareFocusStatusIntentResponse not bound
## appended from unclassified file
## appended from unclassified file
+!missing-selector! INPerson::initWithPersonHandle:nameComponents:displayName:image:contactIdentifier:customIdentifier:isContactSuggestion:suggestionType: not bound
+!missing-selector! INPerson::isContactSuggestion not bound
+!unknown-type! INTemperatureResolutionResult bound
diff --git a/tests/xtro-sharpie/watchOS-Network.todo b/tests/xtro-sharpie/watchOS-Network.todo
index 0cdf77cf6f79..c21bc8e55823 100644
--- a/tests/xtro-sharpie/watchOS-Network.todo
+++ b/tests/xtro-sharpie/watchOS-Network.todo
@@ -72,3 +72,4 @@
!missing-pinvoke! nw_quic_set_stream_application_error is not bound
!missing-pinvoke! nw_quic_set_stream_is_unidirectional is not bound
!missing-pinvoke! nw_tcp_options_set_multipath_force_version is not bound
+!missing-pinvoke! nw_group_descriptor_create_multiplex is not bound
diff --git a/tests/xtro-sharpie/watchOS-UIKit.todo b/tests/xtro-sharpie/watchOS-UIKit.todo
index f8f124645bf1..0d96d389fab4 100644
--- a/tests/xtro-sharpie/watchOS-UIKit.todo
+++ b/tests/xtro-sharpie/watchOS-UIKit.todo
@@ -5,11 +5,3 @@
!missing-selector! NSMutableParagraphStyle::setUsesDefaultHyphenation: not bound
!missing-selector! NSMutableParagraphStyle::usesDefaultHyphenation not bound
!missing-selector! NSParagraphStyle::usesDefaultHyphenation not bound
-!missing-enum! UIImageVariant not bound
-!missing-selector! +UIImage::imageNamed:variant: not bound
-!missing-selector! +UIImage::imageNamed:variant:withConfiguration: not bound
-!missing-selector! +UIImage::systemImageNamed:variant: not bound
-!missing-selector! +UIImage::systemImageNamed:variant:withConfiguration: not bound
-!missing-selector! UIImage::imageByApplyingVariant: not bound
-!missing-selector! UIImage::imageByApplyingVariantFromImage: not bound
-!missing-selector! UIImage::imageByRemovingVariant not bound
diff --git a/tools/devops/automation/scripts/bash/build-nugets.sh b/tools/devops/automation/scripts/bash/build-nugets.sh
index 831afb0985ff..0b61393de780 100755
--- a/tools/devops/automation/scripts/bash/build-nugets.sh
+++ b/tools/devops/automation/scripts/bash/build-nugets.sh
@@ -15,6 +15,7 @@ rm -f ../package/*.nupkg
cp -c "$DOTNET_NUPKG_DIR"/*.nupkg ../package/
cp -c "$DOTNET_NUPKG_DIR"/vs-workload.props ../package/
cp -c "$DOTNET_NUPKG_DIR"/SignList.xml ../package/
+cp -c "$DOTNET_NUPKG_DIR"/SignList.targets ../package/
DOTNET_PKG_DIR=$(make -C tools/devops print-abspath-variable VARIABLE=DOTNET_PKG_DIR | grep "^DOTNET_PKG_DIR=" | sed -e 's/^DOTNET_PKG_DIR=//')
make -C dotnet package -j