Repository navigation
feat: add support for .NET 11 RC 2 - #5725
Conversation
Bumps the SDK, workload set and prerelease Microsoft.* package references from RC 1 to RC 2. The RC 2 Apple packs (27.0.12212) only accept platform version 27.0 and require Xcode 27.0, so the iOS and Mac Catalyst TFMs move to 27.0 everywhere the version is spelled out. The macos-26 runner image tops out at Xcode 26.6, so the macOS jobs move to the preview xcode-27 image. XHarness 26117.1's mlaunch can't start the simulator under Xcode 27, which replaced Simulator.app with DeviceHub.app, and reports the failure as APP_CRASH. 26506.3 handles it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Apps built with the Xcode 27 SDKs must use the UIScene lifecycle. Without it Sentry.Samples.Maui sat on the launch screen on an iOS 27 simulator, and the device test and integration test apps would have done the same. The MAUI apps get the manifest and an empty MauiUISceneDelegate subclass, as in the MAUI RC 2 templates. Sentry.Samples.Ios builds its UI in the SceneDelegate it already had. UIKit doesn't call application-level activation callbacks under scenes, so the integration test app's OnActivated hook moves to its SceneDelegate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sentry.Maui set InForeground from the application-level OnActivated, OnResignActivation and DidEnterBackground events. For apps using the UIScene lifecycle, which Xcode 27 requires, MAUI raises SceneOnActivated and friends instead, so InForeground stayed null and in_foreground disappeared from every iOS and Mac Catalyst event. The iOS integration test now asserts "in_foreground":true; without the Scene* handlers it fails in both Release and Debug. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#5566 collected framework PDBs from both "linked" and "postprocessed-assemblies", assuming only one exists per SDK. .NET 11 RC 2 writes both. The post-processor rewrites some assemblies (Microsoft.MacCatalyst, Microsoft.Maui.Controls and Microsoft.Maui.Essentials in the MAUI sample) and gives them new PDB IDs, and only the postprocessed copies end up in the app bundle. So every PDB was uploaded twice, and the "linked" copies of the rewritten assemblies matched nothing that ships. "linked" is now only the fallback for SDKs without "postprocessed-assemblies". cli.Tests.ps1 compares file names with Sort-Object -Unique, so it couldn't catch this; it now asserts that nothing is collected from "linked". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…th the .NET 11 SDK From RC 2 the .NET 11 SDK publishes Native AOT apps without running Build: UseOptimizedPublish defaults to true when PublishAot is set, and Publish depends on _PublishOptimizedBuildAlternative, which runs only Compile and the publish targets (dotnet/sdk#54515). CheckSentryCLI, which every upload and release target depends on, hooked AfterTargets="Build", so the symbol upload silently stopped. This is decided by the SDK, not the TFM, so net8.0-net10.0 apps published with the .NET 11 SDK are affected too. CheckSentryCLI and the release targets now also run after _PublishOptimizedBuildAlternative. Caught by the native AOT publish cases in cli.Tests.ps1, which failed for both net10.0 and net11.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## version7 #5725 +/- ##
============================================
+ Coverage 75.60% 75.70% +0.09%
============================================
Files 522 525 +3
Lines 19042 19140 +98
Branches 3679 3694 +15
============================================
+ Hits 14396 14489 +93
- Misses 3810 3812 +2
- Partials 836 839 +3 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Note to reviewers wondering why this has been removed: once the app adopts scenes, UIKit stops calling OnActivated. The test hook has moved to SceneDelegate.OnActivated(UIScene)
Drops the UIScene row, a one-off Apple requirement. Trims the XHarness row to the part that recurs, and folds the AOT publish and trimmer directory rows into one row about symbol upload depending on SDK internals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolves the _GetSentryRelease conflict by taking version7's AfterTargets="PrepareSentryCLI" (#5679). PrepareSentryCLI runs after CheckSentryCLI, which this branch hooks onto _PublishOptimizedBuildAlternative, so release creation still works for Native AOT publish with the .NET 11 SDK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
#5730 changed the Scene handlers after review. In 631258e,
|
…5730) * fix(maui): report in_foreground for apps using the UIScene lifecycle Sentry.Maui set InForeground from the application-level OnActivated, OnResignActivation and DidEnterBackground events. For apps using the UIScene lifecycle, which Xcode 27 requires, MAUI raises SceneOnActivated and friends instead, so InForeground stayed null and in_foreground disappeared from every iOS and Mac Catalyst event. The iOS integration test now asserts "in_foreground":true; without the Scene* handlers it fails in both Release and Debug. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit e75e6c9) * test(maui): adopt the UIScene lifecycle in the iOS integration test app The new "in_foreground":true assertion only guards the Scene* handlers if the app runs under scenes; otherwise the application-level OnActivated handler still sets InForeground and the assertion passes without the fix. UIKit stops calling the application-level OnActivated under scenes, so the OnActivated test hook moves to the SceneDelegate. Mirrors what #5725 did for integration-test/maui-device on version7. Refs #5726 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(maui): keep in_foreground true while another window is active Opening a second window on iPad fires SceneOnResignActivation and SceneDidEnterBackground for the first scene after SceneOnActivated for the second, so InForeground ended up false while the app was in use. Resign and background now leave it true if another connected scene is ForegroundActive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The older mlaunch looks for Simulator.app where Xcode 27 no longer ships it (MT1008), so ios-tests failed to launch the app. Same bump as #5725. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Opening a second window on iPad fires SceneOnResignActivation and SceneDidEnterBackground for the first scene after SceneOnActivated for the second, so InForeground ended up false while the app was in use. Resign and background now leave it true if another connected scene is ForegroundActive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cherry-picked 631258e, so the Scene handlers now match what's on main. |
|
Related, but outside this PR: a single-target app published without |
ric-oliv
left a comment
There was a problem hiding this comment.
LGTM and builds fine locally with Xcode 27...
I agree with adding the extra comment, but I'll leave it approved anyway.
* build(deps): bump dotnet-sdk from 10.0.401 to 10.0.402 Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 10.0.401 to 10.0.402. - [Release notes](https://github.com/dotnet/sdk/releases) - [Commits](dotnet/sdk@v10.0.401...v10.0.402) --- updated-dependencies: - dependency-name: dotnet-sdk dependency-version: 10.0.402 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * build: keep workload set 10.0.401 with SDK 10.0.402 Workload set 10.0.402 moves the iOS/MacCatalyst/macOS packs to 27.0.10722, which requires Xcode 27.0 and drops iOS 26.5 as a TargetPlatformVersion. The macos-26 runners only ship Xcode 26.x (Xcode 27 is a preview image), so keep the 10.0.401 workload set, which is in the same 10.0.400 feature band. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert "build: keep workload set 10.0.401 with SDK 10.0.402" This reverts commit fcfffea. * ci: move to Xcode 27 for the 10.0.402 workload set Workload set 10.0.402 ships the iOS/MacCatalyst/macOS 27.0.10722 packs, which require Xcode 27.0 and drop iOS 26.5 as a TargetPlatformVersion. - Run macOS jobs on the xcode-27 runner image and pin Xcode 27.0 - Target iOS 27.0 in the device test apps and simulator lookup - Disable PRI generation for Sentry.Maui's Windows TFM on macOS: MAUI 10.0.110 ships Microsoft.Maui.Controls.pri, so the WinAppSDK targets now invoke makepri.exe, which can't run on macOS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(apple): adopt the UIScene lifecycle in the iOS and Mac Catalyst apps Apps built with the Xcode 27 SDKs must use the UIScene lifecycle, or they sit on the launch screen. Port of f673d4b from #5725 (version7), with integration-test/maui-device mapped to integration-test/net9-maui. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build: fix Mac Catalyst/macOS minimums and IL2037 on the 27.0 packs - The 27.0 packs require Mac Catalyst 17.0 and macOS 14.0 for apps; raise the samples to match (as version7 already does) - The net10 iOS 27.0 pack emits spurious IL2037 for explicit-interface members in MAUI Compatibility (dotnet/macios#26529, fixed in .NET 11 only), which TreatWarningsAsErrors turns into a device test app failure Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci: bump XHarness to 11.0.0-prerelease.26506.3 for Xcode 27 The older mlaunch looks for Simulator.app where Xcode 27 no longer ships it (MT1008), so ios-tests failed to launch the app. Same bump as #5725. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: James Crosswell <jamescrosswell@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* chore: update modules/sentry-cocoa to 9.30.2 (#5735) Co-authored-by: GitHub <noreply@github.com> * fix: avoid first-chance exception when getting length of non-seekable attachment streams (#5736) * chore(deps): update Java SDK to v8.61.0 (#5734) * chore: update scripts/update-java.ps1 to 8.61.0 * fix(android): drop SentryEventProcessor marker interface from bindings Java SDK 8.61.0 adds io.sentry.internal.eventprocessor.SentryEventProcessor, an empty internal marker interface extending EventProcessor. The binding generator surfaces EventProcessor's default methods on it as explicit interface implementations qualified as `Sentry.JavaSdk.IEventProcessor` without `global::`, which resolves against IO.Sentry and fails with CS0538/CS0234. Nothing in .NET uses it, and the generated code for its implementers is unchanged without it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: GitHub <noreply@github.com> Co-authored-by: James Crosswell <jamescrosswell@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix: don't upload pre-trim PDBs for trimmed iOS and Mac Catalyst builds (#5732) * fix: don't upload pre-trim PDBs for trimmed iOS and Mac Catalyst builds When a trimmer output directory exists, take PDBs only from it (postprocessed-assemblies, else linked) and scan the output directory for native symbols only. The outer build of a multi-RID Apple build leaves PDBs out too, since each RID's inner build uploads its own. cli.Tests.ps1 gains a Mac Catalyst case, and both Apple cases now check that every uploaded PDB matches an assembly in the app bundle. Closes #5728 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: only skip output-directory PDBs on iOS and Mac Catalyst On desktop the trimmer runs during publish, after Build, so a linked directory at upload time is left over from an earlier publish. Removing the PDB types there left a console app's call with no -t at all, and sentry-cli then uploaded the apphost and runtime dylibs too. Other platforms now keep main's commands, split over the two calls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * build(deps): bump the github-actions group across 1 directory with 7 updates (#5738) * build(deps): bump the github-actions group across 1 directory with 7 updates Bumps the github-actions group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `7.0.1` | `7.0.2` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `8.0.1` | `8.0.2` | | [getsentry/craft/.github/workflows/changelog-preview.yml](https://github.com/getsentry/craft) | `2.33.3` | `2.34.1` | | [github/codeql-action/init](https://github.com/github/codeql-action) | `4.38.2` | `4.38.3` | | [github/codeql-action/analyze](https://github.com/github/codeql-action) | `4.38.2` | `4.38.3` | | [actions/create-github-app-token](https://github.com/actions/create-github-app-token) | `3.2.0` | `3.3.0` | | [getsentry/craft](https://github.com/getsentry/craft) | `2.33.3` | `2.34.1` | Updates `actions/upload-artifact` from 7.0.1 to 7.0.2 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@043fb46...cf430e0) Updates `actions/download-artifact` from 8.0.1 to 8.0.2 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@3e5f45b...9000827) Updates `getsentry/craft/.github/workflows/changelog-preview.yml` from 2.33.3 to 2.34.1 - [Release notes](https://github.com/getsentry/craft/releases) - [Changelog](https://github.com/getsentry/craft/blob/master/CHANGELOG.md) - [Commits](getsentry/craft@4e16427...3f2abdc) Updates `github/codeql-action/init` from 4.38.2 to 4.38.3 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@2892aa5...24c5418) Updates `github/codeql-action/analyze` from 4.38.2 to 4.38.3 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@2892aa5...24c5418) Updates `actions/create-github-app-token` from 3.2.0 to 3.3.0 - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Changelog](https://github.com/actions/create-github-app-token/blob/main/CHANGELOG.md) - [Commits](actions/create-github-app-token@bcd2ba4...64ab729) Updates `getsentry/craft` from 2.33.3 to 2.34.1 - [Release notes](https://github.com/getsentry/craft/releases) - [Changelog](https://github.com/getsentry/craft/blob/master/CHANGELOG.md) - [Commits](getsentry/craft@4e16427...3f2abdc) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/download-artifact dependency-version: 8.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: getsentry/craft/.github/workflows/changelog-preview.yml dependency-version: 2.34.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: github/codeql-action/init dependency-version: 4.38.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: github/codeql-action/analyze dependency-version: 4.38.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/create-github-app-token dependency-version: 3.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: getsentry/craft dependency-version: 2.34.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> * ci(release): Pass the release bot's client ID as client-id create-github-app-token deprecated app-id in favor of client-id, so every release run logs a deprecation warning. The action reads client-id first and falls back to app-id, so the token it creates stays the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ricardo Colombo Oliveira <github@ricoliv.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * chore: update modules/sentry-native to 0.17.4 (#5743) Co-authored-by: GitHub <noreply@github.com> * fix: run Sentry CLI targets after Native AOT optimized publish (#5731) From RC 2 the .NET 11 SDK publishes Native AOT apps without running Build: UseOptimizedPublish defaults to true when PublishAot is set, and Publish depends on _PublishOptimizedBuildAlternative, which runs only Compile and the publish targets (dotnet/sdk#54515). CheckSentryCLI, which every upload and release target depends on, hooked AfterTargets="Build", so symbol upload and release creation silently stopped. This is decided by the SDK, not the TFM, so net8.0-net10.0 apps are affected too. CheckSentryCLI, _CreateSentryRelease and _SentrySetCommits now also run after _PublishOptimizedBuildAlternative. Ported by hand from the version7 fix: _GetSentryRelease already runs after PrepareSentryCLI on main, so it needs no change. Fixes #5727 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(hangfire): send the recurring job's cron schedule as the monitor config (#5665) * feat(hangfire): Send recurring job schedule as monitor config Opt-in via UseSentry(o => o.SendRecurringJobSchedule = true). The in-progress check-in of a recurring job carries the job's cron and time zone so Sentry can create the monitor. Unsupported schedules fall back to a check-in without config. Co-Authored-By: Claude <noreply@anthropic.com> * ref(hangfire): Validate the recurring job schedule before capturing Check the crontab up front so the check-in goes out in a single call instead of relying on the hub to swallow an exception from Interval. The validator is shared with Sentry.Hangfire as a linked source file, since the unsigned assembly can't see Sentry's internals. Read the job through GetRecurringJobs, look up time zones with FindSystemTimeZoneById on .NET 6+, and add tests for UTC, unknown zones, deleted jobs, the UseSentry overload, and a real recurring job. Co-Authored-By: Claude <noreply@anthropic.com> * test(hangfire): Skip time zone tests when the zone is missing The linux-musl CI containers have no time zone database, so lookups of Europe/Berlin and Etc/UTC fail there. Co-Authored-By: Claude <noreply@anthropic.com> * fix(hangfire): Skip schedules Sentry would read differently Hangfire runs a job only on days that match both the day-of-month and day-of-week fields, while Sentry runs it on days that match either unless one of them starts with '*'. Don't send those schedules, nor ones with a reversed range such as 5-1 or SAT-SUN, which Sentry rejects. Co-Authored-By: Claude <noreply@anthropic.com> * feat(hangfire): Send recurring job schedules by default Jobs are only monitored when they have [SentryMonitorSlug], so sending the recurring job's schedule lets Sentry create or update the monitor, like the Spring and Quartz integrations. Set SendRecurringJobSchedule to false to keep managing the schedule in Sentry. Co-Authored-By: Claude <noreply@anthropic.com> * fix(hangfire): Create the check-in ID before the in-progress check-in The final check-in reused the ID returned for the in-progress one, which is empty when that one isn't captured. Create the ID up front, send it with the in-progress check-in, and store it in the job's items as before. Co-Authored-By: Claude <noreply@anthropic.com> * ref(hangfire): Rename SendRecurringJobSchedule to SendMonitorConfig Matches SentryQuartzOptions.SendMonitorConfig. Co-Authored-By: Claude <noreply@anthropic.com> * feat(hangfire): Don't send a monitor config when recurring jobs share a slug with different schedules * fix(hangfire): Don't treat a recurring job as conflicting with its own cached schedule Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * fix(maui): report in_foreground for apps using the UIScene lifecycle (#5730) * fix(maui): report in_foreground for apps using the UIScene lifecycle Sentry.Maui set InForeground from the application-level OnActivated, OnResignActivation and DidEnterBackground events. For apps using the UIScene lifecycle, which Xcode 27 requires, MAUI raises SceneOnActivated and friends instead, so InForeground stayed null and in_foreground disappeared from every iOS and Mac Catalyst event. The iOS integration test now asserts "in_foreground":true; without the Scene* handlers it fails in both Release and Debug. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit e75e6c9) * test(maui): adopt the UIScene lifecycle in the iOS integration test app The new "in_foreground":true assertion only guards the Scene* handlers if the app runs under scenes; otherwise the application-level OnActivated handler still sets InForeground and the assertion passes without the fix. UIKit stops calling the application-level OnActivated under scenes, so the OnActivated test hook moves to the SceneDelegate. Mirrors what #5725 did for integration-test/maui-device on version7. Refs #5726 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(maui): keep in_foreground true while another window is active Opening a second window on iPad fires SceneOnResignActivation and SceneDidEnterBackground for the first scene after SceneOnActivated for the second, so InForeground ended up false while the app was in use. Resign and background now leave it true if another connected scene is ForegroundActive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * build(deps): bump dotnet-sdk from 10.0.401 to 10.0.402 (#5737) * build(deps): bump dotnet-sdk from 10.0.401 to 10.0.402 Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 10.0.401 to 10.0.402. - [Release notes](https://github.com/dotnet/sdk/releases) - [Commits](dotnet/sdk@v10.0.401...v10.0.402) --- updated-dependencies: - dependency-name: dotnet-sdk dependency-version: 10.0.402 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * build: keep workload set 10.0.401 with SDK 10.0.402 Workload set 10.0.402 moves the iOS/MacCatalyst/macOS packs to 27.0.10722, which requires Xcode 27.0 and drops iOS 26.5 as a TargetPlatformVersion. The macos-26 runners only ship Xcode 26.x (Xcode 27 is a preview image), so keep the 10.0.401 workload set, which is in the same 10.0.400 feature band. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert "build: keep workload set 10.0.401 with SDK 10.0.402" This reverts commit fcfffea. * ci: move to Xcode 27 for the 10.0.402 workload set Workload set 10.0.402 ships the iOS/MacCatalyst/macOS 27.0.10722 packs, which require Xcode 27.0 and drop iOS 26.5 as a TargetPlatformVersion. - Run macOS jobs on the xcode-27 runner image and pin Xcode 27.0 - Target iOS 27.0 in the device test apps and simulator lookup - Disable PRI generation for Sentry.Maui's Windows TFM on macOS: MAUI 10.0.110 ships Microsoft.Maui.Controls.pri, so the WinAppSDK targets now invoke makepri.exe, which can't run on macOS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(apple): adopt the UIScene lifecycle in the iOS and Mac Catalyst apps Apps built with the Xcode 27 SDKs must use the UIScene lifecycle, or they sit on the launch screen. Port of f673d4b from #5725 (version7), with integration-test/maui-device mapped to integration-test/net9-maui. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build: fix Mac Catalyst/macOS minimums and IL2037 on the 27.0 packs - The 27.0 packs require Mac Catalyst 17.0 and macOS 14.0 for apps; raise the samples to match (as version7 already does) - The net10 iOS 27.0 pack emits spurious IL2037 for explicit-interface members in MAUI Compatibility (dotnet/macios#26529, fixed in .NET 11 only), which TreatWarningsAsErrors turns into a device test app failure Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci: bump XHarness to 11.0.0-prerelease.26506.3 for Xcode 27 The older mlaunch looks for Simulator.app where Xcode 27 no longer ships it (MT1008), so ios-tests failed to launch the app. Same bump as #5725. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: James Crosswell <jamescrosswell@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * build: keep the prerelease suffix until VersionPrefix has its own label Removing it in #5747 made Release builds pack as stable 7.0.0, which NuGet rejects (NU5104) while the packages depend on .NET 11 RC packages. The suffix now only applies to a bare prefix, so craft's bump to 7.0.0-rc.2 still publishes as exactly 7.0.0-rc.2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: ask MSBuild for the package version in the integration tests The hand-written Directory.Build.props parser couldn't follow the new conditional VersionSuffix: PowerShell returned the XmlElement, so the tests looked for Sentry.7.0.0-System.Xml.XmlElement.nupkg. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: pick the version line from MSBuild's output and report failures On the macOS runner the version lookup failed with no detail, because MSBuild's output was discarded. Match the version line instead of taking the last one, and include the exit code and output when it fails. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: read the package version from the built package in CI The publishing build runs the integration tests in a sparse checkout that has the built packages but no Sentry.csproj, so MSBuild couldn't evaluate the version there (MSB1009). Local runs still ask MSBuild. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: expect CoreCLR debug files in the Mac Catalyst CLI test The test came from main (#5732), where MAUI on .NET 10 runs on Mono. version7 runs this suite on .NET 11, where Mac Catalyst uses CoreCLR, so the uploads match the iOS test's list plus maui-app.r2r.dylib and Microsoft.MacCatalyst.pdb. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: GitHub <noreply@github.com> Co-authored-by: Stefan Jandl <reg@bitfox.at> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ricardo Colombo Oliveira <github@ricoliv.com> Co-authored-by: Dan Fuller <dfuller@sentry.io>
* chore: update modules/sentry-cocoa to 9.30.2 (#5735) Co-authored-by: GitHub <noreply@github.com> * fix: avoid first-chance exception when getting length of non-seekable attachment streams (#5736) * chore(deps): update Java SDK to v8.61.0 (#5734) * chore: update scripts/update-java.ps1 to 8.61.0 * fix(android): drop SentryEventProcessor marker interface from bindings Java SDK 8.61.0 adds io.sentry.internal.eventprocessor.SentryEventProcessor, an empty internal marker interface extending EventProcessor. The binding generator surfaces EventProcessor's default methods on it as explicit interface implementations qualified as `Sentry.JavaSdk.IEventProcessor` without `global::`, which resolves against IO.Sentry and fails with CS0538/CS0234. Nothing in .NET uses it, and the generated code for its implementers is unchanged without it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: GitHub <noreply@github.com> Co-authored-by: James Crosswell <jamescrosswell@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix: don't upload pre-trim PDBs for trimmed iOS and Mac Catalyst builds (#5732) * fix: don't upload pre-trim PDBs for trimmed iOS and Mac Catalyst builds When a trimmer output directory exists, take PDBs only from it (postprocessed-assemblies, else linked) and scan the output directory for native symbols only. The outer build of a multi-RID Apple build leaves PDBs out too, since each RID's inner build uploads its own. cli.Tests.ps1 gains a Mac Catalyst case, and both Apple cases now check that every uploaded PDB matches an assembly in the app bundle. Closes #5728 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: only skip output-directory PDBs on iOS and Mac Catalyst On desktop the trimmer runs during publish, after Build, so a linked directory at upload time is left over from an earlier publish. Removing the PDB types there left a console app's call with no -t at all, and sentry-cli then uploaded the apphost and runtime dylibs too. Other platforms now keep main's commands, split over the two calls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * build(deps): bump the github-actions group across 1 directory with 7 updates (#5738) * build(deps): bump the github-actions group across 1 directory with 7 updates Bumps the github-actions group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `7.0.1` | `7.0.2` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `8.0.1` | `8.0.2` | | [getsentry/craft/.github/workflows/changelog-preview.yml](https://github.com/getsentry/craft) | `2.33.3` | `2.34.1` | | [github/codeql-action/init](https://github.com/github/codeql-action) | `4.38.2` | `4.38.3` | | [github/codeql-action/analyze](https://github.com/github/codeql-action) | `4.38.2` | `4.38.3` | | [actions/create-github-app-token](https://github.com/actions/create-github-app-token) | `3.2.0` | `3.3.0` | | [getsentry/craft](https://github.com/getsentry/craft) | `2.33.3` | `2.34.1` | Updates `actions/upload-artifact` from 7.0.1 to 7.0.2 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@043fb46...cf430e0) Updates `actions/download-artifact` from 8.0.1 to 8.0.2 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@3e5f45b...9000827) Updates `getsentry/craft/.github/workflows/changelog-preview.yml` from 2.33.3 to 2.34.1 - [Release notes](https://github.com/getsentry/craft/releases) - [Changelog](https://github.com/getsentry/craft/blob/master/CHANGELOG.md) - [Commits](getsentry/craft@4e16427...3f2abdc) Updates `github/codeql-action/init` from 4.38.2 to 4.38.3 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@2892aa5...24c5418) Updates `github/codeql-action/analyze` from 4.38.2 to 4.38.3 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@2892aa5...24c5418) Updates `actions/create-github-app-token` from 3.2.0 to 3.3.0 - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Changelog](https://github.com/actions/create-github-app-token/blob/main/CHANGELOG.md) - [Commits](actions/create-github-app-token@bcd2ba4...64ab729) Updates `getsentry/craft` from 2.33.3 to 2.34.1 - [Release notes](https://github.com/getsentry/craft/releases) - [Changelog](https://github.com/getsentry/craft/blob/master/CHANGELOG.md) - [Commits](getsentry/craft@4e16427...3f2abdc) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/download-artifact dependency-version: 8.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: getsentry/craft/.github/workflows/changelog-preview.yml dependency-version: 2.34.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: github/codeql-action/init dependency-version: 4.38.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: github/codeql-action/analyze dependency-version: 4.38.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/create-github-app-token dependency-version: 3.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: getsentry/craft dependency-version: 2.34.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> * ci(release): Pass the release bot's client ID as client-id create-github-app-token deprecated app-id in favor of client-id, so every release run logs a deprecation warning. The action reads client-id first and falls back to app-id, so the token it creates stays the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ricardo Colombo Oliveira <github@ricoliv.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * chore: update modules/sentry-native to 0.17.4 (#5743) Co-authored-by: GitHub <noreply@github.com> * fix: run Sentry CLI targets after Native AOT optimized publish (#5731) From RC 2 the .NET 11 SDK publishes Native AOT apps without running Build: UseOptimizedPublish defaults to true when PublishAot is set, and Publish depends on _PublishOptimizedBuildAlternative, which runs only Compile and the publish targets (dotnet/sdk#54515). CheckSentryCLI, which every upload and release target depends on, hooked AfterTargets="Build", so symbol upload and release creation silently stopped. This is decided by the SDK, not the TFM, so net8.0-net10.0 apps are affected too. CheckSentryCLI, _CreateSentryRelease and _SentrySetCommits now also run after _PublishOptimizedBuildAlternative. Ported by hand from the version7 fix: _GetSentryRelease already runs after PrepareSentryCLI on main, so it needs no change. Fixes #5727 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(hangfire): send the recurring job's cron schedule as the monitor config (#5665) * feat(hangfire): Send recurring job schedule as monitor config Opt-in via UseSentry(o => o.SendRecurringJobSchedule = true). The in-progress check-in of a recurring job carries the job's cron and time zone so Sentry can create the monitor. Unsupported schedules fall back to a check-in without config. Co-Authored-By: Claude <noreply@anthropic.com> * ref(hangfire): Validate the recurring job schedule before capturing Check the crontab up front so the check-in goes out in a single call instead of relying on the hub to swallow an exception from Interval. The validator is shared with Sentry.Hangfire as a linked source file, since the unsigned assembly can't see Sentry's internals. Read the job through GetRecurringJobs, look up time zones with FindSystemTimeZoneById on .NET 6+, and add tests for UTC, unknown zones, deleted jobs, the UseSentry overload, and a real recurring job. Co-Authored-By: Claude <noreply@anthropic.com> * test(hangfire): Skip time zone tests when the zone is missing The linux-musl CI containers have no time zone database, so lookups of Europe/Berlin and Etc/UTC fail there. Co-Authored-By: Claude <noreply@anthropic.com> * fix(hangfire): Skip schedules Sentry would read differently Hangfire runs a job only on days that match both the day-of-month and day-of-week fields, while Sentry runs it on days that match either unless one of them starts with '*'. Don't send those schedules, nor ones with a reversed range such as 5-1 or SAT-SUN, which Sentry rejects. Co-Authored-By: Claude <noreply@anthropic.com> * feat(hangfire): Send recurring job schedules by default Jobs are only monitored when they have [SentryMonitorSlug], so sending the recurring job's schedule lets Sentry create or update the monitor, like the Spring and Quartz integrations. Set SendRecurringJobSchedule to false to keep managing the schedule in Sentry. Co-Authored-By: Claude <noreply@anthropic.com> * fix(hangfire): Create the check-in ID before the in-progress check-in The final check-in reused the ID returned for the in-progress one, which is empty when that one isn't captured. Create the ID up front, send it with the in-progress check-in, and store it in the job's items as before. Co-Authored-By: Claude <noreply@anthropic.com> * ref(hangfire): Rename SendRecurringJobSchedule to SendMonitorConfig Matches SentryQuartzOptions.SendMonitorConfig. Co-Authored-By: Claude <noreply@anthropic.com> * feat(hangfire): Don't send a monitor config when recurring jobs share a slug with different schedules * fix(hangfire): Don't treat a recurring job as conflicting with its own cached schedule Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * fix(maui): report in_foreground for apps using the UIScene lifecycle (#5730) * fix(maui): report in_foreground for apps using the UIScene lifecycle Sentry.Maui set InForeground from the application-level OnActivated, OnResignActivation and DidEnterBackground events. For apps using the UIScene lifecycle, which Xcode 27 requires, MAUI raises SceneOnActivated and friends instead, so InForeground stayed null and in_foreground disappeared from every iOS and Mac Catalyst event. The iOS integration test now asserts "in_foreground":true; without the Scene* handlers it fails in both Release and Debug. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit e75e6c9) * test(maui): adopt the UIScene lifecycle in the iOS integration test app The new "in_foreground":true assertion only guards the Scene* handlers if the app runs under scenes; otherwise the application-level OnActivated handler still sets InForeground and the assertion passes without the fix. UIKit stops calling the application-level OnActivated under scenes, so the OnActivated test hook moves to the SceneDelegate. Mirrors what #5725 did for integration-test/maui-device on version7. Refs #5726 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(maui): keep in_foreground true while another window is active Opening a second window on iPad fires SceneOnResignActivation and SceneDidEnterBackground for the first scene after SceneOnActivated for the second, so InForeground ended up false while the app was in use. Resign and background now leave it true if another connected scene is ForegroundActive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * build(deps): bump dotnet-sdk from 10.0.401 to 10.0.402 (#5737) * build(deps): bump dotnet-sdk from 10.0.401 to 10.0.402 Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 10.0.401 to 10.0.402. - [Release notes](https://github.com/dotnet/sdk/releases) - [Commits](dotnet/sdk@v10.0.401...v10.0.402) --- updated-dependencies: - dependency-name: dotnet-sdk dependency-version: 10.0.402 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * build: keep workload set 10.0.401 with SDK 10.0.402 Workload set 10.0.402 moves the iOS/MacCatalyst/macOS packs to 27.0.10722, which requires Xcode 27.0 and drops iOS 26.5 as a TargetPlatformVersion. The macos-26 runners only ship Xcode 26.x (Xcode 27 is a preview image), so keep the 10.0.401 workload set, which is in the same 10.0.400 feature band. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert "build: keep workload set 10.0.401 with SDK 10.0.402" This reverts commit fcfffea. * ci: move to Xcode 27 for the 10.0.402 workload set Workload set 10.0.402 ships the iOS/MacCatalyst/macOS 27.0.10722 packs, which require Xcode 27.0 and drop iOS 26.5 as a TargetPlatformVersion. - Run macOS jobs on the xcode-27 runner image and pin Xcode 27.0 - Target iOS 27.0 in the device test apps and simulator lookup - Disable PRI generation for Sentry.Maui's Windows TFM on macOS: MAUI 10.0.110 ships Microsoft.Maui.Controls.pri, so the WinAppSDK targets now invoke makepri.exe, which can't run on macOS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(apple): adopt the UIScene lifecycle in the iOS and Mac Catalyst apps Apps built with the Xcode 27 SDKs must use the UIScene lifecycle, or they sit on the launch screen. Port of f673d4b from #5725 (version7), with integration-test/maui-device mapped to integration-test/net9-maui. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build: fix Mac Catalyst/macOS minimums and IL2037 on the 27.0 packs - The 27.0 packs require Mac Catalyst 17.0 and macOS 14.0 for apps; raise the samples to match (as version7 already does) - The net10 iOS 27.0 pack emits spurious IL2037 for explicit-interface members in MAUI Compatibility (dotnet/macios#26529, fixed in .NET 11 only), which TreatWarningsAsErrors turns into a device test app failure Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci: bump XHarness to 11.0.0-prerelease.26506.3 for Xcode 27 The older mlaunch looks for Simulator.app where Xcode 27 no longer ships it (MT1008), so ios-tests failed to launch the app. Same bump as #5725. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: James Crosswell <jamescrosswell@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * docs: hand-written release notes for 7.0.0 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build: keep the prerelease suffix until VersionPrefix has its own label Removing it in #5747 made Release builds pack as stable 7.0.0, which NuGet rejects (NU5104) while the packages depend on .NET 11 RC packages. The suffix now only applies to a bare prefix, so craft's bump to 7.0.0-rc.2 still publishes as exactly 7.0.0-rc.2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Apply batched suggestions from code review Co-authored-by: James Crosswell <jamescrosswell@users.noreply.github.com> * test: ask MSBuild for the package version in the integration tests The hand-written Directory.Build.props parser couldn't follow the new conditional VersionSuffix: PowerShell returned the XmlElement, so the tests looked for Sentry.7.0.0-System.Xml.XmlElement.nupkg. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: pick the version line from MSBuild's output and report failures On the macOS runner the version lookup failed with no detail, because MSBuild's output was discarded. Match the version line instead of taking the last one, and include the exit code and output when it fails. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: add #5740 to the 7.0.0 release notes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: read the package version from the built package in CI The publishing build runs the integration tests in a sparse checkout that has the built packages but no Sentry.csproj, so MSBuild couldn't evaluate the version there (MSB1009). Local runs still ask MSBuild. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: expect CoreCLR debug files in the Mac Catalyst CLI test The test came from main (#5732), where MAUI on .NET 10 runs on Mono. version7 runs this suite on .NET 11, where Mac Catalyst uses CoreCLR, so the uploads match the iOS test's list plus maui-app.r2r.dylib and Microsoft.MacCatalyst.pdb. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: GitHub <noreply@github.com> Co-authored-by: Stefan Jandl <reg@bitfox.at> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ricardo Colombo Oliveira <github@ricoliv.com> Co-authored-by: Dan Fuller <dfuller@sentry.io>
Follows #5566 (RC 1) through to RC 2, targeting
version7.Closes #5724
The version bump
global.json)11.0.100-rc.1.26425.12811.0.100-rc.2.26504.105global.json)11.0.100-rc.1.26458.511.0.100-rc.2.26509.2Microsoft.*package refs11.0.0-rc.1.26425.12811.0.0-rc.2.26504.105net11.0-ios26.5/net11.0-maccatalyst26.5net11.0-ios27.0/net11.0-maccatalyst27.0The workload set is the one the macios RC 2 release names. NuGet also has a later
26513.2, but its manifests are identical.Android didn't move. The 37.2 RC 2 pack binds API 37.1 and 37.2, but still defaults to 37.0. It does switch Release assembly stores to Zstandard level 22 (dotnet/android#12415), which
Sentry.Android.AssemblyReaderalready decodes.Xcode 27: the runner image, the platform version and XHarness
The RC 2 Apple packs (
27.0.12212) accept only platform version 27.0 and require Xcode 27.0. Three things follow from that.macos-26tops out at Xcode 26.6; Xcode 27 is only on the previewxcode-27image (macOS 27). Every macOS job moves there, and the Xcode pin moves to/Applications/Xcode_27.app, which is the real path (the27.0names are symlinks). It's a preview image, so expect some queueing.net10.0-iosapp builds would need Xcode 26, but CI only builds the latest iOS TFM.Directory.Build.props: the device test app'sTargetPlatformVersion,integration-test/common.ps1,ios.Tests.ps1, the integration test app and the simulator picker indevice-test-utils.ps1. Only the device test app failed the build (NETSDK1140); the rest would have failed at test time.Simulator.appwithDeviceHub.app. Themlaunchin our pinned XHarness (26117.1) can't start the simulator, and XHarness reports that as exit code 80APP_CRASH, even though the app never launched.26506.3handles it.Apps built with Xcode 27 must adopt the UIScene lifecycle
Apple now requires scene adoption for apps built with the 27 SDKs, and MAUI RC 2's templates adopt it. Our apps hadn't. On an iOS 27 simulator,
Sentry.Samples.Mauisat on the.NETlaunch screen for minutes; with aUIApplicationSceneManifestand aSceneDelegateit renders immediately. The device test app and the iOS integration test app would have hung the same way. Changes:Sentry.Samples.Maui,Sentry.Maui.Device.TestApp,integration-test/maui-device): the manifest plus an emptyMauiUISceneDelegatesubclass, as in the templates.Sentry.Samples.Ios: it already had an unusedSceneDelegate. The UI moves into it fromAppDelegate.FinishedLaunching, and the manifest is added.Sentry.Samples.MacCatalystwas already scene-based.Three SDK bugs RC 2 surfaced
1.
in_foregrounddisappears from MAUI events on iOS and Mac Catalyst.Sentry.MauisetInForegroundfrom the app-levelOnActivated/OnResignActivation/DidEnterBackgroundlifecycle events. Under the scene lifecycle UIKit doesn't call those; MAUI raisesSceneOnActivatedand friends instead.InForegroundstaysnull, and the event processor writes that over the enricher's value. Now it listens to both.The integration test app's
OnActivatedhook had the same problem and moves to itsSceneDelegate. That test now also asserts"in_foreground":true; without the fix it fails in both Release and Debug.2. Native AOT publish stopped uploading symbols — any TFM, with the .NET 11 SDK. From RC 2,
PublishAotimpliesUseOptimizedPublish, andPublishgoes through a new_PublishOptimizedBuildAlternativethat runsCompileand the publish targets but neverBuild(dotnet/sdk#54515).CheckSentryCLI, which every upload and release target depends on, wasAfterTargets="Build". So nothing ran, and nothing errored. This is decided by the SDK, not the TFM, sonet8.0–net10.0apps published with the .NET 11 SDK are hit too.CheckSentryCLIand the release targets now also run after_PublishOptimizedBuildAlternative. This was caught by the native AOT publish cases incli.Tests.ps1, all of which failed fornet10.0andnet11.0. Release creation has no test; I checked locally that the release targets now run during an AOT publish.3. Apple symbol upload sent the wrong PDBs for post-processed framework assemblies. #5566 probed both
linked/andpostprocessed-assemblies/on the basis that only one ever exists. RC 2 writes both. The post-processor rewrites some assemblies (Microsoft.MacCatalyst,Microsoft.Maui.Controls,Microsoft.Maui.Essentialsin the MAUI sample) and gives them new PDB IDs, and only thepostprocessed-assembliescopies ship in the app bundle. So every PDB was uploaded twice, and thelinked/copies of those assemblies matched nothing that ships.linked/is now only the fallback.cli.Tests.ps1compares file names withSort-Object -Unique, so it couldn't have caught this; it now asserts that nothing is collected fromlinked/.#1 and #2 are not specific to
version7. A .NET 10 MAUI app built with Xcode 27 also has to adopt scenes. And once .NET 11 GA ships, anyone publishing Native AOT with the .NET 11 SDK hits #2, whatever the TFM. Backporting them tomainis tracked separately in #5726 (in_foreground) and #5727 (AOT publish).Worth flagging
CompatibilityILLink descriptors: a Release build that trims the Mac Catalyst sample produces noIL2037s. I left theWarningsNotAsErrorsdemotion from feat: add support for .NET 11 RC 1 #5566 in place for now.Build, so if that lands, trimmed publishes will need the same treatment.SentryCreateRelease, a plainBuildruns_GetSentryRelease(AfterBuild) beforeCheckSentryCLI(AfterTargets="Build") has setUseSentryCLI. That predates this branch and isn't touched here.Not in this PR
runtime-depscontainer pins stay on the11.0-preview-*tags, which still resolve. Per theCONTRIBUTING.mdchecklist they get blanked at GA.CONTRIBUTING.md's upgrade checklist gains a row for each of these.🤖 Generated with Claude Code