Tags: dotnet/maui
Tags
[release/10.0.1xx-sr10] [Android] Fix scrolling performance in shadow… …ed containers (#37312) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Backport of #37291 to `release/10.0.1xx-sr10`. /cc @kubaflo Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>
[release/11.0.1xx-preview7] [XAML] Re-enable Incremental Hot Reload b… …y default in Debug (#37163) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Backport of #37157 to release/11.0.1xx-preview7 Re-enables XAML Incremental Hot Reload by default for Debug builds while preserving the opt-out and keeping Release/publish builds disabled by default. The legacy hot-reload fallback MSBuild test remains explicitly pinned to XIHR off. **Validation** - The backport patch matches squash merge commit `6bb9daf7aa47bde8e750635959e7c4db3c46561e` exactly (`git range-diff`). - `dotnet build Microsoft.Maui.BuildTasks.slnf` passed with 0 warnings and 0 errors. - `MSBuildTests.HotReloadSupportForXSG` passed for Debug and Release (2/2). - `git diff --check` passes. cc @PureWeen @Redth Co-authored-by: Jonathan Dick <jodick@microsoft.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Update new dotnet/dotnet barid 322330 and dotnet/macios barid 322326 (#… …36500) ``` darc update-dependencies --id 322330 darc update-dependencies --id 322326 #macios ``` This pull request updates several dependency versions in the project to newer preview builds. The changes are focused on aligning the .NET SDK, runtime, Extensions, and macOS/iOS/tvOS/MacCatalyst SDKs to the latest available versions for improved stability and compatibility. Dependency version updates: * Updated `Microsoft.NET.Sdk` and `Microsoft.NETCore.App.Ref` to version `11.0.100-preview.6.26359.118` in both `eng/Version.Details.xml` and `eng/Versions.props`, ensuring the project uses the latest .NET SDK and runtime. [[1]](diffhunk://#diff-fb62e94a1d6f29f863e3d0a22aa38269f6cd1d7f03b109dc06e2cbf2548b86d3L3-R9) [[2]](diffhunk://#diff-1ea18ff65faa2ae6fed570b83747086d0317f5e4bc325064f6c14319a9c4ff67L34-R56) * Updated multiple `Microsoft.Extensions.*` package versions to `11.0.0-preview.6.26359.118` in both dependency and version property files, keeping the Extensions libraries consistent with the latest preview. [[1]](diffhunk://#diff-fb62e94a1d6f29f863e3d0a22aa38269f6cd1d7f03b109dc06e2cbf2548b86d3L56-R158) [[2]](diffhunk://#diff-1ea18ff65faa2ae6fed570b83747086d0317f5e4bc325064f6c14319a9c4ff67L34-R56) * Updated `Microsoft.AspNetCore.*` and related dependencies to `11.0.0-preview.6.26359.118` in `eng/Version.Details.xml` for improved ASP.NET Core support. * Updated macOS, iOS, tvOS, and MacCatalyst SDK dependencies to `26.5.11720-net11-p6` in both dependency and version property files, ensuring the latest platform SDKs are used. [[1]](diffhunk://#diff-fb62e94a1d6f29f863e3d0a22aa38269f6cd1d7f03b109dc06e2cbf2548b86d3L20-R34) [[2]](diffhunk://#diff-1ea18ff65faa2ae6fed570b83747086d0317f5e4bc325064f6c14319a9c4ff67L70-R73) * Updated various toolset dependencies (e.g., `Microsoft.DotNet.Build.Tasks.Feed`, `Microsoft.DotNet.Arcade.Sdk`) to `11.0.0-beta.26359.118` for build infrastructure improvements. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Stabilize Version 10.0.90 (#36509) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Summary Completes the SR9 servicing-version transition after the required content backports. - Preserves `PatchVersion` at `90`. - Sets `PreReleaseVersionLabel` to `servicing`. - Enables `StabilizePackageVersion` so SR9 produces stable release packages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Revert PR #33584: restore BindableObject property-context lookup model ( #35970) > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could <a href="https://github.com/dotnet/maui/wiki/Testing-PR-Builds">test the resulting artifacts</a> from this PR and let us know in a comment if this change resolves your issue. Thank you! This reverts the `BindableObject` micro-optimization changes from PR #33584 on `release/10.0.1xx-sr8` due to regression risk. The revert restores the previous property-context storage/access behavior and removes the `InternalId` path added in that PR. - **BindableObject revert (Controls.Core)** - Restore `_properties` to `Dictionary<BindableProperty, BindablePropertyContext>`. - Remove `CollectionsMarshal`-based lookup/add path and `NETSTANDARD` split logic. - Restore `CreateAndAddContext` behavior (`_properties.Add(property, context)`). - Revert `GetContext` and `GetValues<T>` to `BindableProperty`-keyed lookups. - Restore `GetLocalValueEnumerator()`, `LocalValueEnumerator`, and `LocalValueEntry`. - **BindableProperty revert (Controls.Core)** - Remove `InternalId` infrastructure: - `using System.Threading` - `_nextInternalId` - `InternalId` field - `Interlocked.Increment(...)` assignment in constructor - **Benchmark cleanup** - Remove `src/Core/tests/Benchmarks/Benchmarks/BindableObjectBenchmarker.cs` introduced by PR #33584. - **Regression tests added (Controls.Core.UnitTests)** - Add `GetValuesReturnsSetStateAndValue` to validate `GetValues<T>` preserves expected set-state/value semantics for set vs unset properties. - Add `LocalValueEnumeratorReturnsLocallySetValues` to validate the restored local value enumeration path (`GetLocalValueEnumerator` / `LocalValueEntry`) over locally set values. - Add `DefaultValueCreatorCachesValueWhenReentrantPropertyAddsResizeStore` to validate re-entrant `DefaultValueCreator` execution (including additional property sets that grow the backing store) still caches the created value and invokes the creator once. Example of restored lookup path: ```csharp readonly Dictionary<BindableProperty, BindablePropertyContext> _properties = new Dictionary<BindableProperty, BindablePropertyContext>(4); internal BindablePropertyContext GetContext(BindableProperty property) => _properties.TryGetValue(property, out var result) ? result : null; BindablePropertyContext GetOrCreateContext(BindableProperty property) => GetContext(property) ?? CreateAndAddContext(property); ``` --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rmarinho <1235097+rmarinho@users.noreply.github.com> Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>
Backport simulator runtime provisioning fix (#35773) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Summary - Backports only the simulator runtime provisioning fix from PR #35364 commit 7b16d25. - Avoids deleting all simulator runtimes if the first install attempt fails. - Tries the exact universal, default universal, and default iOS simulator runtimes, with pre/post simulator diagnostics. ## Validation - `git diff --cached --check` - `ruby -e 'require "yaml"; YAML.load_file(ARGV.fetch(0)); puts "ruby yaml parse: ok"' eng/pipelines/common/provision.yml` Co-authored-by: bot <bot@test> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
[release/10.0.1xx-sr7] Fix BackButtonBehavior_IconOverride_CustomIcon… …ShownOnBackButton on iOS 26 (#35566) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Issue UI test `BackButtonBehavior_IconOverride_CustomIconShownOnBackButton` fails on iOS 26 (vlatest) on the `release/10.0.1xx-sr7` branch. - Build: [1427432](https://dev.azure.com/dnceng-public/public/_build/results?buildId=1427432) (`maui-pr-uitests` on SR7 head `bdca474345`) - Failed twice (both attempts) — deterministic, not flaky - Failure: `System.TimeoutException : Timed out waiting for element...` at `ShellNavigationFeatureTests.cs:line 922` - Other platforms (Android API 30, iOS 18.5, MacCatalyst) all pass ### Root cause PR #35521 backported the `_sendPopPending` product fix from #34890 to SR7 and **removed** the `Assert.Ignore` from tests 50 and 51 (since the product is now fixed and those tests should pass on iOS 26). It left in place an obsolete iOS 26 workaround in test 52: ```csharp [Test, Order(52)] public void BackButtonBehavior_IconOverride_CustomIconShownOnBackButton() { if (iOS26OrHigher) { NavigateToDetail1AndWait(); // ← obsolete after #35521 } App.WaitForElement("Detail1GoBackButton"); ... ``` That workaround was originally needed when test 51 was being skipped on iOS 26 (so test 52 started from Main and had to navigate to Detail1 itself). Now that #35521 un-ignored test 51, the flow on iOS 26 is: 1. Test 51 runs, calls `NavigateToDetail1AndWait()` and ends with `ShellScreenshot()` — UI is on **Detail1**, no reset 2. Test 52 starts on Detail1, hits `if (iOS26OrHigher)` and tries to navigate **Main → Detail1** 3. But we're already on Detail1, so `NavigateToDetail1Button` isn't visible → `TimeoutException` This is purely a test state-leak bug — not a product regression. ### Fix Remove the now-redundant `iOS26OrHigher` block from test 52. After the removal, test 52 starts by tapping `Detail1GoBackButton` directly, which is correct because: - Test 51 leaves the UI on Detail1 - `Detail1GoBackButton` is a custom page-content button (created via `ShellNavHelper.CreateNavButton(..., "Detail1GoBackButton")` in `ShellNavigationControlPage.xaml.cs`), **not** the shell back arrow — it is unaffected by test 51's `IsVisibleButton` toggle (which sets `BackButtonBehavior.IsVisible=false` on the shell back arrow) ### Diff ```diff [Test, Order(52)] public void BackButtonBehavior_IconOverride_CustomIconShownOnBackButton() { - if (iOS26OrHigher) - { - NavigateToDetail1AndWait(); - } App.WaitForElement("Detail1GoBackButton"); App.Tap("Detail1GoBackButton"); ... ``` ### Follow-up (main) `main` and `net11.0` have the **opposite** asymmetry: the product fix (`_sendPopPending` reset) is already there, but tests 50 and 51 still carry the `Assert.Ignore` (so iOS 26 coverage for those scenarios is silently skipped). When those `Assert.Ignore` lines get removed, the same workaround should also be removed from test 52 — otherwise main will hit the same failure this PR fixes here. ### Validation - Tested locally: only the obsolete branch is removed; remaining test body matches the iOS 18.5 / Android / MacCatalyst flow that already passes - The 4 deleted lines were dead code on every other platform anyway (`iOS26OrHigher` is false there) - No product code touched Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
[release/11.0.1xx-preview4] Update dependencies from dotnet/dotnet, d… …otnet/macios (#35271) This pull request updates the following dependencies [marker]: <> (Begin:5ff6fff7-e896-44f6-b87f-673c4569f4a5) ## From https://github.com/dotnet/macios - **Subscription**: [5ff6fff7-e896-44f6-b87f-673c4569f4a5](https://maestro.dot.net/subscriptions?search=5ff6fff7-e896-44f6-b87f-673c4569f4a5) - **Build**: [20260501.3](https://dev.azure.com/devdiv/DevDiv/_build/results?buildId=13990367) ([312733](https://maestro.dot.net/channel/9588/github:dotnet:macios/build/312733)) - **Date Produced**: May 1, 2026 8:08:10 AM UTC - **Commit**: [cbe42632ab063a8b23df492692f92beeeda68a16](dotnet/macios@cbe4263) - **Branch**: [release/11.0.1xx-preview4](https://github.com/dotnet/macios/tree/release/11.0.1xx-preview4) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [26.4.11511-net11-p4 to 26.4.11514-net11-p4][3] - Microsoft.iOS.Sdk.net11.0_26.4 - Microsoft.MacCatalyst.Sdk.net11.0_26.4 - Microsoft.macOS.Sdk.net11.0_26.4 - Microsoft.tvOS.Sdk.net11.0_26.4 [3]: dotnet/macios@16dad20...cbe4263 [DependencyUpdate]: <> (End) [marker]: <> (End:5ff6fff7-e896-44f6-b87f-673c4569f4a5) [marker]: <> (Begin:74f9a062-0c3c-4244-97f5-1bdef5ec5486) ## From https://github.com/dotnet/dotnet - **Subscription**: [74f9a062-0c3c-4244-97f5-1bdef5ec5486](https://maestro.dot.net/subscriptions?search=74f9a062-0c3c-4244-97f5-1bdef5ec5486) - **Build**: [20260430.15](https://dev.azure.com/dnceng/internal/_build/results?buildId=2964538) ([312694](https://maestro.dot.net/channel/9588/github:dotnet:dotnet/build/312694)) - **Date Produced**: May 1, 2026 3:25:05 AM UTC - **Commit**: [4370ea16341331f045fa9b89cc46e03aed27195c](dotnet/dotnet@4370ea1) - **Branch**: [release/11.0.1xx-preview4](https://github.com/dotnet/dotnet/tree/release/11.0.1xx-preview4) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [11.0.0-preview.4.26224.122 to 11.0.0-preview.4.26230.115][2] - Microsoft.AspNetCore.Authentication.Facebook - Microsoft.AspNetCore.Authentication.Google - Microsoft.AspNetCore.Authentication.MicrosoftAccount - Microsoft.AspNetCore.Authorization - Microsoft.AspNetCore.Components - Microsoft.AspNetCore.Components.Analyzers - Microsoft.AspNetCore.Components.Forms - Microsoft.AspNetCore.Components.Web - Microsoft.AspNetCore.Components.WebAssembly - Microsoft.AspNetCore.Components.WebAssembly.Server - Microsoft.AspNetCore.Components.WebView - Microsoft.AspNetCore.Metadata - Microsoft.Extensions.Configuration - Microsoft.Extensions.Configuration.Abstractions - Microsoft.Extensions.Configuration.Json - Microsoft.Extensions.DependencyInjection - Microsoft.Extensions.DependencyInjection.Abstractions - Microsoft.Extensions.FileProviders.Abstractions - Microsoft.Extensions.Hosting.Abstractions - Microsoft.Extensions.Logging - Microsoft.Extensions.Logging.Abstractions - Microsoft.Extensions.Logging.Console - Microsoft.Extensions.Logging.Debug - Microsoft.Extensions.Primitives - Microsoft.JSInterop - Microsoft.NETCore.App.Ref - From [11.0.0-beta.26224.122 to 11.0.0-beta.26230.115][2] - Microsoft.DotNet.Arcade.Sdk - Microsoft.DotNet.Build.Tasks.Feed - Microsoft.DotNet.Build.Tasks.Installers - Microsoft.DotNet.Build.Tasks.Workloads - Microsoft.DotNet.Helix.Sdk - Microsoft.DotNet.RemoteExecutor - Microsoft.DotNet.SharedFramework.Sdk - Microsoft.DotNet.XUnitExtensions - From [11.0.100-preview.4.26224.122 to 11.0.100-preview.4.26230.115][2] - Microsoft.NET.Sdk [2]: dotnet/dotnet@48bd87d...4370ea1 [DependencyUpdate]: <> (End) [marker]: <> (End:74f9a062-0c3c-4244-97f5-1bdef5ec5486) [marker]: <> (Begin:Coherency Updates) ## Coherency Updates The following updates ensure that dependencies with a *CoherentParentDependency* attribute were produced in a build used as input to the parent dependency's build. See [Dependency Description Format](https://github.com/dotnet/arcade/blob/master/Documentation/DependencyDescriptionFormat.md#dependency-description-overview) [DependencyUpdate]: <> (Begin) - **Coherency Updates**: - **Microsoft.MacCatalyst.Sdk.net10.0_26.4**: from 26.4.10255 to 26.4.10259 (parent: Microsoft.MacCatalyst.Sdk.net11.0_26.4) - **Microsoft.macOS.Sdk.net10.0_26.4**: from 26.4.10255 to 26.4.10259 (parent: Microsoft.macOS.Sdk.net11.0_26.4) - **Microsoft.iOS.Sdk.net10.0_26.4**: from 26.4.10255 to 26.4.10259 (parent: Microsoft.iOS.Sdk.net11.0_26.4) - **Microsoft.tvOS.Sdk.net10.0_26.4**: from 26.4.10255 to 26.4.10259 (parent: Microsoft.tvOS.Sdk.net11.0_26.4) [DependencyUpdate]: <> (End) [marker]: <> (End:Coherency Updates) --------- Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: GitHub Actions <github-actions@xamarin.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use Azure Artifacts Maven feed for CFSClean network isolation complia… …nce (#35089) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Problem The official build pipeline (`dotnet-maui`, def 1095) fails because [CFSClean network isolation](#34540) blocks direct access to `repo.maven.apache.org`. This breaks two separate Gradle invocations: 1. **`src/Core/AndroidNative` build** — our own Gradle project 2. **`Microsoft.Android.Sdk.Bindings.Gradle.targets`** — Android SDK binding generator in `Core.csproj` Per [1ES CFS guidance](https://aka.ms/1es/netiso/CFS), the fix is to route all Maven dependency resolution through an Azure Artifacts feed with upstream sources. ## Fix ### Gradle configuration changes - **`settings.gradle`** — Replace `mavenCentral()`, `google()`, `gradlePluginPortal()` with the `dotnet-public-maven` Azure Artifacts feed. Add the [Azure Artifacts Gradle credential provider](https://pkgs.dev.azure.com/artifacts-public/PublicTools/_packaging/AzureArtifacts/maven/v1) plugin (v1.1.1) for local authentication. - **`build.gradle`** — Point `buildscript.repositories` to the same feed for AGP classpath resolution. - **`eng/init.gradle`** — Global Gradle init script that redirects any remaining Maven Central/Google Maven references (e.g. from `Microsoft.Android.Sdk.Bindings.Gradle.targets`) to the feed. Installed into `GRADLE_USER_HOME` by the pipeline. ### Pipeline changes - **`cache-gradle.yml`** — Copy `init.gradle` into `GRADLE_USER_HOME` **after** cache restore to prevent stale cached copies. Uses `$(GRADLE_USER_HOME)` variable for the destination path. ### Why the ingestion script (`eng/ingest-maven-deps.sh`) is needed The `dotnet-public-maven` feed proxies Maven Central, but new packages require an **authenticated first-time pull** to be saved. The Gradle credential provider plugin has two limitations that prevent `dotnet build` from self-ingesting: 1. **Skips entirely in CI** — when `TF_BUILD=True` (Azure Pipelines), the plugin is a no-op 2. **Doesn't cover all Gradle scopes** — the plugin injects auth into `pluginManagement.repositories` and `project.repositories`, but NOT `buildscript.repositories` or AGP's internal `detachedConfiguration` scopes. This means `dotnet build` locally cannot ingest new packages through the Android SDK binding targets even with correct credentials. We verified this by adding an un-ingested package (`io.coil-kt:coil:2.7.0`) — `dotnet build` fails with 401 despite the credential provider authenticating successfully. **Upstream issue:** [microsoft/artifacts-credprovider#671](microsoft/artifacts-credprovider#671) The script works around these gaps by: 1. Acquiring an auth token via the .NET credential provider (MSAL) 2. Pre-ingesting platform-specific artifacts (aapt2) for all OS variants (macOS/Linux/Windows) 3. Running Gradle with `--refresh-dependencies` to bypass local cache 4. Falling back to `curl` with Bearer token for unreachable scopes **Run `./eng/ingest-maven-deps.sh` after adding or updating any Maven/Gradle dependency.** ### Documentation updates - `settings.gradle` — explains the feed setup and when to run the script - `gradle-wrapper.properties` — warning not to upgrade Gradle past 8.x (`dotnet/android#10738`) - `copilot-instructions.md` — always-on guidance for Gradle 401 failures - `azdo-build-investigator/SKILL.md` — error signatures and DO NOTs for CI investigation - `android.instructions.md` — quick reference for Android developers ## Verified - ✅ Internal official build [2961149](https://dev.azure.com/dnceng/internal/_build/results?buildId=2961149) passed — Pack macOS + Pack Windows both green - ✅ Same pattern used by dotnet/aspnetcore ([PR #64962](dotnet/aspnetcore#64962)) - ✅ Feed is public — no auth needed to read already-ingested packages, external contributors can build without credentials - ✅ Locally verified: `dotnet build` works for already-ingested packages, fails for new ones (confirming script is needed) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Matt Mitchell (.NET) <mmitche@microsoft.com>
PreviousNext