From 87317fcc34ceb630541ff4d0b6090a81e35ea2e7 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Tue, 1 Sep 2026 14:29:27 +0200 Subject: [PATCH 1/7] [CoreFoundation] Fix numerous issues with CFMessagePort. * Use the native CFMessagePort context retain/release contract to keep callback state alive * Fix returned object ownership * Make invalidation callbacks replaceable. * Add complete API documentation, a result-returning TrySetName API * Add test coverage. Contributes towards https://github.com/dotnet/macios/issues/10146. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 99900f2c-d178-4e70-9068-c6c3005ef89a --- src/CoreFoundation/CFMessagePort.cs | 352 +++++++----------- .../cecil-tests/HandleSafety.KnownFailures.cs | 2 - .../CoreFoundation/CFMessagePortTest.cs | 137 +++++++ 3 files changed, 271 insertions(+), 220 deletions(-) create mode 100644 tests/monotouch-test/CoreFoundation/CFMessagePortTest.cs diff --git a/src/CoreFoundation/CFMessagePort.cs b/src/CoreFoundation/CFMessagePort.cs index 43aa87de939e..8d5f87d8e1ec 100644 --- a/src/CoreFoundation/CFMessagePort.cs +++ b/src/CoreFoundation/CFMessagePort.cs @@ -10,6 +10,7 @@ #nullable enable using System.Collections.Generic; +using System.Threading; using dispatch_queue_t = System.IntPtr; @@ -17,42 +18,59 @@ namespace CoreFoundation { // untyped enum from CFMessagePort.h // used as a return value of type SInt32 (always 4 bytes) - /// This enumeration contains status codes for . - /// To be added. + /// Specifies the result of sending a message with . public enum CFMessagePortSendRequestStatus { /// The message was sent, and any expected reply was received. Success = 0, + /// The port timed out before the message could be sent. SendTimeout = -1, + /// The port timed out before the response was received. ReceiveTimeout = -2, + /// The port became invalid before the message was sent. IsInvalid = -3, + /// An error occurred. TransportError = -4, + /// The port became invalid after the message was sent, but before a response was received. BecameInvalidError = -5, } - internal class CFMessagePortContext { - - public Func? Retain { get; set; } - - public Action? Release { get; set; } - - public Func? CopyDescription { get; set; } - } - - /// A communication channel between multiple threads on the local device. - /// - /// + /// Provides local interprocess communication through named message ports. + /// + /// Create a local port with to receive messages, and create a remote port with to send messages to a named local port. + /// A local port must be scheduled by calling and adding the returned source to a run loop, or by calling . + /// [SupportedOSPlatform ("ios")] [SupportedOSPlatform ("maccatalyst")] [SupportedOSPlatform ("macos")] [SupportedOSPlatform ("tvos")] public class CFMessagePort : NativeObject { + sealed class MessagePortContext { + int retainCount = 1; + + public CFMessagePortCallBack Callback { get; } + + public MessagePortContext (CFMessagePortCallBack callback) + { + Callback = callback; + } + + public void Retain () + { + Interlocked.Increment (ref retainCount); + } + + public void Release (GCHandle handle) + { + if (Interlocked.Decrement (ref retainCount) == 0) + handle.Free (); + } + } - // CFMessagePortContext [StructLayout (LayoutKind.Sequential)] unsafe struct ContextProxy { /* CFIndex */ @@ -63,77 +81,69 @@ unsafe struct ContextProxy { public delegate* unmanaged copyDescription; } - /// To be added. - /// To be added. - /// To be added. - /// To be added. - /// To be added. + /// Handles a message received by a local message port. + /// The application-defined message identifier. + /// The message data. + /// The data to return to the sender. + /// The object is only valid for the duration of the callback. Copy it if it must be retained after the callback returns. public delegate NSData CFMessagePortCallBack (int type, NSData data); - static Dictionary outputHandles = new Dictionary (Runtime.IntPtrEqualityComparer); + // Remote ports pass null as the native invalidation callback's info argument, and multiple + // managed wrappers may share a native port, so invalidation callbacks must be keyed by handle. + static Dictionary invalidationHandles = new Dictionary (Runtime.IntPtrEqualityComparer); - static Dictionary invalidationHandles = new Dictionary (Runtime.IntPtrEqualityComparer); - - static Dictionary messagePortContexts = new Dictionary (Runtime.IntPtrEqualityComparer); - - IntPtr contextHandle; - - /// Returns a Boolean value that indicates whether a current instance of CFMessagePort object represents a remote port. - /// Boolean value. - /// Property returns true if CFMessagePort is remote. + /// Gets a value that indicates whether this instance represents a remote port. + /// for a remote port; for a local port. public bool IsRemote { get { return CFMessagePortIsRemote (GetCheckedHandle ()) != 0; } } - /// The registered name of message port. - /// String representation of message port's name. - ///  Property returns null if port have no name. + /// Gets or sets the registered name of the message port. + /// The registered port name, or if the port is unnamed. + /// The value being assigned is . + /// The setter does not report whether the name was changed. Use when the result is needed. Changing the name does not make an already scheduled unnamed local port able to receive messages. public string? Name { get { return CFString.FromHandle (CFMessagePortGetName (GetCheckedHandle ())); } set { - var n = CFString.CreateNative (value); - try { - CFMessagePortSetName (GetCheckedHandle (), n); - } finally { - CFString.ReleaseNative (n); - } + if (value is null) + ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (value)); + TrySetName (value); } } - /// Returns a boolean value that indicates whether a CFMessagePort object is valid. - /// Boolean value. - /// Property indicates whether message port can send or receive messages. - public bool IsValid { - get { - return CFMessagePortIsValid (GetCheckedHandle ()) != 0; + /// Attempts to change the registered name of this local message port. + /// The new port name. + /// if the name was changed; otherwise, . + /// is . + /// This method returns for remote ports, duplicate names, invalid names, and native registration failures. + public bool TrySetName (string name) + { + if (name is null) + ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (name)); + + var n = CFString.CreateNative (name); + try { + return CFMessagePortSetName (GetCheckedHandle (), n) != 0; + } finally { + CFString.ReleaseNative (n); } } - internal CFMessagePortContext? Context { + /// Gets a value that indicates whether the port can send or receive messages. + /// if the port is valid; otherwise, . + public bool IsValid { get { - CFMessagePortContext? result; - ContextProxy context = new ContextProxy (); - unsafe { - CFMessagePortGetContext (GetCheckedHandle (), &context); - } - - if (context.info == IntPtr.Zero) - return null; - - lock (messagePortContexts) - messagePortContexts.TryGetValue (context.info, out result); - - return result; + return CFMessagePortIsValid (GetCheckedHandle ()) != 0; } } - /// Gets or sets the invalidation callback method for a CFMessagePort object. - /// Delegate - /// Set null value to remove callback. Callback will be fired on message on port invalidation. + /// Gets or sets the callback invoked when the message port becomes invalid. + /// The invalidation callback, or if no callback is installed. + /// Assigning a new callback replaces the previous callback. Assign to remove it. If the port is already invalid when a callback is assigned, the callback is invoked synchronously. public Action? InvalidationCallback { get { lock (invalidationHandles) { @@ -142,15 +152,17 @@ public Action? InvalidationCallback { } } set { + var handle = GetCheckedHandle (); lock (invalidationHandles) { if (value is null) - invalidationHandles [GetCheckedHandle ()] = null; + invalidationHandles.Remove (handle); else - invalidationHandles.Add (GetCheckedHandle (), value); + invalidationHandles [handle] = value; } unsafe { - CFMessagePortSetInvalidationCallBack (Handle, &MessagePortInvalidationCallback); + delegate* unmanaged callback = value is null ? null : &MessagePortInvalidationCallback; + CFMessagePortSetInvalidationCallBack (handle, callback); } } } @@ -161,30 +173,6 @@ internal CFMessagePort (NativeHandle handle, bool owns) { } - /// - protected override void Dispose (bool disposing) - { - if (Handle != IntPtr.Zero) { - - lock (outputHandles) - outputHandles.Remove (Handle); - - lock (invalidationHandles) { - if (invalidationHandles.ContainsKey (Handle)) - invalidationHandles.Remove (Handle); - } - - lock (messagePortContexts) { - if (messagePortContexts.ContainsKey (contextHandle)) - messagePortContexts.Remove (contextHandle); - } - - contextHandle = IntPtr.Zero; - } - - base.Dispose (disposing); - } - [DllImport (Constants.CoreFoundationLibrary)] static unsafe extern /* CFMessagePortRef */ IntPtr CFMessagePortCreateLocal (/* CFAllocatorRef */ IntPtr allocator, /* CFStringRef */ IntPtr name, delegate* unmanaged callout, /* CFMessagePortContext */ ContextProxy* context, byte* shouldFreeInfo); @@ -209,9 +197,6 @@ protected override void Dispose (bool disposing) [DllImport (Constants.CoreFoundationLibrary)] static extern /* CFStringRef */ IntPtr CFMessagePortGetName (/* CFMessagePortRef */ IntPtr ms); - [DllImport (Constants.CoreFoundationLibrary)] - unsafe static extern void CFMessagePortGetContext (/* CFMessagePortRef */ IntPtr ms, /* CFMessagePortContext* */ ContextProxy* context); - [DllImport (Constants.CoreFoundationLibrary)] static extern /* Boolean */ byte CFMessagePortIsValid (/* CFMessagePortRef */ IntPtr ms); @@ -221,46 +206,28 @@ protected override void Dispose (bool disposing) [DllImport (Constants.CoreFoundationLibrary)] static unsafe extern void CFMessagePortSetInvalidationCallBack (/* CFMessagePortRef */ IntPtr ms, delegate* unmanaged callout); - [DllImport (Constants.CoreFoundationLibrary)] - static extern IntPtr CFMessagePortGetInvalidationCallBack (/* CFMessagePortRef */ IntPtr ms); - - /// To be added. - /// To be added. - /// To be added. - /// To be added. - /// To be added. - /// To be added. + /// Creates a local message port that receives messages. + /// The name to register, or to create an unnamed port. + /// The callback that handles received messages. + /// The allocator to use, or to use the default allocator. + /// A local message port, or if the port could not be created. + /// is . + /// If another local port with the same name already exists in the process, Core Foundation returns that port and continues to use its original callback. public static CFMessagePort? CreateLocalPort (string? name, CFMessagePortCallBack callback, CFAllocator? allocator = null) { if (callback is null) ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (callback)); - return CreateLocalPort (allocator, name, callback, context: null); - } - - internal static CFMessagePort? CreateLocalPort (CFAllocator? allocator, string? name, CFMessagePortCallBack callback, CFMessagePortContext? context) - { var n = CFString.CreateNative (name); byte shouldFreeInfo = 0; - var contextProxy = new ContextProxy (); - - // a GCHandle is needed because we do not have an handle before calling CFMessagePortCreateLocal - // and that will call the RetainProxy. So using this (short-lived) GCHandle allow us to find back the - // original context defined by developer - var shortHandle = GCHandle.Alloc (contextProxy); - - if (context is not null) { - unsafe { - if (context.Retain is not null) - contextProxy.retain = &RetainProxy; - if (context.Release is not null) - contextProxy.release = &ReleaseProxy; - if (context.CopyDescription is not null) - contextProxy.copyDescription = &CopyDescriptionProxy; - } - contextProxy.info = (IntPtr) shortHandle; - lock (messagePortContexts) - messagePortContexts.Add (contextProxy.info, context); + var context = new MessagePortContext (callback); + var contextHandle = GCHandle.Alloc (context); + var contextProxy = new ContextProxy { + info = GCHandle.ToIntPtr (contextHandle), + }; + unsafe { + contextProxy.retain = &RetainProxy; + contextProxy.release = &ReleaseProxy; } try { @@ -270,33 +237,13 @@ protected override void Dispose (bool disposing) GC.KeepAlive (allocator); } - // TODO handle should free info if (portHandle == IntPtr.Zero) return null; - var result = new CFMessagePort (portHandle, true); - - lock (outputHandles) - outputHandles.Add (portHandle, callback); - - if (context is not null) { - lock (messagePortContexts) { - messagePortContexts.Remove (contextProxy.info); - unsafe { - CFMessagePortGetContext (portHandle, &contextProxy); - } - messagePortContexts.Add (contextProxy.info, context); - } - - result.contextHandle = contextProxy.info; - } - - return result; + return new CFMessagePort (portHandle, true); } finally { CFString.ReleaseNative (n); - - // we won't need short GCHandle after the Create call - shortHandle.Free (); + context.Release (contextHandle); } } @@ -306,61 +253,28 @@ protected override void Dispose (bool disposing) [UnmanagedCallersOnly] static IntPtr RetainProxy (IntPtr info) { - INativeObject? result = null; - CFMessagePortContext? context; - - lock (messagePortContexts) { - messagePortContexts.TryGetValue (info, out context); - } - - if (context?.Retain is not null) - result = context.Retain (); - - return result.GetHandle (); + var context = GCHandle.FromIntPtr (info).Target as MessagePortContext; + context?.Retain (); + return info; } [UnmanagedCallersOnly] static void ReleaseProxy (IntPtr info) { - CFMessagePortContext? context; - - lock (messagePortContexts) - messagePortContexts.TryGetValue (info, out context); - - if (context?.Release is not null) - context.Release (); - } - - [UnmanagedCallersOnly] - static IntPtr CopyDescriptionProxy (IntPtr info) - { - NSString? result = null; - CFMessagePortContext? context; - - lock (messagePortContexts) - messagePortContexts.TryGetValue (info, out context); - - if (context?.CopyDescription is not null) - result = context.CopyDescription (); - -#pragma warning disable RBI0014 - return result.GetHandle (); -#pragma warning restore RBI0014 + var handle = GCHandle.FromIntPtr (info); + var context = handle.Target as MessagePortContext; + context?.Release (handle); } [UnmanagedCallersOnly] static IntPtr MessagePortCallback (IntPtr local, int msgid, IntPtr data, IntPtr info) { - CFMessagePortCallBack callback; - - lock (outputHandles) - callback = outputHandles [local]; - - if (callback is null) + var context = GCHandle.FromIntPtr (info).Target as MessagePortContext; + if (context is null) return IntPtr.Zero; using (var managedData = Runtime.GetNSObject (data)!) { - var result = callback.Invoke (msgid, managedData); + var result = context.Callback.Invoke (msgid, managedData); // System will release returned CFData result?.DangerousRetain (); #pragma warning disable RBI0014 @@ -374,18 +288,19 @@ static void MessagePortInvalidationCallback (IntPtr messagePort, IntPtr info) { Action? callback; - lock (invalidationHandles) + lock (invalidationHandles) { invalidationHandles.TryGetValue (messagePort, out callback); + invalidationHandles.Remove (messagePort); + } - if (callback is not null) - callback.Invoke (); + callback?.Invoke (); } - /// To be added. - /// To be added. - /// Deprecated. - /// To be added. - /// To be added. + /// Creates a remote message port for sending messages to a named local port. + /// The allocator to use, or to use the default allocator. + /// The name of the local port. + /// A remote message port, or if no valid local port with the specified name is available. + /// is . public static CFMessagePort? CreateRemotePort (CFAllocator? allocator, string name) { if (name is null) @@ -401,50 +316,51 @@ static void MessagePortInvalidationCallback (IntPtr messagePort, IntPtr info) } } - /// Invalidating a message port prevents the port from ever sending or receiving any more messages.  - /// The message port is not deallocated after invalidation, however  property is set to be true. + /// Invalidates the message port so that it can no longer send or receive messages. + /// Invalidation is permanent and does not dispose the managed object. After this method returns, is . public void Invalidate () { CFMessagePortInvalidate (GetCheckedHandle ()); } - /// To be added. - /// To be added. - /// To be added. - /// To be added. - /// To be added. - /// To be added. - /// Sends a message to the port. - /// To be added. - /// To be added. + /// Sends a message through a remote message port. + /// The application-defined message identifier. + /// The message data, or to send an empty message. + /// The maximum number of seconds to wait while sending the message. + /// The maximum number of seconds to wait for a reply. + /// The run loop mode in which to wait for a reply, or if no reply is expected. + /// On return, the reply data, or if no data was returned. + /// A value that describes whether the message was sent and, if requested, whether a reply was received. + /// This method is intended for remote ports. When is , the method returns after sending and does not wait for a reply. public CFMessagePortSendRequestStatus SendRequest (int msgid, NSData? data, double sendTimeout, double rcvTimeout, NSString? replyMode, out NSData? returnData) { CFMessagePortSendRequestStatus result; - IntPtr returnDataHandle; + IntPtr returnDataHandle = IntPtr.Zero; unsafe { result = CFMessagePortSendRequest (GetCheckedHandle (), msgid, data.GetHandle (), sendTimeout, rcvTimeout, replyMode.GetHandle (), &returnDataHandle); GC.KeepAlive (data); GC.KeepAlive (replyMode); } - returnData = Runtime.GetINativeObject (returnDataHandle, false); + // Apple's documentation says ownership of returnData follows the Create Rule. + returnData = Runtime.GetINativeObject (returnDataHandle, true); return result; } - /// Creates a CFRunLoopSource object for a CFMessagePort object. - /// The new CFRunLoopSource object for listening port - /// Method returns loop which is not added to any run loop. Use  to activate the loop. + /// Creates a run loop source that delivers messages to this local port. + /// A new run loop source that has not yet been added to a run loop. + /// Add the returned source to a run loop with . A port cannot use both a run loop source and a dispatch queue. public CFRunLoopSource CreateRunLoopSource () { // note: order is currently ignored by CFMessagePort object run loop sources. Pass 0 for this value. - var runLoopHandle = CFMessagePortCreateRunLoopSource (IntPtr.Zero, Handle, 0); - return new CFRunLoopSource (runLoopHandle, false); + var runLoopHandle = CFMessagePortCreateRunLoopSource (IntPtr.Zero, GetCheckedHandle (), 0); + return new CFRunLoopSource (runLoopHandle, true); } - /// To be added. - /// Schedules message port’s callbacks on the specified dispatch queue. - /// To be added. + /// Schedules this local port's callbacks on a dispatch queue. + /// The dispatch queue to use, or to stop using the current queue. + /// A port cannot use both a dispatch queue and a run loop source. Calling this method on a remote or invalid port has no effect. public void SetDispatchQueue (DispatchQueue? queue) { CFMessagePortSetDispatchQueue (GetCheckedHandle (), queue.GetHandle ()); diff --git a/tests/cecil-tests/HandleSafety.KnownFailures.cs b/tests/cecil-tests/HandleSafety.KnownFailures.cs index f28c5d9be695..00783b63d606 100644 --- a/tests/cecil-tests/HandleSafety.KnownFailures.cs +++ b/tests/cecil-tests/HandleSafety.KnownFailures.cs @@ -8,9 +8,7 @@ public partial class HandleSafetyTest { "AudioUnit.AUScheduledAudioFileRegion.GetAudioFileRegion ()", "AudioUnit.SamplerInstrumentData.ToStruct ()", "CoreFoundation.CFDataBuffer.get_Handle ()", - "CoreFoundation.CFMessagePort.CopyDescriptionProxy (System.IntPtr)", "CoreFoundation.CFMessagePort.MessagePortCallback (System.IntPtr, System.Int32, System.IntPtr, System.IntPtr)", - "CoreFoundation.CFMessagePort.RetainProxy (System.IntPtr)", "CoreFoundation.CFMutableString.Transform (CoreFoundation.CFRange&, CoreFoundation.CFStringTransform, System.Boolean)", "CoreFoundation.CFMutableString.Transform (CoreFoundation.CFStringTransform, System.Boolean)", "CoreFoundation.CFSocketSignature..ctor (System.Net.Sockets.AddressFamily, System.Net.Sockets.SocketType, System.Net.Sockets.ProtocolType, CoreFoundation.CFSocketAddress)", diff --git a/tests/monotouch-test/CoreFoundation/CFMessagePortTest.cs b/tests/monotouch-test/CoreFoundation/CFMessagePortTest.cs new file mode 100644 index 000000000000..1e1713f317c0 --- /dev/null +++ b/tests/monotouch-test/CoreFoundation/CFMessagePortTest.cs @@ -0,0 +1,137 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System.Threading; + +namespace MonoTouchFixtures.CoreFoundation { + + [TestFixture] + [Preserve (AllMembers = true)] + public class CFMessagePortTest { + static string CreatePortName () + { + return $"com.microsoft.dotnet.macios.cfmessageport.{Guid.NewGuid ():N}"; + } + + [Test] + public void CreateAndInvalidate () + { + using var port = CFMessagePort.CreateLocalPort (null, (type, data) => new NSData ()); + + Assert.That (port, Is.Not.Null, "Port"); + Assert.That (port.IsRemote, Is.False, "IsRemote"); + Assert.That (port.IsValid, Is.True, "IsValid"); + Assert.That (port.Name, Is.Null, "Name"); + Assert.Throws (() => port.Name = null, "Set null name"); + var name = CreatePortName (); + Assert.That (port.TrySetName (name), Is.True, "TrySetName"); + Assert.That (port.Name, Is.EqualTo (name), "Changed name"); + + var firstCallbackCount = 0; + var secondCallbackCount = 0; + port.InvalidationCallback = () => firstCallbackCount++; + port.InvalidationCallback = () => secondCallbackCount++; + Assert.That (port.InvalidationCallback, Is.Not.Null, "InvalidationCallback"); + + port.Invalidate (); + + Assert.That (port.IsValid, Is.False, "IsValid after invalidation"); + Assert.That (firstCallbackCount, Is.Zero, "First callback"); + Assert.That (secondCallbackCount, Is.EqualTo (1), "Second callback"); + Assert.That (port.InvalidationCallback, Is.Null, "InvalidationCallback after invalidation"); + } + + [Test] + public void DuplicateLocalPortUsesOriginalCallback () + { + var name = CreatePortName (); + var callbackCount = 0; + var invalidationCallbackCount = 0; + var first = CFMessagePort.CreateLocalPort (name, (type, data) => { + Interlocked.Increment (ref callbackCount); + return new NSData (); + }); + using var second = CFMessagePort.CreateLocalPort (name, (type, data) => throw new InvalidOperationException ()); + using var remote = CFMessagePort.CreateRemotePort (null, name); + + Assert.That (first, Is.Not.Null, "First"); + Assert.That (second, Is.Not.Null, "Second"); + Assert.That (remote, Is.Not.Null, "Remote"); + Assert.That (second.Handle, Is.EqualTo (first.Handle), "Handle"); + + using var source = first.CreateRunLoopSource (); + second.InvalidationCallback = () => invalidationCallbackCount++; + var runLoop = CFRunLoop.Current; + runLoop.AddSource (source, CFRunLoop.ModeDefault); + first.Dispose (); + try { + var status = remote.SendRequest (1, null, 5, 5, CFRunLoop.ModeDefault, out var response); + response?.Dispose (); + Assert.That (status, Is.EqualTo (CFMessagePortSendRequestStatus.Success), "Status"); + Assert.That (callbackCount, Is.EqualTo (1), "Callback count"); + } finally { + second.Invalidate (); + runLoop.RemoveSource (source, CFRunLoop.ModeDefault); + } + Assert.That (invalidationCallbackCount, Is.EqualTo (1), "Invalidation callback count"); + } + + [Test] + public void SendRequest () + { + var name = CreatePortName (); + var requestBytes = new byte [] { 1, 2, 3 }; + var responseBytes = new byte [] { 4, 5, 6 }; + var callbackCount = 0; + var receivedType = 0; + byte [] receivedData = null; + using var local = CFMessagePort.CreateLocalPort (name, (type, data) => { + Interlocked.Increment (ref callbackCount); + receivedType = type; + receivedData = data.ToArray (); + return NSData.FromArray (responseBytes); + }); + using var remote = CFMessagePort.CreateRemotePort (null, name); + using var queue = new DispatchQueue ("CFMessagePortTest.SendRequest"); + using var request = NSData.FromArray (requestBytes); + + Assert.That (local, Is.Not.Null, "Local"); + Assert.That (remote, Is.Not.Null, "Remote"); + Assert.That (remote.IsRemote, Is.True, "IsRemote"); + Assert.That (remote.TrySetName (CreatePortName ()), Is.False, "TrySetName remote"); + + local.SetDispatchQueue (queue); + var status = remote.SendRequest (42, request, 5, 5, CFRunLoop.ModeDefault, out var response); + using (response) { + Assert.That (status, Is.EqualTo (CFMessagePortSendRequestStatus.Success), "Status"); + Assert.That (response, Is.Not.Null, "Response"); + Assert.That (response.ToArray (), Is.EqualTo (responseBytes), "Response data"); + Assert.That (TestRuntime.CFGetRetainCount (response.Handle), Is.EqualTo ((nint) 1), "Response retain count"); + } + Assert.That (callbackCount, Is.EqualTo (1), "Callback count"); + Assert.That (receivedType, Is.EqualTo (42), "Message identifier"); + Assert.That (receivedData, Is.EqualTo (requestBytes), "Request data"); + + var invalidationCallbackCount = 0; + remote.InvalidationCallback = () => invalidationCallbackCount++; + remote.Invalidate (); + Assert.That (invalidationCallbackCount, Is.EqualTo (1), "Remote invalidation callback count"); + status = remote.SendRequest (43, null, 0, 0, CFRunLoop.ModeDefault, out response); + Assert.That (status, Is.EqualTo (CFMessagePortSendRequestStatus.IsInvalid), "Invalid status"); + Assert.That (response, Is.Null, "Invalid response"); + local.Invalidate (); + } + + [Test] + public void CreateRunLoopSourceOwnership () + { + using var local = CFMessagePort.CreateLocalPort (null, (type, data) => new NSData ()); + using var source = local.CreateRunLoopSource (); + + Assert.That (source.Handle, Is.Not.EqualTo (NativeHandle.Zero), "Handle"); + Assert.That (TestRuntime.CFGetRetainCount (source.Handle), Is.EqualTo ((nint) 2), "Retain count"); + + local.Invalidate (); + } + } +} From 15fdb4e0c312f0b7ad29275b4f8e5ca648ca4523 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 2 Sep 2026 09:08:37 +0200 Subject: [PATCH 2/7] [CoreFoundation] Handle null CFMessagePort callback data Remove the null-forgiving operator at the unmanaged callback boundary and return no reply if Core Foundation unexpectedly supplies a null data object. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 99900f2c-d178-4e70-9068-c6c3005ef89a --- src/CoreFoundation/CFMessagePort.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/CoreFoundation/CFMessagePort.cs b/src/CoreFoundation/CFMessagePort.cs index 8d5f87d8e1ec..75d0a8bea6fb 100644 --- a/src/CoreFoundation/CFMessagePort.cs +++ b/src/CoreFoundation/CFMessagePort.cs @@ -273,7 +273,10 @@ static IntPtr MessagePortCallback (IntPtr local, int msgid, IntPtr data, IntPtr if (context is null) return IntPtr.Zero; - using (var managedData = Runtime.GetNSObject (data)!) { + using (var managedData = Runtime.GetNSObject (data)) { + if (managedData is null) + return IntPtr.Zero; + var result = context.Callback.Invoke (msgid, managedData); // System will release returned CFData result?.DangerousRetain (); From e7d9617de8c20da33a052d33899c35c94aee8e3e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 2 Sep 2026 10:50:19 +0000 Subject: [PATCH 3/7] [tests] Update expected app size files Applied from gist: https://gist.github.com/vs-mobiletools-engineering-service2/562b7395cffe3215c6d78e33f98dc628 --- .../UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt index 1eaafbf66fff..34d1b26a4bcc 100644 --- a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt +++ b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt @@ -1,9 +1,9 @@ -AppBundleSize: 331,621,659 bytes (323,849.3 KB = 316.3 MB) +AppBundleSize: 331,609,114 bytes (323,837.0 KB = 316.2 MB) # The following list of files and their sizes is just informational / for review, and isn't used in the test: Contents/Info.plist: - 750 bytes (0.7 KB = 0.0 MB) + 717 bytes (0.7 KB = 0.0 MB) Contents/MacOS/SizeTestApp: - 7,351,304 bytes (7,179.0 KB = 7.0 MB) + 7,350,568 bytes (7,178.3 KB = 7.0 MB) Contents/MonoBundle/_Microsoft.macOS.TypeMaps.dll: 2,560 bytes (2.5 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/_Microsoft.macOS.TypeMap.dll: @@ -31,7 +31,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Options.dll: Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Primitives.dll: 90,408 bytes (88.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.macOS.dll: - 74,466,304 bytes (72,721.0 KB = 71.0 MB) + 74,460,160 bytes (72,715.0 KB = 71.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.Core.dll: 1,337,168 bytes (1,305.8 KB = 1.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.dll: @@ -401,7 +401,7 @@ Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Options.dll: Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Primitives.dll: 83,240 bytes (81.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.macOS.dll: - 63,569,408 bytes (62,079.5 KB = 60.6 MB) + 63,563,776 bytes (62,074.0 KB = 60.6 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.Core.dll: 1,191,760 bytes (1,163.8 KB = 1.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.dll: From af5faa6e1c7c7f41f68cafc407f715b786413e57 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 2 Sep 2026 17:23:34 +0200 Subject: [PATCH 4/7] Update xtro --- .../api-annotations-dotnet/common-CoreFoundation.ignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/xtro-sharpie/api-annotations-dotnet/common-CoreFoundation.ignore b/tests/xtro-sharpie/api-annotations-dotnet/common-CoreFoundation.ignore index 524c003c656a..b57c4df73619 100644 --- a/tests/xtro-sharpie/api-annotations-dotnet/common-CoreFoundation.ignore +++ b/tests/xtro-sharpie/api-annotations-dotnet/common-CoreFoundation.ignore @@ -1,3 +1,7 @@ +# These CFMessagePort getters don't do anything useful for us. +!missing-pinvoke! CFMessagePortGetContext is not bound +!missing-pinvoke! CFMessagePortGetInvalidationCallBack is not bound + ## we already expose the NSURLFileProtection* constants !missing-field! kCFURLVolumeSupportsFileProtectionKey not bound From dc916b616979c11042468b0a11894d28ed84ea17 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 3 Sep 2026 04:16:52 +0000 Subject: [PATCH 5/7] [tests] Update expected app size files Applied from gist: https://gist.github.com/vs-mobiletools-engineering-service2/a96ada4aca0653623292ba1ebc25b981 --- tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt index 34d1b26a4bcc..f8771af77337 100644 --- a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt +++ b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt @@ -1,4 +1,4 @@ -AppBundleSize: 331,609,114 bytes (323,837.0 KB = 316.2 MB) +AppBundleSize: 331,619,866 bytes (323,847.5 KB = 316.3 MB) # The following list of files and their sizes is just informational / for review, and isn't used in the test: Contents/Info.plist: 717 bytes (0.7 KB = 0.0 MB) @@ -31,7 +31,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Options.dll: Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Primitives.dll: 90,408 bytes (88.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.macOS.dll: - 74,460,160 bytes (72,715.0 KB = 71.0 MB) + 74,465,792 bytes (72,720.5 KB = 71.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.Core.dll: 1,337,168 bytes (1,305.8 KB = 1.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.dll: @@ -401,7 +401,7 @@ Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Options.dll: Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Primitives.dll: 83,240 bytes (81.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.macOS.dll: - 63,563,776 bytes (62,074.0 KB = 60.6 MB) + 63,568,896 bytes (62,079.0 KB = 60.6 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.Core.dll: 1,191,760 bytes (1,163.8 KB = 1.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.dll: From cab09c7cc619fa2f06ce1e6fbcbda6c3e31de777 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Tue, 15 Sep 2026 16:11:47 +0200 Subject: [PATCH 6/7] [tests] Update expected sizes. --- .../expected/MacOSX-CoreCLR-R2R-size.txt | 404 +++++++++--------- 1 file changed, 201 insertions(+), 203 deletions(-) diff --git a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt index f8771af77337..4e8f79855dab 100644 --- a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt +++ b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt @@ -1,9 +1,9 @@ -AppBundleSize: 331,619,866 bytes (323,847.5 KB = 316.3 MB) +AppBundleSize: 329,665,921 bytes (321,939.4 KB = 314.4 MB) # The following list of files and their sizes is just informational / for review, and isn't used in the test: Contents/Info.plist: - 717 bytes (0.7 KB = 0.0 MB) + 745 bytes (0.7 KB = 0.0 MB) Contents/MacOS/SizeTestApp: - 7,350,568 bytes (7,178.3 KB = 7.0 MB) + 7,351,400 bytes (7,179.1 KB = 7.0 MB) Contents/MonoBundle/_Microsoft.macOS.TypeMaps.dll: 2,560 bytes (2.5 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/_Microsoft.macOS.TypeMap.dll: @@ -15,31 +15,31 @@ Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.CSharp.dll: Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Caching.Abstractions.dll: 81,192 bytes (79.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Configuration.Abstractions.dll: - 38,224 bytes (37.3 KB = 0.0 MB) + 38,184 bytes (37.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.DependencyInjection.Abstractions.dll: 156,968 bytes (153.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Diagnostics.Abstractions.dll: - 39,248 bytes (38.3 KB = 0.0 MB) + 39,208 bytes (38.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.FileProviders.Abstractions.dll: - 25,384 bytes (24.8 KB = 0.0 MB) + 25,424 bytes (24.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Hosting.Abstractions.dll: - 48,424 bytes (47.3 KB = 0.0 MB) + 48,976 bytes (47.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Logging.Abstractions.dll: 159,528 bytes (155.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Options.dll: - 224,040 bytes (218.8 KB = 0.2 MB) + 224,080 bytes (218.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Primitives.dll: 90,408 bytes (88.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.macOS.dll: - 74,465,792 bytes (72,720.5 KB = 71.0 MB) + 73,302,528 bytes (71,584.5 KB = 69.9 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.Core.dll: - 1,337,168 bytes (1,305.8 KB = 1.3 MB) + 1,337,128 bytes (1,305.8 KB = 1.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.dll: - 17,192 bytes (16.8 KB = 0.0 MB) + 17,232 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Win32.Primitives.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Win32.Registry.dll: - 33,576 bytes (32.8 KB = 0.0 MB) + 33,616 bytes (32.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/mscorlib.dll: 59,728 bytes (58.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/netstandard.dll: @@ -47,7 +47,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/netstandard.dll: Contents/MonoBundle/.xamarin/osx-arm64/SizeTestApp.dll: 8,192 bytes (8.0 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.AppContext.dll: - 15,144 bytes (14.8 KB = 0.0 MB) + 15,184 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Buffers.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Collections.Concurrent.dll: @@ -55,31 +55,31 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Collections.Concurrent.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Collections.dll: 323,880 bytes (316.3 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Collections.Immutable.dll: - 1,179,944 bytes (1,152.3 KB = 1.1 MB) + 1,176,912 bytes (1,149.3 KB = 1.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Collections.NonGeneric.dll: 103,208 bytes (100.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Collections.Specialized.dll: 104,232 bytes (101.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ComponentModel.Annotations.dll: - 253,264 bytes (247.3 KB = 0.2 MB) + 254,800 bytes (248.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ComponentModel.DataAnnotations.dll: - 16,680 bytes (16.3 KB = 0.0 MB) + 16,720 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ComponentModel.dll: - 17,232 bytes (16.8 KB = 0.0 MB) + 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ComponentModel.EventBasedAsync.dll: - 38,696 bytes (37.8 KB = 0.0 MB) + 38,736 bytes (37.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ComponentModel.Primitives.dll: - 78,160 bytes (76.3 KB = 0.1 MB) + 78,120 bytes (76.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ComponentModel.TypeConverter.dll: - 864,552 bytes (844.3 KB = 0.8 MB) + 865,104 bytes (844.8 KB = 0.8 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Configuration.dll: - 19,240 bytes (18.8 KB = 0.0 MB) + 19,280 bytes (18.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Console.dll: - 224,080 bytes (218.8 KB = 0.2 MB) + 224,040 bytes (218.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Core.dll: - 23,376 bytes (22.8 KB = 0.0 MB) + 23,336 bytes (22.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Data.Common.dll: - 3,178,280 bytes (3,103.8 KB = 3.0 MB) + 3,177,768 bytes (3,103.3 KB = 3.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Data.DataSetExtensions.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Data.dll: @@ -89,7 +89,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.Contracts.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.Debug.dll: 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.DiagnosticSource.dll: - 569,128 bytes (555.8 KB = 0.5 MB) + 568,656 bytes (555.3 KB = 0.5 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.FileVersionInfo.dll: 45,864 bytes (44.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.Process.dll: @@ -97,23 +97,23 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.Process.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.StackTrace.dll: 29,992 bytes (29.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.TextWriterTraceListener.dll: - 64,848 bytes (63.3 KB = 0.1 MB) + 64,808 bytes (63.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.Tools.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.TraceSource.dll: 150,312 bytes (146.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Diagnostics.Tracing.dll: - 16,168 bytes (15.8 KB = 0.0 MB) + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.dll: - 50,472 bytes (49.3 KB = 0.0 MB) + 50,512 bytes (49.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Drawing.dll: 20,264 bytes (19.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Drawing.Primitives.dll: - 126,248 bytes (123.3 KB = 0.1 MB) + 126,288 bytes (123.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Dynamic.Runtime.dll: - 16,168 bytes (15.8 KB = 0.0 MB) + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Formats.Asn1.dll: - 276,304 bytes (269.8 KB = 0.3 MB) + 277,800 bytes (271.3 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Formats.Tar.dll: 370,984 bytes (362.3 KB = 0.4 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Globalization.Calendars.dll: @@ -123,9 +123,9 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Globalization.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Globalization.Extensions.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.Compression.Brotli.dll: - 82,728 bytes (80.8 KB = 0.1 MB) + 81,192 bytes (79.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.Compression.dll: - 668,456 bytes (652.8 KB = 0.6 MB) + 667,432 bytes (651.8 KB = 0.6 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.Compression.FileSystem.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.Compression.ZipFile.dll: @@ -135,21 +135,21 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.IO.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.IO.FileSystem.AccessControl.dll: 32,592 bytes (31.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.FileSystem.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.FileSystem.DriveInfo.dll: - 87,848 bytes (85.8 KB = 0.1 MB) + 87,888 bytes (85.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.FileSystem.Primitives.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.FileSystem.Watcher.dll: 120,616 bytes (117.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.IsolatedStorage.dll: - 83,280 bytes (81.3 KB = 0.1 MB) + 83,240 bytes (81.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.MemoryMappedFiles.dll: 93,480 bytes (91.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.Pipelines.dll: - 209,704 bytes (204.8 KB = 0.2 MB) + 209,744 bytes (204.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.Pipes.AccessControl.dll: - 23,848 bytes (23.3 KB = 0.0 MB) + 23,888 bytes (23.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.Pipes.dll: 146,728 bytes (143.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.IO.UnmanagedMemoryStream.dll: @@ -157,43 +157,43 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.IO.UnmanagedMemoryStream.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Linq.AsyncEnumerable.dll: 1,641,808 bytes (1,603.3 KB = 1.6 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Linq.dll: - 861,008 bytes (840.8 KB = 0.8 MB) + 862,032 bytes (841.8 KB = 0.8 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Linq.Expressions.dll: - 4,861,736 bytes (4,747.8 KB = 4.6 MB) + 4,820,776 bytes (4,707.8 KB = 4.6 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Linq.Parallel.dll: 1,009,960 bytes (986.3 KB = 1.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Linq.Queryable.dll: - 222,504 bytes (217.3 KB = 0.2 MB) + 222,544 bytes (217.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Memory.dll: - 176,424 bytes (172.3 KB = 0.2 MB) + 176,464 bytes (172.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.dll: - 17,232 bytes (16.8 KB = 0.0 MB) + 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Http.dll: - 1,909,032 bytes (1,864.3 KB = 1.8 MB) + 1,910,056 bytes (1,865.3 KB = 1.8 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Http.Json.dll: - 127,824 bytes (124.8 KB = 0.1 MB) + 127,784 bytes (124.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.HttpListener.dll: 322,344 bytes (314.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Mail.dll: - 530,728 bytes (518.3 KB = 0.5 MB) + 530,768 bytes (518.3 KB = 0.5 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.NameResolution.dll: - 273,192 bytes (266.8 KB = 0.3 MB) + 273,232 bytes (266.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.NetworkInformation.dll: - 151,336 bytes (147.8 KB = 0.1 MB) + 151,376 bytes (147.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Ping.dll: 97,576 bytes (95.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Primitives.dll: - 248,616 bytes (242.8 KB = 0.2 MB) + 248,656 bytes (242.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Quic.dll: - 375,592 bytes (366.8 KB = 0.4 MB) + 376,104 bytes (367.3 KB = 0.4 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Requests.dll: 408,400 bytes (398.8 KB = 0.4 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Security.dll: - 889,128 bytes (868.3 KB = 0.8 MB) + 890,152 bytes (869.3 KB = 0.8 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.ServerSentEvents.dll: 79,144 bytes (77.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.ServicePoint.dll: - 15,184 bytes (14.8 KB = 0.0 MB) + 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.Sockets.dll: 702,760 bytes (686.3 KB = 0.7 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.WebClient.dll: @@ -201,7 +201,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Net.WebClient.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Net.WebHeaderCollection.dll: 60,200 bytes (58.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.WebProxy.dll: - 36,136 bytes (35.3 KB = 0.0 MB) + 36,176 bytes (35.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.WebSockets.Client.dll: 98,088 bytes (95.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Net.WebSockets.dll: @@ -211,67 +211,67 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Numerics.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Numerics.Vectors.dll: 16,168 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ObjectModel.dll: - 76,624 bytes (74.8 KB = 0.1 MB) + 76,584 bytes (74.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Private.CoreLib.dll: - 18,983,720 bytes (18,538.8 KB = 18.1 MB) + 18,957,648 bytes (18,513.3 KB = 18.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Private.DataContractSerialization.dll: 2,352,424 bytes (2,297.3 KB = 2.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Private.Uri.dll: 259,368 bytes (253.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Private.Xml.dll: - 8,694,056 bytes (8,490.3 KB = 8.3 MB) + 8,694,096 bytes (8,490.3 KB = 8.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Private.Xml.Linq.dll: - 414,032 bytes (404.3 KB = 0.4 MB) + 413,992 bytes (404.3 KB = 0.4 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.DispatchProxy.dll: - 72,488 bytes (70.8 KB = 0.1 MB) + 72,528 bytes (70.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.dll: - 16,208 bytes (15.8 KB = 0.0 MB) + 16,168 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.Emit.dll: - 341,800 bytes (333.8 KB = 0.3 MB) + 341,840 bytes (333.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.Emit.ILGeneration.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.Emit.Lightweight.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.Extensions.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.Metadata.dll: - 1,276,712 bytes (1,246.8 KB = 1.2 MB) + 1,275,688 bytes (1,245.8 KB = 1.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.Primitives.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Reflection.TypeExtensions.dll: 33,576 bytes (32.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Resources.Reader.dll: - 15,184 bytes (14.8 KB = 0.0 MB) + 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Resources.ResourceManager.dll: 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Resources.Writer.dll: - 45,392 bytes (44.3 KB = 0.0 MB) + 45,352 bytes (44.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.CompilerServices.Unsafe.dll: 15,184 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.CompilerServices.VisualC.dll: 18,728 bytes (18.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.dll: - 45,864 bytes (44.8 KB = 0.0 MB) + 45,904 bytes (44.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Extensions.dll: - 17,744 bytes (17.3 KB = 0.0 MB) + 17,704 bytes (17.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Handles.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.InteropServices.dll: - 110,376 bytes (107.8 KB = 0.1 MB) + 110,416 bytes (107.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.InteropServices.JavaScript.dll: 37,160 bytes (36.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.InteropServices.RuntimeInformation.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Intrinsics.dll: - 18,768 bytes (18.3 KB = 0.0 MB) + 18,728 bytes (18.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Loader.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Numerics.dll: - 564,560 bytes (551.3 KB = 0.5 MB) + 570,192 bytes (556.8 KB = 0.5 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Serialization.dll: 17,232 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Serialization.Formatters.dll: - 126,800 bytes (123.8 KB = 0.1 MB) + 126,760 bytes (123.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Serialization.Json.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Serialization.Primitives.dll: @@ -281,15 +281,15 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Runtime.Serialization.Xml.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Security.AccessControl.dll: 55,080 bytes (53.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Claims.dll: - 101,200 bytes (98.8 KB = 0.1 MB) + 101,160 bytes (98.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.Algorithms.dll: 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.Cng.dll: 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.Csp.dll: - 16,168 bytes (15.8 KB = 0.0 MB) + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.dll: - 2,472,744 bytes (2,414.8 KB = 2.4 MB) + 2,534,736 bytes (2,475.3 KB = 2.4 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.Encoding.dll: 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.OpenSsl.dll: @@ -299,31 +299,31 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.Primitives.d Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Cryptography.X509Certificates.dll: 17,232 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.dll: - 18,256 bytes (17.8 KB = 0.0 MB) + 18,216 bytes (17.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Principal.dll: - 15,144 bytes (14.8 KB = 0.0 MB) + 15,184 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.Principal.Windows.dll: - 37,672 bytes (36.8 KB = 0.0 MB) + 37,712 bytes (36.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Security.SecureString.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ServiceModel.Web.dll: - 16,680 bytes (16.3 KB = 0.0 MB) + 16,720 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ServiceProcess.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Text.Encoding.CodePages.dll: - 864,552 bytes (844.3 KB = 0.8 MB) + 864,592 bytes (844.3 KB = 0.8 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Text.Encoding.dll: 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Text.Encoding.Extensions.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Text.Encodings.Web.dll: - 122,664 bytes (119.8 KB = 0.1 MB) + 122,704 bytes (119.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Text.Json.dll: - 2,753,360 bytes (2,688.8 KB = 2.6 MB) + 2,783,056 bytes (2,717.8 KB = 2.7 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Text.RegularExpressions.dll: - 1,187,112 bytes (1,159.3 KB = 1.1 MB) + 1,185,616 bytes (1,157.8 KB = 1.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.AccessControl.dll: - 33,576 bytes (32.8 KB = 0.0 MB) + 33,616 bytes (32.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Channels.dll: 165,160 bytes (161.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.dll: @@ -333,7 +333,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Overlapped.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Tasks.Dataflow.dll: 526,632 bytes (514.3 KB = 0.5 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Tasks.dll: - 16,720 bytes (16.3 KB = 0.0 MB) + 16,680 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Tasks.Extensions.dll: 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Tasks.Parallel.dll: @@ -343,19 +343,19 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Thread.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.ThreadPool.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Threading.Timer.dll: - 15,184 bytes (14.8 KB = 0.0 MB) + 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Transactions.dll: - 16,680 bytes (16.3 KB = 0.0 MB) + 16,720 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Transactions.Local.dll: - 389,968 bytes (380.8 KB = 0.4 MB) + 389,928 bytes (380.8 KB = 0.4 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.ValueTuple.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Web.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Web.HttpUtility.dll: 56,616 bytes (55.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Windows.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.dll: 23,336 bytes (22.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.Linq.dll: @@ -365,35 +365,35 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.ReaderWriter.dll: Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.Serialization.dll: 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.XDocument.dll: - 16,208 bytes (15.8 KB = 0.0 MB) + 16,168 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.XmlDocument.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.XmlSerializer.dll: - 17,744 bytes (17.3 KB = 0.0 MB) + 17,704 bytes (17.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.XPath.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.XPath.XDocument.dll: - 17,232 bytes (16.8 KB = 0.0 MB) + 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/WindowsBase.dll: - 16,168 bytes (15.8 KB = 0.0 MB) + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/_Microsoft.macOS.TypeMap.dll: 6,893,056 bytes (6,731.5 KB = 6.6 MB) Contents/MonoBundle/.xamarin/osx-x64/_SizeTestApp.TypeMap.dll: 4,608 bytes (4.5 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.CSharp.dll: - 801,576 bytes (782.8 KB = 0.8 MB) + 802,088 bytes (783.3 KB = 0.8 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Caching.Abstractions.dll: - 76,584 bytes (74.8 KB = 0.1 MB) + 76,624 bytes (74.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Configuration.Abstractions.dll: 36,648 bytes (35.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll: 140,584 bytes (137.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Diagnostics.Abstractions.dll: - 37,200 bytes (36.3 KB = 0.0 MB) + 37,160 bytes (36.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.FileProviders.Abstractions.dll: 24,872 bytes (24.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Hosting.Abstractions.dll: - 46,928 bytes (45.8 KB = 0.0 MB) + 46,888 bytes (45.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Logging.Abstractions.dll: 146,216 bytes (142.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Options.dll: @@ -401,9 +401,9 @@ Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Options.dll: Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Primitives.dll: 83,240 bytes (81.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.macOS.dll: - 63,568,896 bytes (62,079.0 KB = 60.6 MB) + 62,663,680 bytes (61,195.0 KB = 59.8 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.Core.dll: - 1,191,760 bytes (1,163.8 KB = 1.1 MB) + 1,191,720 bytes (1,163.8 KB = 1.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.dll: 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Win32.Primitives.dll: @@ -417,53 +417,53 @@ Contents/MonoBundle/.xamarin/osx-x64/netstandard.dll: Contents/MonoBundle/.xamarin/osx-x64/SizeTestApp.dll: 7,680 bytes (7.5 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.AppContext.dll: - 15,184 bytes (14.8 KB = 0.0 MB) -Contents/MonoBundle/.xamarin/osx-x64/System.Buffers.dll: 15,144 bytes (14.8 KB = 0.0 MB) +Contents/MonoBundle/.xamarin/osx-x64/System.Buffers.dll: + 15,184 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Collections.Concurrent.dll: - 132,392 bytes (129.3 KB = 0.1 MB) + 132,432 bytes (129.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Collections.dll: - 288,552 bytes (281.8 KB = 0.3 MB) + 288,592 bytes (281.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Collections.Immutable.dll: - 1,055,016 bytes (1,030.3 KB = 1.0 MB) + 1,051,944 bytes (1,027.3 KB = 1.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Collections.NonGeneric.dll: - 92,496 bytes (90.3 KB = 0.1 MB) + 92,456 bytes (90.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Collections.Specialized.dll: - 91,984 bytes (89.8 KB = 0.1 MB) + 91,944 bytes (89.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ComponentModel.Annotations.dll: - 229,160 bytes (223.8 KB = 0.2 MB) + 230,224 bytes (224.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ComponentModel.DataAnnotations.dll: 16,680 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ComponentModel.dll: 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ComponentModel.EventBasedAsync.dll: - 36,136 bytes (35.3 KB = 0.0 MB) + 36,176 bytes (35.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ComponentModel.Primitives.dll: 70,440 bytes (68.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ComponentModel.TypeConverter.dll: - 764,200 bytes (746.3 KB = 0.7 MB) + 764,712 bytes (746.8 KB = 0.7 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Configuration.dll: - 19,280 bytes (18.8 KB = 0.0 MB) + 19,240 bytes (18.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Console.dll: 198,952 bytes (194.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Core.dll: - 23,336 bytes (22.8 KB = 0.0 MB) + 23,376 bytes (22.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Data.Common.dll: 2,802,472 bytes (2,736.8 KB = 2.7 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Data.DataSetExtensions.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Data.dll: - 25,424 bytes (24.8 KB = 0.0 MB) + 25,384 bytes (24.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.Contracts.dll: - 16,168 bytes (15.8 KB = 0.0 MB) + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.Debug.dll: 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.DiagnosticSource.dll: - 515,920 bytes (503.8 KB = 0.5 MB) + 515,880 bytes (503.8 KB = 0.5 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.FileVersionInfo.dll: 43,304 bytes (42.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.Process.dll: - 353,064 bytes (344.8 KB = 0.3 MB) + 353,104 bytes (344.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.StackTrace.dll: 29,992 bytes (29.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.TextWriterTraceListener.dll: @@ -477,15 +477,15 @@ Contents/MonoBundle/.xamarin/osx-x64/System.Diagnostics.Tracing.dll: Contents/MonoBundle/.xamarin/osx-x64/System.dll: 50,472 bytes (49.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Drawing.dll: - 20,304 bytes (19.8 KB = 0.0 MB) + 20,264 bytes (19.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Drawing.Primitives.dll: 123,176 bytes (120.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Dynamic.Runtime.dll: 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Formats.Asn1.dll: - 250,664 bytes (244.8 KB = 0.2 MB) + 252,240 bytes (246.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Formats.Tar.dll: - 331,560 bytes (323.8 KB = 0.3 MB) + 331,600 bytes (323.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Globalization.Calendars.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Globalization.dll: @@ -493,21 +493,21 @@ Contents/MonoBundle/.xamarin/osx-x64/System.Globalization.dll: Contents/MonoBundle/.xamarin/osx-x64/System.Globalization.Extensions.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.Compression.Brotli.dll: - 73,512 bytes (71.8 KB = 0.1 MB) + 72,488 bytes (70.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.Compression.dll: - 592,208 bytes (578.3 KB = 0.6 MB) + 591,696 bytes (577.8 KB = 0.6 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.Compression.FileSystem.dll: - 15,184 bytes (14.8 KB = 0.0 MB) + 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.Compression.ZipFile.dll: - 123,176 bytes (120.3 KB = 0.1 MB) + 123,216 bytes (120.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.FileSystem.AccessControl.dll: - 32,552 bytes (31.8 KB = 0.0 MB) + 32,592 bytes (31.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.FileSystem.dll: 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.FileSystem.DriveInfo.dll: - 79,696 bytes (77.8 KB = 0.1 MB) + 79,656 bytes (77.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.FileSystem.Primitives.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.FileSystem.Watcher.dll: @@ -517,49 +517,49 @@ Contents/MonoBundle/.xamarin/osx-x64/System.IO.IsolatedStorage.dll: Contents/MonoBundle/.xamarin/osx-x64/System.IO.MemoryMappedFiles.dll: 82,768 bytes (80.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.Pipelines.dll: - 194,856 bytes (190.3 KB = 0.2 MB) + 194,896 bytes (190.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.Pipes.AccessControl.dll: - 23,848 bytes (23.3 KB = 0.0 MB) + 23,888 bytes (23.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.Pipes.dll: - 129,320 bytes (126.3 KB = 0.1 MB) + 129,360 bytes (126.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.IO.UnmanagedMemoryStream.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Linq.AsyncEnumerable.dll: 1,513,768 bytes (1,478.3 KB = 1.4 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Linq.dll: - 763,216 bytes (745.3 KB = 0.7 MB) + 763,688 bytes (745.8 KB = 0.7 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Linq.Expressions.dll: - 3,970,856 bytes (3,877.8 KB = 3.8 MB) + 3,965,264 bytes (3,872.3 KB = 3.8 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Linq.Parallel.dll: 898,344 bytes (877.3 KB = 0.9 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Linq.Queryable.dll: - 188,712 bytes (184.3 KB = 0.2 MB) + 188,752 bytes (184.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Memory.dll: 166,696 bytes (162.8 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.dll: 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Http.dll: - 1,719,632 bytes (1,679.3 KB = 1.6 MB) + 1,720,144 bytes (1,679.8 KB = 1.6 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Http.Json.dll: 120,104 bytes (117.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.HttpListener.dll: - 289,064 bytes (282.3 KB = 0.3 MB) + 289,104 bytes (282.3 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Mail.dll: 474,408 bytes (463.3 KB = 0.5 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.NameResolution.dll: 252,240 bytes (246.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.NetworkInformation.dll: - 134,440 bytes (131.3 KB = 0.1 MB) + 134,480 bytes (131.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Ping.dll: - 88,400 bytes (86.3 KB = 0.1 MB) + 88,360 bytes (86.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Primitives.dll: - 223,016 bytes (217.8 KB = 0.2 MB) + 223,568 bytes (218.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Quic.dll: 340,776 bytes (332.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Requests.dll: 362,320 bytes (353.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.Security.dll: - 786,216 bytes (767.8 KB = 0.7 MB) + 787,240 bytes (768.8 KB = 0.8 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.ServerSentEvents.dll: 74,536 bytes (72.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.ServicePoint.dll: @@ -569,35 +569,35 @@ Contents/MonoBundle/.xamarin/osx-x64/System.Net.Sockets.dll: Contents/MonoBundle/.xamarin/osx-x64/System.Net.WebClient.dll: 157,992 bytes (154.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.WebHeaderCollection.dll: - 54,608 bytes (53.3 KB = 0.1 MB) + 54,568 bytes (53.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.WebProxy.dll: - 34,128 bytes (33.3 KB = 0.0 MB) + 34,088 bytes (33.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.WebSockets.Client.dll: 90,408 bytes (88.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Net.WebSockets.dll: - 237,864 bytes (232.3 KB = 0.2 MB) + 237,904 bytes (232.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Numerics.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Numerics.Vectors.dll: 16,168 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ObjectModel.dll: - 68,944 bytes (67.3 KB = 0.1 MB) + 68,904 bytes (67.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Private.CoreLib.dll: - 17,670,440 bytes (17,256.3 KB = 16.9 MB) + 17,651,536 bytes (17,237.8 KB = 16.8 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Private.DataContractSerialization.dll: 2,060,584 bytes (2,012.3 KB = 2.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Private.Uri.dll: - 239,952 bytes (234.3 KB = 0.2 MB) + 239,912 bytes (234.3 KB = 0.2 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Private.Xml.dll: - 7,713,104 bytes (7,532.3 KB = 7.4 MB) + 7,713,064 bytes (7,532.3 KB = 7.4 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Private.Xml.Linq.dll: 366,888 bytes (358.3 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.DispatchProxy.dll: - 67,408 bytes (65.8 KB = 0.1 MB) + 67,368 bytes (65.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.dll: - 16,168 bytes (15.8 KB = 0.0 MB) + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.Emit.dll: - 304,976 bytes (297.8 KB = 0.3 MB) + 304,936 bytes (297.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.Emit.ILGeneration.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.Emit.Lightweight.dll: @@ -605,13 +605,13 @@ Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.Emit.Lightweight.dll: Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.Extensions.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.Metadata.dll: - 1,155,408 bytes (1,128.3 KB = 1.1 MB) + 1,154,896 bytes (1,127.8 KB = 1.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.Primitives.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Reflection.TypeExtensions.dll: 31,528 bytes (30.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Resources.Reader.dll: - 15,144 bytes (14.8 KB = 0.0 MB) + 15,184 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Resources.ResourceManager.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Resources.Writer.dll: @@ -623,13 +623,13 @@ Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.CompilerServices.VisualC.dll Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.dll: 45,904 bytes (44.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Extensions.dll: - 17,744 bytes (17.3 KB = 0.0 MB) + 17,704 bytes (17.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Handles.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.InteropServices.dll: - 102,184 bytes (99.8 KB = 0.1 MB) + 102,224 bytes (99.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.InteropServices.JavaScript.dll: - 37,160 bytes (36.3 KB = 0.0 MB) + 37,200 bytes (36.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.InteropServices.RuntimeInformation.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Intrinsics.dll: @@ -637,113 +637,113 @@ Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Intrinsics.dll: Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Loader.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Numerics.dll: - 524,072 bytes (511.8 KB = 0.5 MB) + 530,216 bytes (517.8 KB = 0.5 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Serialization.dll: - 17,232 bytes (16.8 KB = 0.0 MB) + 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Serialization.Formatters.dll: 115,496 bytes (112.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Serialization.Json.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Serialization.Primitives.dll: - 28,496 bytes (27.8 KB = 0.0 MB) + 28,456 bytes (27.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Runtime.Serialization.Xml.dll: - 16,720 bytes (16.3 KB = 0.0 MB) + 16,680 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.AccessControl.dll: - 55,080 bytes (53.8 KB = 0.1 MB) + 55,120 bytes (53.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Claims.dll: - 92,456 bytes (90.3 KB = 0.1 MB) + 92,496 bytes (90.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.Algorithms.dll: - 17,232 bytes (16.8 KB = 0.0 MB) + 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.Cng.dll: - 16,208 bytes (15.8 KB = 0.0 MB) -Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.Csp.dll: 16,168 bytes (15.8 KB = 0.0 MB) +Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.Csp.dll: + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.dll: - 2,177,832 bytes (2,126.8 KB = 2.1 MB) + 2,235,688 bytes (2,183.3 KB = 2.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.Encoding.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.OpenSsl.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.Primitives.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Cryptography.X509Certificates.dll: - 17,232 bytes (16.8 KB = 0.0 MB) + 17,192 bytes (16.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.dll: - 18,256 bytes (17.8 KB = 0.0 MB) + 18,216 bytes (17.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Principal.dll: - 15,184 bytes (14.8 KB = 0.0 MB) + 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.Principal.Windows.dll: 37,672 bytes (36.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Security.SecureString.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ServiceModel.Web.dll: 16,720 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ServiceProcess.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Text.Encoding.CodePages.dll: 849,704 bytes (829.8 KB = 0.8 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Text.Encoding.dll: - 15,656 bytes (15.3 KB = 0.0 MB) -Contents/MonoBundle/.xamarin/osx-x64/System.Text.Encoding.Extensions.dll: 15,696 bytes (15.3 KB = 0.0 MB) +Contents/MonoBundle/.xamarin/osx-x64/System.Text.Encoding.Extensions.dll: + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Text.Encodings.Web.dll: 114,472 bytes (111.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Text.Json.dll: - 2,473,768 bytes (2,415.8 KB = 2.4 MB) + 2,501,416 bytes (2,442.8 KB = 2.4 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Text.RegularExpressions.dll: - 1,074,472 bytes (1,049.3 KB = 1.0 MB) + 1,073,448 bytes (1,048.3 KB = 1.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.AccessControl.dll: 33,064 bytes (32.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Channels.dll: - 150,824 bytes (147.3 KB = 0.1 MB) + 151,336 bytes (147.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.dll: 74,576 bytes (72.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Overlapped.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Tasks.Dataflow.dll: - 471,888 bytes (460.8 KB = 0.5 MB) + 471,848 bytes (460.8 KB = 0.4 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Tasks.dll: - 16,720 bytes (16.3 KB = 0.0 MB) + 16,680 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Tasks.Extensions.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Tasks.Parallel.dll: 124,200 bytes (121.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Thread.dll: - 15,696 bytes (15.3 KB = 0.0 MB) + 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.ThreadPool.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Threading.Timer.dll: 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Transactions.dll: - 16,720 bytes (16.3 KB = 0.0 MB) + 16,680 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Transactions.Local.dll: - 350,032 bytes (341.8 KB = 0.3 MB) + 349,992 bytes (341.8 KB = 0.3 MB) Contents/MonoBundle/.xamarin/osx-x64/System.ValueTuple.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Web.dll: - 15,184 bytes (14.8 KB = 0.0 MB) + 15,144 bytes (14.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Web.HttpUtility.dll: 53,032 bytes (51.8 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Windows.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.dll: - 23,376 bytes (22.8 KB = 0.0 MB) + 23,336 bytes (22.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.Linq.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.ReaderWriter.dll: - 21,800 bytes (21.3 KB = 0.0 MB) + 21,840 bytes (21.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.Serialization.dll: - 16,168 bytes (15.8 KB = 0.0 MB) + 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.XDocument.dll: 16,168 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.XmlDocument.dll: - 15,656 bytes (15.3 KB = 0.0 MB) + 15,696 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.XmlSerializer.dll: - 17,704 bytes (17.3 KB = 0.0 MB) + 17,744 bytes (17.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.XPath.dll: 15,656 bytes (15.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/System.Xml.XPath.XDocument.dll: - 16,680 bytes (16.3 KB = 0.0 MB) + 16,720 bytes (16.3 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/WindowsBase.dll: 16,168 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/libclrgc.dylib: @@ -751,17 +751,17 @@ Contents/MonoBundle/libclrgc.dylib: Contents/MonoBundle/libclrgcexp.dylib: 1,830,656 bytes (1,787.8 KB = 1.7 MB) Contents/MonoBundle/libclrjit.dylib: - 5,981,248 bytes (5,841.1 KB = 5.7 MB) + 6,031,840 bytes (5,890.5 KB = 5.8 MB) Contents/MonoBundle/libcoreclr.dylib: - 11,185,600 bytes (10,923.4 KB = 10.7 MB) + 11,152,496 bytes (10,891.1 KB = 10.6 MB) Contents/MonoBundle/libhostfxr.dylib: 861,280 bytes (841.1 KB = 0.8 MB) Contents/MonoBundle/libhostpolicy.dylib: 817,680 bytes (798.5 KB = 0.8 MB) Contents/MonoBundle/libmscordaccore.dylib: - 3,744,848 bytes (3,657.1 KB = 3.6 MB) + 3,744,784 bytes (3,657.0 KB = 3.6 MB) Contents/MonoBundle/libmscordbi.dylib: - 3,030,720 bytes (2,959.7 KB = 2.9 MB) + 3,030,656 bytes (2,959.6 KB = 2.9 MB) Contents/MonoBundle/libSystem.Globalization.Native.dylib: 302,528 bytes (295.4 KB = 0.3 MB) Contents/MonoBundle/libSystem.IO.Compression.Native.dylib: @@ -771,8 +771,6 @@ Contents/MonoBundle/libSystem.Native.dylib: Contents/MonoBundle/libSystem.Net.Security.Native.dylib: 152,128 bytes (148.6 KB = 0.1 MB) Contents/MonoBundle/libSystem.Security.Cryptography.Native.Apple.dylib: - 510,064 bytes (498.1 KB = 0.5 MB) -Contents/MonoBundle/runtimeconfig.bin: - 1,445 bytes (1.4 KB = 0.0 MB) + 511,248 bytes (499.3 KB = 0.5 MB) Contents/PkgInfo: 8 bytes (0.0 KB = 0.0 MB) From 05d710bf4f130dd943cdbbbc02bac158bc63d187 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 16 Sep 2026 13:47:02 +0200 Subject: [PATCH 7/7] [tests] Update expected sizes. --- .../UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt index 4e8f79855dab..0c9db5d7c35d 100644 --- a/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt +++ b/tests/dotnet/UnitTests/expected/MacOSX-CoreCLR-R2R-size.txt @@ -1,13 +1,13 @@ -AppBundleSize: 329,665,921 bytes (321,939.4 KB = 314.4 MB) +AppBundleSize: 333,102,819 bytes (325,295.7 KB = 317.7 MB) # The following list of files and their sizes is just informational / for review, and isn't used in the test: Contents/Info.plist: - 745 bytes (0.7 KB = 0.0 MB) + 747 bytes (0.7 KB = 0.0 MB) Contents/MacOS/SizeTestApp: - 7,351,400 bytes (7,179.1 KB = 7.0 MB) + 7,439,304 bytes (7,264.9 KB = 7.1 MB) Contents/MonoBundle/_Microsoft.macOS.TypeMaps.dll: 2,560 bytes (2.5 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/_Microsoft.macOS.TypeMap.dll: - 7,268,864 bytes (7,098.5 KB = 6.9 MB) + 7,460,352 bytes (7,285.5 KB = 7.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/_SizeTestApp.TypeMap.dll: 5,120 bytes (5.0 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.CSharp.dll: @@ -31,7 +31,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Options.dll: Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.Extensions.Primitives.dll: 90,408 bytes (88.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.macOS.dll: - 73,302,528 bytes (71,584.5 KB = 69.9 MB) + 74,889,216 bytes (73,134.0 KB = 71.4 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.Core.dll: 1,337,128 bytes (1,305.8 KB = 1.3 MB) Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.dll: @@ -377,7 +377,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.XPath.XDocument.dll: Contents/MonoBundle/.xamarin/osx-arm64/WindowsBase.dll: 16,208 bytes (15.8 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/_Microsoft.macOS.TypeMap.dll: - 6,893,056 bytes (6,731.5 KB = 6.6 MB) + 7,074,304 bytes (6,908.5 KB = 6.7 MB) Contents/MonoBundle/.xamarin/osx-x64/_SizeTestApp.TypeMap.dll: 4,608 bytes (4.5 KB = 0.0 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.CSharp.dll: @@ -401,7 +401,7 @@ Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Options.dll: Contents/MonoBundle/.xamarin/osx-x64/Microsoft.Extensions.Primitives.dll: 83,240 bytes (81.3 KB = 0.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.macOS.dll: - 62,663,680 bytes (61,195.0 KB = 59.8 MB) + 64,053,248 bytes (62,552.0 KB = 61.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.Core.dll: 1,191,720 bytes (1,163.8 KB = 1.1 MB) Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.dll: