Skip to content

🤖 Merge 'main' => 'xcode27.0'#25980

Merged
dalexsoto merged 14 commits into
xcode27.0from
merge/main-to-xcode27.0-20260708-51239743fa61dc86
Jul 9, 2026
Merged

🤖 Merge 'main' => 'xcode27.0'#25980
dalexsoto merged 14 commits into
xcode27.0from
merge/main-to-xcode27.0-20260708-51239743fa61dc86

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Caution

Protected files were modified in this change.
This pull request is in request_review mode and requires explicit human scrutiny before merge.

Protected files: README.md, .agents/files/training-log-macios-binding-creator.md, .agents/skills/macios-binding-creator/SKILL.md, .agents/skills/macios-binding-creator/references/binding-patterns.md, .agents/skills/macios-binding-creator/references/test-workflow.md

Automated merge of main into xcode27.0.

Created by the code-radiator workflow.

Conflict resolution:

  • scripts/run-packaged-macos-tests/run-packaged-macos-tests.cs: Combined macOS build version checking (from xcode27.0) with log stream capture (from main). Both features are independent and now work together.

Generated by Code Radiator · 149.8 AIC · ⌖ 38.9 AIC · ⊞ 9K ·

rolfbjarne and others added 14 commits July 7, 2026 18:13
Improve XML documentation for the `SKError` enum:

- Replace 'To be added.' placeholders with meaningful descriptions for all error codes
- Remove empty `<remarks>` nodes

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The 'Report build result' step no longer posts a GitHub comment when the build succeeds - only when it fails.

These "Build passed" comments (and emails) don't add much value, so just remove them. We're still interested in failures though, so those will still be posted.

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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**: [20260707.1](https://dev.azure.com/dnceng/internal/_build/results?buildId=3016559) ([321779](https://maestro.dot.net/channel/2/github:dotnet:xharness/build/321779))
- **Date Produced**: July 7, 2026 6:05:10 PM UTC
- **Commit**: [b631e17803318d67046871027986a005f3db02bf](dotnet/xharness@b631e17)
- **Branch**: [main](https://github.com/dotnet/xharness/tree/main)

- **Dependency Updates**:
  - From [11.0.0-prerelease.26353.1 to 11.0.0-prerelease.26357.1][1]
     - Microsoft.DotNet.XHarness.iOS.Shared

[1]: dotnet/xharness@4da0015...b631e17
…ionSupported. (#25939)

When running as a step in the assembly-preparer, `RegistrarRemovalTrackingStep` used to
rewrite `Runtime.get_DynamicRegistrationSupported` in the platform assembly (to return
`false`) when it determined the dynamic registrar could be removed. That required the
assembly-preparer to modify - and thus re-save - the platform assembly.

Instead, compute the value and surface it to MSBuild, which enables the
`ObjCRuntime.Runtime.DynamicRegistrationSupported` trimmer feature switch so that ILLink
hardcodes the property (the same way it already does for e.g.
`ObjCRuntime.Runtime.IsManagedStaticRegistrar`). This way the assembly-preparer doesn't
have to touch any assembly for this optimization.

## How it works

* Added `get_DynamicRegistrationSupported` substitution entries (feature
  `ObjCRuntime.Runtime.DynamicRegistrationSupported`) to the `ILLink.Substitutions.*.xml`
  for all four platforms.
* `RegistrarRemovalTrackingStep` still computes `Optimizations.RemoveDynamicRegistrar`, but
  under `ASSEMBLY_PREPARER` it no longer rewrites the assembly - it reports the value via a
  new generic "MSBuild output property" mechanism instead. The real ILLink path (when
  `PrepareAssemblies` isn't enabled) is unchanged and still rewrites the assembly.

## Generic MSBuild output mechanism

* `LinkerConfiguration.SetOutputForMSBuild (name, value)` collects output properties, and
  `FlushOutputForMSBuild` writes them - alphabetically sorted, one `Name=Value` per line -
  to a file. There's a separate file for the preparation and post-processing passes so the
  two passes don't clobber each other.
* The files are added to `FileWrites` (when they exist after the assembly-preparer has run).
* The `_SetDynamicRegistrationSupportedFeature` target (which runs after `_PrepareAssemblies`
  and before the trimmer) parses the `DynamicRegistrationSupported` property out of the
  preparation pass's output file and adds the `RuntimeHostConfigurationOption`. It's not
  incremental-gated and the file is persisted, so the feature switch is still set correctly
  when `_PrepareAssemblies` is skipped because its outputs are up-to-date.

## User override

* Added a user-overridable `$(DynamicRegistrationSupported)` MSBuild property (documented in
  `build-properties.md`); the user value always wins.
* When the user sets `$(DynamicRegistrationSupported)`, the value doesn't need to be computed,
  so `RegistrarRemovalTrackingStep` is skipped entirely in the preparation pass.

## Testing

Added a `DynamicRegistrationSupportedTest` build test asserting the user value flows through
to the feature switch. Also verified manually (default + explicit true/false) and with
monotouch-test (`release|linksdk`, `PrepareAssemblies=true PostProcessAssemblies=true`).

## Note

While working on this I ran into a pre-existing incremental-build failure with
`PrepareAssemblies=true` (unrelated to this change); filed as #25938.

🤖 Pull request created by Copilot

---------

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

Add timing information to the assembly-preparer's PrepareAssemblies task: for each step (in both the Prepare and PostProcess passes) log - at MessageImportance.Low - how long the step took, whether it modified any assemblies, and a total duration for all steps. The fixed-width duration is printed before the (variable-width) step name so the durations line up between all the log lines.

To know whether a step modified any assemblies, add an AssemblySaved callback to the AppBundleRewriter (invoked whenever SaveAssembly is called). All the steps that modify assemblies go through AppBundleRewriter.SaveAssembly (except two that's being fixed in separate PRs to either not save (RegistrarRemovalTrackingStep) or to subclass AssemblyModifierStep).

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…dentifiers. Fixes #24046. (#24228)

The problem is that when using RuntimeIdentifiers (plural), we have an outer build (for the plural version) and an inner build (for the singular version), and the session id is different between them. This means the outer build can't see the outputs from the inner build, because they're not in the same location on the Mac.

The fix is to pass on the session id from the outer to the inner build, so that the inner build uses the same session id as the outer build.

Fixes #24046.
Fixes #25438 (once merged into `net11.0`).

---------

Co-authored-by: Rolf Bjarne Kvinge <rokvin@microsoft.com>
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**: [20260707.10](https://dev.azure.com/dnceng/internal/_build/results?buildId=3016581) ([321816](https://maestro.dot.net/channel/10307/github:dotnet:dotnet/build/321816))
- **Date Produced**: July 7, 2026 8:37:06 PM UTC
- **Commit**: [2bd0e65f2efd50d56ae2fa3adfc1c3f440c1d223](dotnet/dotnet@2bd0e65)
- **Branch**: [release/10.0.4xx](https://github.com/dotnet/dotnet/tree/release/10.0.4xx)

- **Dependency Updates**:
  - From [10.0.0-beta.26356.110 to 10.0.0-beta.26357.110][1]
     - Microsoft.DotNet.Arcade.Sdk
     - Microsoft.DotNet.Build.Tasks.Feed
     - Microsoft.DotNet.SharedFramework.Sdk
  - From [10.0.400-preview.0.26356.110 to 10.0.400-preview.0.26357.110][1]
     - Microsoft.NET.Sdk
  - From [10.0.400-preview.26356.110 to 10.0.400-preview.26357.110][1]
     - Microsoft.TemplateEngine.Authoring.Tasks

[1]: dotnet/dotnet@0e60383...2bd0e65
Start 'log stream --style compact' at the beginning of test execution and stop it at the end. The output is written to the crash reports directory as system.log.zip (compressed because it can be large), so it gets uploaded together with crash reports and other test artifacts.

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
 #25922 (#25958)

Before and after launching a macOS/Mac Catalyst app in tests, delete its saved
application state directory (`~/Library/Saved Application State/<bundle-id>.savedState`).
This prevents the "Do you want to try to reopen its windows again?" dialog
from blocking automated test runs after a previous crash.

Two implementations:
- **C# (`TestBaseClass.cs`)**: The `Execute` method calls `DeleteSavedState` before and after running the app. It walks up the executable path to find the `.app` bundle, reads the bundle identifier from `Info.plist`, and deletes the saved state directory.
- **Makefile (`shared-dotnet.mk`)**: A `delete-saved-state` target reads the bundle identifier via `defaults read` and removes the saved state directory. The `run-bare` target invokes it before and after execution.

Fixes #25922

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Improve XML documentation for the `ModelAttribute` type:

- Replace 'To be added.' placeholders with meaningful descriptions
- Remove empty `<remarks>` nodes
- Remove redundant `docs/api/Foundation/ModelAttribute.xml` (docs are now inline in source)
- Document `Name` property

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…form assembly is trimmed. (#25941)

RegistrarRemovalTrackingStep computes whether the dynamic registrar can be
removed and reports the result to MSBuild as the DynamicRegistrationSupported
feature switch. The dynamic registrar lives in the platform assembly, which is
an SDK assembly that's only trimmed when trimming is enabled; so when nothing is
being trimmed the dynamic registrar can't be removed and there's nothing for the
step to compute.

Don't add the step to the assembly-preparer's step list in that case (in
addition to the existing skip when the user explicitly set
$(DynamicRegistrationSupported)). This avoids unnecessary work when building
without trimming.

🤖 Pull request created by Copilot

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
# Conflicts:
#	scripts/run-packaged-macos-tests/run-packaged-macos-tests.cs
@github-actions github-actions Bot requested a review from rolfbjarne as a code owner July 8, 2026 20:21
@github-actions github-actions Bot added the do-not-merge Do not merge this pull request label Jul 8, 2026
@github-actions github-actions Bot requested a review from mauroa as a code owner July 8, 2026 20:21
@github-actions github-actions Bot added the do-not-merge Do not merge this pull request label Jul 8, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Protected files were modified in this pull request and require manual scrutiny before merge.

Please verify that each protected-file change is intentional, policy-compliant, and safe:

  • Protected files: README.md, .agents/files/training-log-macios-binding-creator.md, .agents/skills/macios-binding-creator/SKILL.md, .agents/skills/macios-binding-creator/references/binding-patterns.md, .agents/skills/macios-binding-creator/references/test-workflow.md

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator

✅ API diff for current PR / commit

NET (empty diffs)

✅ API diff vs stable

NET (empty diffs)

ℹ️ Generator diff

Generator Diff: vsdrops (html) vsdrops (raw diff) gist (raw diff) - Please review changes)

Pipeline on Agent
Hash: 134be5ce3a9d382403b99e6476fae9e55f24a462 [PR build]

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator

🔥 [CI Build #134be5c] Test results 🔥

Test results

❌ Tests failed on VSTS: test results

1 tests crashed, 0 tests failed, 191 tests passed.

Failures

❌ Tests on macOS Golden Gate (27) tests

🔥 Failed catastrophically on VSTS: test results - mac_golden_gate (no summary found).

Html Report (VSDrops) Download

Successes

✅ assembly-processing: All 1 tests passed. Html Report (VSDrops) Download
✅ cecil: All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (iOS): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (MacCatalyst): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (macOS): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (Multiple platforms): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (tvOS): All 1 tests passed. Html Report (VSDrops) Download
✅ framework: All 2 tests passed. Html Report (VSDrops) Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops) Download
✅ generator: All 5 tests passed. Html Report (VSDrops) Download
✅ interdependent-binding-projects: All 4 tests passed. Html Report (VSDrops) Download
✅ introspection: All 6 tests passed. Html Report (VSDrops) Download
✅ linker (iOS): All 15 tests passed. Html Report (VSDrops) Download
✅ linker (MacCatalyst): All 15 tests passed. Html Report (VSDrops) Download
✅ linker (macOS): All 21 tests passed. Html Report (VSDrops) Download
✅ linker (tvOS): All 15 tests passed. Html Report (VSDrops) Download
✅ monotouch (iOS): All 18 tests passed. Html Report (VSDrops) Download
✅ monotouch (MacCatalyst): All 17 tests passed. Html Report (VSDrops) Download
✅ monotouch (macOS): All 18 tests passed. Html Report (VSDrops) Download
✅ monotouch (tvOS): All 18 tests passed. Html Report (VSDrops) Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops) Download
✅ sharpie: All 1 tests passed. Html Report (VSDrops) Download
✅ windows: All 3 tests passed. [attempt 2] Html Report (VSDrops) Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops) Download
✅ xtro: All 1 tests passed. Html Report (VSDrops) Download

macOS tests

✅ Tests on macOS Sonoma (14): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Sequoia (15): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Tahoe (26): All 5 tests passed. Html Report (VSDrops) Download

Linux Build Verification

Linux build succeeded

Pipeline on Agent
Hash: 134be5ce3a9d382403b99e6476fae9e55f24a462 [PR build]

@dalexsoto dalexsoto merged commit d3da407 into xcode27.0 Jul 9, 2026
48 checks passed
@dalexsoto dalexsoto deleted the merge/main-to-xcode27.0-20260708-51239743fa61dc86 branch July 9, 2026 03:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge Do not merge this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants