Skip to content

🤖 Merge 'main' => 'xcode26.5'#25636

Draft
github-actions[bot] wants to merge 158 commits into
xcode26.5from
merge/main-to-xcode26.5-20260603-a89db1654955e2a1
Draft

🤖 Merge 'main' => 'xcode26.5'#25636
github-actions[bot] wants to merge 158 commits into
xcode26.5from
merge/main-to-xcode26.5-20260603-a89db1654955e2a1

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Automated merge of main into xcode26.5.

Created by the code-radiator workflow.

Merge Details

This was a fast-forward merge with no conflicts. All changes from main were cleanly applied.

Generated by Code Radiator · sonnet45 2M ·

dotnet-maestro Bot and others added 30 commits May 5, 2026 08:16
This pull request updates the following dependencies

## From https://github.com/dotnet/xharness

- **Subscription**: [02e03784-16b3-4ced-b02a-3715797fc7da](https://maestro.dot.net/subscriptions?search=02e03784-16b3-4ced-b02a-3715797fc7da)
- **Build**: [20260430.4](https://dev.azure.com/dnceng/internal/_build/results?buildId=2964906) ([312724](https://maestro.dot.net/channel/2/github:dotnet:xharness/build/312724))
- **Date Produced**: May 1, 2026 7:05:11 AM UTC
- **Commit**: [92962e5c46ac08a66ded4c5696209cc60f1a232f](dotnet/xharness@92962e5)
- **Branch**: [main](https://github.com/dotnet/xharness/tree/main)

- **Dependency Updates**:
  - From [11.0.0-prerelease.26224.1 to 11.0.0-prerelease.26230.4][2]
     - Microsoft.DotNet.XHarness.iOS.Shared

[2]: dotnet/xharness@888ef3e...92962e5
…y. (#25307)

It's not necessary to run it on every push to main (which will usually fail if the PR branch was modified, which we always do).
The activation job in the `macios-reviewer` workflow was missing `pull-requests: write` permission, causing the 'Add eyes reaction for immediate feedback' step to fail with a 403 when triggered by `/review` on a PR comment.

This was a known gh-aw bug ([github/gh-aw#28767](github/gh-aw#28767)), fixed in v0.71.2 via [github/gh-aw#28854](github/gh-aw#28854).

This PR recompiles the lock file with gh-aw v0.71.2, which adds `pull-requests: write` to the activation job.

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…uts in CI (#25302)

Wrap the Tls12 test body in a try/catch that calls TestRuntime.IgnoreInCIIfBadNetwork to mark the test as ignored (rather than failed) when transient network issues occur in CI.

Also extend IgnoreInCIIfTimedOut to handle SocketException timeouts, not just WebException timeouts, so that the SocketException thrown by TcpClient is properly recognized.

Fixes #25241

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…20260505064756191 to main (#25325)

LEGO: Pull request from lego/hb_5df43909-4a19-4f55-bc3f-9ea8fccf3c82_20260505064756191 to main with localized lcls
…elpers (#25268)

Multiple XML loading helpers use `DtdProcessing.Parse`, which enables inline DTD processing and opens a vector for entity expansion DoS ("billion laughs"). While `XmlResolver = null` prevents external entity resolution, inline DTDs are still processed. Apple plist files declare a DTD but don't depend on DTD processing for correctness.

This PR changes `DtdProcessing.Parse` to `DtdProcessing.Prohibit` in all affected locations:

- `tools/common/PListExtensions.cs` — 2 occurrences (file and string overloads)
- `src/bgen/Extensions/ExtensionMethods.cs` — 1 occurrence
- `tests/cecil-tests/Helper.cs` — 1 occurrence
- `tests/mtouch/MTouch.cs` — 1 occurrence
- `tests/common/ProductTests.cs` — 1 occurrence

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…html report publish fails. (#25233)

When the "Publish to Artifact Services Drop" step times out or fails, the VSDrops
link in the GitHub comment would point to a non-existent page. Now detect the
failure by setting an output variable when the step does not succeed, and show
"(Publish failed)" in plain text instead of a broken link.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fixes the following problem:

1. We compile the api definition, and csc resolves the `cref="Mount"` reference to `cref="M:FSKit.FSVolumeOperations.Mount(FSKit.FSTaskOptions,FSKit.FSVolumeOperationsMountHandler)"`
2. We run the generator, and copy the xml docs from the compiled api definition, which is `cref="M:FSKit.FSVolumeOperations.Mount(FSKit.FSTaskOptions,FSKit.FSVolumeOperationsMountHandler)"`
3. The actual type name is `IFSVolumeOperations` (because the type is a protocol), which means the cref is now pointing to somewhere that doesn't exist.

Fix this by specifying the complete reference in the api definition's xml comment, which csc won't process, and just copy as-is.
- Update old Apple documentation URLs to modern developer.apple.com/documentation/ format
  in src/ C# files and docs/api/ XML files
- Remove dead Xamarin links (developer.xamarin.com, docs.xamarin.com)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fix the flaky `NetworkReachabilityTest.CtorIPAddressPair` test (monotouch-test, macOS).

**Two sources of flakiness addressed:**

1. **DNS resolution failure**: `Dns.GetHostAddresses("apple.com")` can throw when DNS is unavailable in CI. Wrapped in try-catch with `TestRuntime.IgnoreInCIIfBadNetwork` so transient DNS failures are only ignored on CI (locally the test still fails).

2. **Overly strict flags assertion**: The remote-address flags check required exactly `Reachable` (after stripping `TransientConnection`). Different OS versions can report additional flags like `ConnectionRequired`. Added a `CheckRemoteFlags` helper that verifies `Reachable` is set and no unexpected flags appear — matching the existing `CheckLoopbackFlags` philosophy.

**Other changes:**
- Added `NetworkResources.AppleHost` constant instead of hardcoding `"apple.com"` in the test.

Fixes #25242

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This pull request updates the following dependencies

## From https://github.com/dotnet/macios

- **Subscription**: [c0371266-dd6f-4959-822b-decc72d2d668](https://maestro.dot.net/subscriptions?search=c0371266-dd6f-4959-822b-decc72d2d668)
- **Build**: [20260505.2](https://dev.azure.com/devdiv/DevDiv/_build/results?buildId=14015156) ([313025](https://maestro.dot.net/channel/3884/github:dotnet:macios/build/313025))
- **Date Produced**: May 5, 2026 8:39:54 AM UTC
- **Commit**: [ceb40a1](ceb40a1)
- **Branch**: [release/9.0.1xx](https://github.com/dotnet/macios/tree/release/9.0.1xx)

- **Dependency Updates**:
  - From [26.4.9015 to 26.4.9016][1]
     - Microsoft.iOS.Sdk.net9.0_26.4
     - Microsoft.MacCatalyst.Sdk.net9.0_26.4
     - Microsoft.macOS.Sdk.net9.0_26.4
     - Microsoft.tvOS.Sdk.net9.0_26.4

[1]: ac80159...ceb40a1
…20260506054941025 to main (#25343)

LEGO: Pull request from lego/hb_5df43909-4a19-4f55-bc3f-9ea8fccf3c82_20260506054941025 to main with localized lcls
…3i (#25334)

Line 156 of `src/Simd/README.md` described `NVector3i` as "A vector of 3 43-bit ints.", which is a factual error.

`NVector3i` wraps the native `simd_int3` / `vector_int3` type, which is a vector of three **32-bit** signed integers. The sibling types `NVector2i` and `NVector4i` already correctly say "32-bit" in the same file.

**Change:** `43-bit` → `32-bit` on line 156 — documentation only, no code changes.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ink in SingleProject.md (#25335)

## Summary

Two stale references in `dotnet/SingleProject.md`:

1. **Stale .NET version framing** (line 21): The doc said `GenerateApplicationManifest` defaults to `true` "for .NET 6, and not for 'legacy' Xamarin.iOS/Xamarin.Mac". .NET 6 is EOL and the repo now targets net11.0. Updated to say "the default for all supported .NET versions".

2. **Archived repository link** (line 33): Link `[1]` pointed to a pinned SHA on the archived `xamarin/xamarin-android` repo. That repo was renamed to `dotnet/android`. Updated to point to the current `dotnet/android` main branch.

## Changes

- `dotnet/SingleProject.md`: 2-line doc-only fix

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…20260505174743293 to main (#25338)

LEGO: Pull request from lego/hb_5df43909-4a19-4f55-bc3f-9ea8fccf3c82_20260505174743293 to main with localized lcls
…l JSON parsing (#24856)

## Summary

This PR refactors `GetAvailableDevices.RunSimCtlAsync` to use the shared `SimctlOutputParser` from the `Xamarin.MacDev` submodule (`dotnet/macios-devtools`) instead of inline JSON parsing.

### What this PR does

1. **Updates the submodule** to include the new `SimctlOutputParser` and model classes (main branch, SHA `10a0c3c`)
2. **Replaces inline simctl JSON parsing** in `RunSimCtlAsync` with:
   - `SimctlOutputParser.ParseDevices(json)` — typed `SimulatorDeviceInfo` objects
   - `SimctlOutputParser.ParseRuntimes(json)` — typed `SimulatorRuntimeInfo` objects
   - `SimctlOutputParser.ParseDeviceTypes(json)` — typed `SimulatorDeviceTypeInfo` objects
   - `DeviceCtlOutputParser.ParseDevices(json)` — typed physical device info
3. **Preserves all business logic** — MSBuild metadata, devicetypes lookup, RuntimeIdentifier computation, platform filtering

### Build fixes included

- Suppress CS0618 for `AppleSdkSettings` obsolete warnings
- Fix nullability mismatches (CS8604/CS8620)

### Dependencies

- Submodule points to macios-devtools `main`

---------

Co-authored-by: Rui Marinho <me@ruimarinho.net>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Rolf Bjarne Kvinge <rokvin@microsoft.com>
…REQUEST_CHANGES state (#25350)

When the reviewer previously requested changes and those issues are fixed, it
must submit a COMMENT review (not just stay silent) to replace the previous
REQUEST_CHANGES state on the PR. Without this, PRs remain red forever.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… step (#24888)

Add a new custom linker step that replaces runtime `Dlfcn.dlsym` calls with
direct native symbol lookups via P/Invokes to `__Internal`. This improves
startup performance and app size, and ensures the native linker can see symbol
references that would otherwise only be resolved at runtime.

Two modes are supported, controlled by the `InlineDlfcnMethods` MSBuild property:

* `strict`: inlines all calls to `ObjCRuntime.Dlfcn` APIs.
* `compatibility`: only inlines calls that reference symbols from `[Field]`
  attributes.

Post-trimming MSBuild targets ensure native code is only generated for symbols
that survive trimming (ILTrim or NativeAOT):

* `_CollectPostILTrimInformation`: scans trimmed assemblies for surviving
  inlined dlfcn P/Invokes, with per-assembly caching for incremental builds.
* `_CollectPostNativeAOTTrimInformation`: reads unresolved symbols from the
  NativeAOT object file or static library and filters for inlined dlfcn symbols.
* `_PostTrimmingProcessing`: generates native C code for surviving symbols and
  adds it to the native link inputs.

Extends `MachO.cs` with LC_SYMTAB parsing to read unresolved symbols from both
Mach-O object files and static libraries.

Contributes towards #17693.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Introduce two new MSBuild properties to simplify platform checks in the build system:

- **`SdkIsDesktop`**: `true` when building for macOS or Mac Catalyst. Replaces `'$(_PlatformName)' == 'macOS' Or '$(_PlatformName)' == 'MacCatalyst'` checks.
- **`SdkIsMobile`**: `true` when building for iOS or tvOS. Replaces `'$(_PlatformName)' == 'iOS' Or '$(_PlatformName)' == 'tvOS'` checks.

These complement the existing `SdkIsSimulator` and `SdkIsDevice` properties (from #25234).

The `SdkIsDevice` definition was also updated to use `SdkIsMobile` instead of raw platform checks.

### Deliberately not updated

- Patterns that also include `watchOS` (bundle structure paths, PkgInfo, etc.)
- `DynamicCodeSupport` (also includes MacCatalyst alongside iOS/tvOS)
- `ComputeRegistrarConstant.targets` (uses `TargetFramework.EndsWith()` patterns)
- Linker/introspection test `.csproj` files (also check tvOS separately)
- `_LibMonoLinkMode`/`_LibXamarinLinkMode` (check macOS and MacCatalyst with distinct behavior)

Both properties are documented in `docs/building-apps/build-properties.md`.

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…entitlements (#25332)

Add the com.apple.developer.payment-pass-provisioning entitlement to the
known entitlements list so that validation properly reports a warning/error
when an app requests this entitlement but the provisioning profile doesn't
grant it. Previously this was an unknown entitlement that only logged a
low-importance message, causing silent install failures on device.

Also add tests verifying the error, warning, and disable modes for this
entitlement validation scenario.

Fixes #25306

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds a new agentic workflow (`code-radiator`) that merges `main` into active target branches daily at midnight UTC.

**Target branches:** `net[0-9]*.0`, `xcode[0-9]*`, `xcode[0-9]*.[0-9]*` (with activity in the last 30 days).

**Features:**
- Creates or updates merge PRs for each active target branch
- Resolves `eng/Version.Details.{props,xml}` conflicts by picking highest versions
- Resolves `NuGet.config` conflicts by including feeds from both branches
- Excludes conflicting `tests/dotnet/UnitTests/expected/*` files from merge commits
- Merges target branch into PR branch first to pick up new target commits
- For other conflicts: resolves best-effort, adds `do-not-merge` label and requests human review
- Enables automerge for clean merges; skips draft PRs with a comment

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Also these enums are only available for arm64.
…rimmed. (#25354)

This is not the default in .NET 11 (it is in .NET 10), so make it explicit.
…1: Build ID 14036358 (#25356)

This is the pull request automatically created by the OneLocBuild task in the build process to check-in localized files generated based upon translation source files (.lcl files) handed-back from the downstream localization pipeline. If there are issues in translations, visit https://aka.ms/icxLocBug and log bugs for fixes. The OneLocBuild wiki is https://aka.ms/onelocbuild and the localization process in general is documented at https://aka.ms/AllAboutLoc.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary

Enable nullable reference types, treat-warnings-as-errors, and use the latest C# language version globally across the entire repository via `Directory.Build.props`.

## Changes

### Global settings (`Directory.Build.props`)

* Set `<Nullable>enable</Nullable>` globally.
* Set `<TreatWarningsAsErrors>true</TreatWarningsAsErrors>` globally.
* Set `<LangVersion>latest</LangVersion>` globally (when not already set).

### Cleanup: remove per-project redundant settings

* Remove per-project `<Nullable>enable</Nullable>` from ~100+ `.csproj` files, since it's now set globally.
* Remove per-project `<TreatWarningsAsErrors>` and `<WarningsAsErrors>` settings that are now redundant.
* Remove per-project `<LangVersion>` settings that are now covered by the global default.

### Fix nullability warnings in test code

* **bindings-test**: Fix nullability issues in `ProtocolTest.cs`, `Registrar.cs`, `RuntimeTest.cs`.
* **dont-link**: Fix nullability issues across multiple test files.
* **link all**: Fix nullability issues in link-all tests.
* **link sdk**: Fix nullability issues in link-sdk tests.
* **BundledResources**: Fix nullability in `ResourcesTest.cs`.
* **F# tests**: Fix nullability issues in F# test code.
* **Other**: Minor nullability fix in `generate-frameworks-constants.cs`.

🤖 Pull request created by Copilot

With this change, nullability is fully enabled everywhere, so:

* Fixes #17285.
* Fixes #6154.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
rolfbjarne and others added 26 commits June 1, 2026 08:44
…match SDK names. Fixes #25497. (#25528)

Content items with PublishFolderType (e.g. RootDirectory) would lose files
whose names match SDK assemblies or runtime files (e.g. libclrgc.dylib,
Microsoft.macOS.dll). This happened because the .NET SDK's
ResolveOverlappingItemGroupConflicts task (during ComputeResolvedFilesToPublishList)
removes user items when their filename conflicts with SDK package files.

Fix this by setting TargetPath metadata (from Link) when Content/BundleResource
items with PublishFolderType are first added to ResolvedFileToPublish. This way
the conflict resolver sees the full relative path (e.g.
Contents/SharedSupport/SubApp.app/.../libclrgc.dylib) instead of just the
filename, and doesn't flag them as conflicts with SDK files.

Fixes #25497.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fixes #25298 (#25483)

Apple's Xcode tools (actool, ibtool, etc.) require the simulator runtime even when building for physical devices. When the runtime is missing or the wrong version, these tools fail with unhelpful errors or hang indefinitely.

## Changes

After a tool failure, run `xcrun simctl --json-output=<file> list runtimes` to check whether the required simulator runtime is installed. If missing, emit a clear error (E7170) with instructions on how to install it.

Additionally, detect simulator runtime version mismatch errors in tool output (e.g. `No simulator runtime version from [...] available to use with iphonesimulator SDK version ...`) and emit E7172 suggesting the user update their simulator runtime.

The simctl check uses a 1-minute timeout to avoid hanging, and results are cached per platform/SdkDevPath.

## New diagnostics

- **E7170**: Simulator runtime not installed (post-failure simctl check)
- **W7171**: Unable to determine simulator runtime availability
- **E7172**: Tool error indicates incompatible simulator runtime version

Fixes #25298

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Rolf Bjarne Kvinge <rokvin@microsoft.com>
## Add support for Icon Composer (.icon) app icons

This adds support for Xcode Icon Composer based `.icon` folders introduced in macOS 26 Tahoe's Liquid Glass design system (see #24132).

### Changes

- **Recognize `.icon` folders**: Treats `.icon` directories as asset catalogs alongside `.xcassets`
- **"Process"/Detect `icon.json` files**: Handles `icon.json` metadata files in addition to `Contents.json`
- **Enable `--app-icon` flag**: `.icon`-based icons now pass validation and get the `--app-icon` flag passed to `actool`
- **Support alternate icons**: Works with `IncludeAllAppIcons` for runtime icon switching

### Background

The new `.icon` format is a folder structure containing:
- `icon.json` - Icon metadata (layers, materials, effects)
- `Assets/` subfolder - Vector graphics and image assets

This replaces static `.icns` files to support Liquid Glass features like translucency, specular lighting, and cross-platform rendering.

### Usage

Add `.icon` folders to your project:

```xml
<ItemGroup>
  <ImageAsset Include="Resources\AppIcon.icon\**" />
</ItemGroup>

<PropertyGroup>
  <!-- Optional: Specify which icon to use -->
  <AppIcon>AppIcon</AppIcon>
  
  <!-- Optional: Include all icons for runtime switching -->
  <IncludeAllAppIcons>true</IncludeAllAppIcons>
</PropertyGroup>
```

The build system will:
1. Recognize the `.icon` folder as a valid app icon
2. Pass it to `actool` with the `--app-icon AppIcon` flag
3. Compile it into `Assets.car`

---

This is a recreation of #24476 (from @paulober), because our CI can't work with pull requests from forks.

Fixes #24132.

---------

Co-authored-by: paulober <44974737+paulober@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Rolf Bjarne Kvinge <rokvin@microsoft.com>
…anch merges (#25576)

Inter-branch merge PR creation was blocked because the safe-output patch
file cap was too low for `main => net11.0` (195 files). This change
raises the cap to accommodate large automated merge PRs.

- **Workflow source update**
- Added a repository-level safe-output limit in
`/.github/workflows/code-radiator.md`:
    - `safe-outputs.max-patch-files: 1000`

- **Compiled workflow parity**
- Updated the generated lockfile
`/.github/workflows/code-radiator.lock.yml` so runtime safe-output
config uses:
    - `create_pull_request.max_patch_files: 1000`

- **Effective config (example)**
  ```yaml
  safe-outputs:
    max-patch-files: 1000
    create-pull-request:
      max: 10
      allowed-base-branches:
        - "net*.0"
        - "xcode*"
        - "xcode*.*"
  ```

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: rolfbjarne <249268+rolfbjarne@users.noreply.github.com>
The platform assemblies are rather big, and take a while to compile. This also
means the C# compiler (csc) uses a lot of computational resources during the
process.

Each csc process is multi-threaded, and then if make also runs multiple csc
processes in parallel, the build may completely thrash the CPU, and csc (aka
Roslyn) isn't particularly easy on the memory either, causing any other use of
the machine to suffer signicantly.

So with this change we optionally build the platform assemblies serially.

It looks a bit weird, but the idea is that in the make template, every
platform assembly depends on the assembly from the previous template
expansion.

It slows down the build somewhat (src/ builds in ~5:30 instead of ~3:45 on my
9-year old iMac Pro), so it's opt-in instead of on by default.
NSPrintPreviewGraphicsContext existed in our bindings because we sometimes get instances of this type, and since its parent type is NSProxy, it causes problems at runtime when we try to figure out which managed type to instantiate.

In particular, when:

* The app is trimmed
* The NSProxy type is trimmed away

This happens:

    MarshalManagedException: ObjCRuntime.RuntimeException: The ObjectiveC class 'NSPrintPreviewGraphicsContext' could not be registered, it does not seem to derive from any known ObjectiveC class (including NSObject).
       at Registrar.DynamicRegistrar.Lookup(IntPtr class, Boolean throw_on_error) in /Users/builder/azdo/_work/1/s/macios/src/ObjCRuntime/DynamicRegistrar.cs:line 1069
       at ObjCRuntime.Class.Lookup(IntPtr klass, Boolean throw_on_error) in /Users/builder/azdo/_work/1/s/macios/src/ObjCRuntime/Class.cs:line 291
       at ObjCRuntime.Class.Lookup(IntPtr klass) in /Users/builder/azdo/_work/1/s/macios/src/ObjCRuntime/Class.cs:line 272
       at ObjCRuntime.Runtime.GetNSObject[T](IntPtr ptr, IntPtr sel, RuntimeMethodHandle method_handle, Boolean evenInFinalizerQueue, Boolean typeSafe) in /Users/builder/azdo/_work/1/s/macios/src/ObjCRuntime/Runtime.cs:line 1893
       at ObjCRuntime.Runtime.GetNSObject[T](IntPtr ptr) in /Users/builder/azdo/_work/1/s/macios/src/ObjCRuntime/Runtime.cs:line 1844
       at ObjCRuntime.Runtime.GetNSObject[T](IntPtr ptr, Boolean owns) in /Users/builder/azdo/_work/1/s/macios/src/ObjCRuntime/Runtime.cs:line 1930
       at AppKit.NSGraphicsContext.get_CurrentContext() in /Users/builder/azdo/_work/1/s/macios/src/build/dotnet/macos/generated-sources/AppKit/NSGraphicsContext.g.cs:line 411
       at PrintableView.DrawPageBorder(CGSize borderSize) in /Users/rolf/test/dotnet/macos-printpreview/Program.cs:line 97

because `NSProxy` doesn't subclass `NSObject`, we can't find a managed type to instantiate.

In the Xamarin days we had custom linker support to keep `NSPrintPreviewGraphicsContext` (xamarin/maccore@d047ee1), but this was never ported to .NET, so this has been broken since forever in .NET.

So fix this by:

* Removing the `NSPrintPreviewGraphicsContext` binding, it causes problems when inlining calls to Class.GetHandle, because it's not part of the public API.
* Ensure `NSProxy` is not trimmed away when `NSGraphicsContext.CurrentContext` is used, this way we'll return an `NSProxy` instance when the native instance is an actual `NSPrintPreviewGraphicsContext`. This required adding support for copying `[DynamicDependency]` attributes from binding code to the generated code.
* Also add unit tests.

This required removing the WebKit_NSProxy unit test, because it doesn't work anymore (it asserts that the `NSProxy` type is trimmed away, but one of the new tests depends on `NSProxy` not being trimmed away).

References:

* https://github.com/xamarin/bugzilla-archives/blob/main/16/16505/bug.html
* xamarin/maccore@d047ee1
…20260528175129236 to main (#25569)

LEGO: Pull request from lego/hb_5df43909-4a19-4f55-bc3f-9ea8fccf3c82_20260528175129236 to main with localized lcls
…20260528055153236 to main (#25558)

LEGO: Pull request from lego/hb_5df43909-4a19-4f55-bc3f-9ea8fccf3c82_20260528055153236 to main with localized lcls
…1: Build ID 14245989 (#25593)

This is the pull request automatically created by the OneLocBuild task in the build process to check-in localized files generated based upon translation source files (.lcl files) handed-back from the downstream localization pipeline. If there are issues in translations, visit https://aka.ms/icxLocBug and log bugs for fixes. The OneLocBuild wiki is https://aka.ms/onelocbuild and the localization process in general is documented at https://aka.ms/AllAboutLoc.
#25597 (#25604)

The test was getting HTTP 404 on a CI bot, but the local HttpListener
server never returns 404. The likely cause is localhost resolving to
::1 (IPv6) on certain macOS bots while HttpListener with http://*:port/
only binds to IPv4. The request reaches something else and gets 404.

Fix:
- Use 127.0.0.1 explicitly in both the HttpListener prefix and the
  request URL to avoid IPv6/hostname resolution mismatches.
- Add CI tolerance: if the server received zero requests and the status
  is 404, mark the test as inconclusive (infrastructure issue, not a
  code bug).
- Add IgnoreInCIIfBadNetwork and timeout handling consistent with other
  tests in this file.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…20260529053637714 to main (#25575)

LEGO: Pull request from lego/hb_5df43909-4a19-4f55-bc3f-9ea8fccf3c82_20260529053637714 to main with localized lcls
This pull request updates the following dependencies

## From https://github.com/dotnet/dotnet

- **Subscription**: [da09b56a-0fb1-439a-b894-def14d2ec0a4](https://maestro.dot.net/subscriptions?search=da09b56a-0fb1-439a-b894-def14d2ec0a4)
- **Build**: [20260531.4](https://dev.azure.com/dnceng/internal/_build/results?buildId=2988460) ([316516](https://maestro.dot.net/channel/10307/github:dotnet:dotnet/build/316516))
- **Date Produced**: May 31, 2026 7:18:38 PM UTC
- **Commit**: [aec921632e75e1f29327709dd52e98c41f3b55cf](dotnet/dotnet@aec9216)
- **Branch**: [release/10.0.4xx](https://github.com/dotnet/dotnet/tree/release/10.0.4xx)

- **Dependency Updates**:
  - From [10.0.0-beta.26277.109 to 10.0.0-beta.26281.104][2]
     - Microsoft.DotNet.Arcade.Sdk
     - Microsoft.DotNet.Build.Tasks.Feed
     - Microsoft.DotNet.SharedFramework.Sdk
  - From [10.0.400-preview.0.26277.109 to 10.0.400-preview.0.26281.104][2]
     - Microsoft.NET.Sdk
  - From [10.0.400-preview.26277.109 to 10.0.400-preview.26281.104][2]
     - Microsoft.TemplateEngine.Authoring.Tasks

[2]: dotnet/dotnet@2f68b99...aec9216
MetadataLoadContext's `GetCustomAttributesData()` returns a fresh `ReadOnlyCollection<CustomAttributeData>` on every call. Since bgen queries multiple attribute types per provider (via `GetCustomAttributes<T>`, `HasAttribute<T>`, `HasAttribute(string)`, `IsNullable`), the same provider's raw attribute list was being allocated and discarded many times over.

Add a `Dictionary<ICustomAttributeProvider, IList<CustomAttributeData>>` that caches the raw result per provider. Changed `GetAttributes()` from static to instance to enable this cache. `HasAttribute(string)` also changed from static to instance (only one caller, already via instance).

```
Baseline average (3 runs): 24.7s, 9164 MB total, gen0=1660, gen1=513
After average (3 runs):    22.1s, 6990 MB total, gen0=1265, gen1=417
Time:   -2.6s (-10.5%)
Memory: -2174 MB (-23.7%)
GC:     gen0 -395 (-23.8%), gen1 -96 (-18.7%)
```

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Rolf Bjarne Kvinge <rokvin@microsoft.com>
This will become important soon, because much of the code here will run from
inside an MSBuild task, and we mustn't call Console.[Error.]WriteLine from
inside an MSBuild task (it can cause tasks to deadlock). With these changes
it'll be much easier to remap Log calls to MSBuild's Task.LogMessage method.
Update the following package versions:
- NUnit: 4.4.0 → 4.6.1
- NUnit3TestAdapter: 6.1.0 → 6.2.0
- NUnitAnalyzers: 4.7.0 → 4.13.0
- NUnitXmlTestLogger: 3.1.15 → 8.0.0
- NUnitLite: 3.12.0 → 4.6.1
- NUnitV2ResultWriter: 3.6.0 → 3.8.0

Also remove the tools/nunit3-console* scripts, they're no longer needed.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fixes:
https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=14220252&view=logs&j=7052fe35-1431-500d-b066-a8f68f3e4472&t=3e86fd51-d381-52a3-1170-668b62fca50b&s=1d91d519-4060-54d4-b74e-0ef61a7f9d43

```
GEN      Microsoft.iOS.xml
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 5: 'database is locked For more information on this error code see https://www.sqlite.org/rescode.html'.
   at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
   at Microsoft.Data.Sqlite.SqliteConnection.BackupDatabase(SqliteConnection destination, String destinationName, String sourceName)
   at AppleDocReader.Database.MicrosoftDataSqlite.AdrMicrosoftDataSqliteConnection.BackupDatabase(AdrSqliteConnection destination, String destinationName, String sourceName, Int32 pages, Object ignored, Int32 retryMilliseconds) in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrSqliteConnection.cs:line 160
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.ResolveChildren() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 604
   at AppleDocReader.Database.AdrDatabaseXcode14.Populate(Boolean populate) in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 201
   at AppleDocReader.Database.AdrDatabaseXcode14.CreateFromXcode(String xcodePath, ValueTuple`2 version, String dbPath, HashSet`1 jsonSelectors) in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrDatabaseXcode14.cs:line 125
   at AppleDocReader.Database.AdrFactory.GetDatabase(String xcodePath, String dbPath, HashSet`1 jsonSelectors) in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Database/AdrFactory.cs:line 21
   at AppleDocReader.Commands.Inject.DocsCommand.InvokeInternal() in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Commands/Inject/DocsCommand.cs:line 36
   at AppleDocReader.Commands.AdrCommand.Invoke(IEnumerable`1 arguments) in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Commands/AdrCommand.cs:line 61
   at Mono.Options.CommandSet.Run(IEnumerable`1 arguments)
   at AppleDocReader.MainClass.Main2(String[] args) in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Main.cs:line 45
   at AppleDocReader.MainClass.Main(String[] args) in /Users/builder/azdo/_work/3/s/src/AppleDocReader/Main.cs:line 17
make[1]: *** [build/dotnet/macos/doc/Microsoft.macOS.xml] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [all-recurse] Error 1

```


AppleDocReader backs up a shared Xcode SQLite database while injecting
docs into the generated platform XML files. When make builds the iOS,
macOS, tvOS, and Mac Catalyst XML docs in parallel, multiple
AppleDocReader processes can race on that database and fail with SQLite
Error 5: database is locked.

Run AppleDocReader under a shared lockf lock so the rest of the build
can remain parallel while the database access is serialized.
Add a configure-time option for selecting the Xcode installation used by
the build.

Some build images install Xcode 26.5 as:

    /Applications/Xcode_26.5.app

while the repository default points at:

    /Applications/Xcode_26.5.0.app

Xcode does not behave well when accessed through symlinks, so make the
path explicit instead of requiring machines to provide an alternate app
bundle name.

The configure options accept either the Xcode app bundle path or the
developer root path:

    ./configure --xcode=/Applications/Xcode_26.5.app
    ./configure --xcode=/Applications/Xcode_26.5.app/Contents/Developer
    ./configure --xcode-root=/Applications/Xcode_26.5.app
./configure
--xcode-developer-root=/Applications/Xcode_26.5.app/Contents/Developer

Based on PR review feedback, `configure` now writes the selected path
directly to `configure.inc` as `XCODE_DEVELOPER_ROOT`. `Make.config`
includes `configure.inc` before resolving the Xcode block and uses `?=`
for the existing default path:

XCODE_DEVELOPER_ROOT?=/Applications/Xcode_26.5.0.app/Contents/Developer

This keeps the behavior simple and consistent with the other configure
options: an explicitly configured Xcode path wins, while the existing
`.0.app` path remains the default when no path is configured.

`system-dependencies.sh` now also checks `configure.inc` for
`XCODE_DEVELOPER_ROOT` before falling back to the `Make.config` default,
and direct invocations export `DEVELOPER_DIR` from the resolved Xcode
root so the script and Make agree on the selected Xcode.

No pipeline- or agent-specific logic is added. CI can opt into the
shorter app bundle name by running:

    ./configure --xcode=/Applications/Xcode_26.5.app

Local developers with `Xcode_26.5.0.app` can continue using the default
configuration unchanged.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…25615)

We're only executing on macOS, so long paths are fine.
#25577)

Code Radiator failed to create the `main -> xcode26.5` merge PR because
safe-outputs attempted signed commit replay, then refused unsigned
fallback when a submodule update was present. This change switches the
merge workflow to explicit unsigned push behavior for PR branch updates.

- **Root cause addressed**
- Configure safe-outputs PR write paths to avoid `pushSignedCommits`
replay for merge branches that can include unsupported commit shapes
(notably submodule bumps).

- **Workflow source updates (`code-radiator.md`)**
  - Set `signed-commits: false` under:
    - `safe-outputs.create-pull-request`
    - `safe-outputs.push-to-pull-request-branch`

- **Compiled workflow parity (`code-radiator.lock.yml`)**
  - Updated generated safe-outputs handler/config payloads to include:
    - `"signed_commits": false` for `create_pull_request`
    - `"signed_commits": false` for `push_to_pull_request_branch`

```yaml
safe-outputs:
  create-pull-request:
    max: 10
    signed-commits: false
  push-to-pull-request-branch:
    max: 10
    signed-commits: false
```

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: rolfbjarne <249268+rolfbjarne@users.noreply.github.com>
)

---------

Co-authored-by: Rolf Bjarne Kvinge <rokvin@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…25603)

mono-api-info now reads NullableAttribute and NullableContextAttribute
metadata from assemblies and appends '?' to type names for nullable
reference types in the XML output (parameters, return types, properties,
fields, and events).

mono-api-html now:
- Strips nullability annotations when matching methods (so nullability-
  only changes don't cause false removed/added entries)
- Detects nullability-only changes and renders them under a separate
  '(nullability)' subsection header to indicate they are non-breaking
- Handles the '?' suffix in type name resolution (GetTypeName)

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor Author

⏭️ Skipping merge update: this PR is a draft. Convert to ready when you want automated updates to resume.

Generated by Code Radiator · sonnet45 2.2M ·

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

⏭️ Skipping merge update: this PR is a draft. Convert to ready when you want automated updates to resume.

Generated by Code Radiator · sonnet45 2M ·

@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor Author

⏭️ Skipping merge update: this PR is a draft. Convert to ready when you want automated updates to resume.

Generated by Code Radiator · sonnet45 595.2K ·

@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

⏭️ Skipping merge update: this PR is a draft. Convert to ready when you want automated updates to resume.

Generated by Code Radiator · sonnet45 645.2K ·

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants