From 94cfd82ae52c0244f9d9e2b35effd7ec464ffc71 Mon Sep 17 00:00:00 2001 From: Milos Kotlar Date: Fri, 19 Dec 2025 09:37:58 +0100 Subject: [PATCH 1/5] Add iOS and MacCatalyst CoreCLR UI test stages to pipeline --- eng/pipelines/common/ui-tests.yml | 87 +++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/eng/pipelines/common/ui-tests.yml b/eng/pipelines/common/ui-tests.yml index efdad1964c0c..4c31f59d3e9c 100644 --- a/eng/pipelines/common/ui-tests.yml +++ b/eng/pipelines/common/ui-tests.yml @@ -205,6 +205,54 @@ stages: platform: 'Android' artifactName: 'uitest-snapshot-results-android-$(System.StageName)-$(System.JobName)-$(System.JobAttempt)' + - stage: ios_ui_tests_coreclr + displayName: iOS UITests CoreCLR + dependsOn: build_ui_tests_coreclr + jobs: + - ${{ each project in parameters.projects }}: + - ${{ if ne(project.ios, '') }}: + - ${{ each version in parameters.iosVersions }}: + - ${{ if not(containsValue(project.iosVersionsExclude, version)) }}: + - job: ios_ui_tests_coreclr_${{ project.name }}_${{ replace(version, '.', '_') }} + strategy: + matrix: + ${{ each categoryGroup in parameters.categoryGroupsToTest }}: + ${{ categoryGroup }}: + CATEGORYGROUP: ${{ categoryGroup }} + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} # how long to run the job before automatically cancelling + workspace: + clean: all + displayName: ${{ coalesce(project.desc, project.name) }} (v${{ version }}) + pool: ${{ parameters.iosPool }} + variables: + REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE) + APPIUM_HOME: $(System.DefaultWorkingDirectory)/.appium/ + steps: + - template: ui-tests-steps.yml + parameters: + platform: ios + ${{ if eq(version, 'latest') }}: + version: 18.5 + ${{ if ne(version, 'latest') }}: + version: ${{ version }} + path: ${{ project.ios }} + app: ${{ project.app }} + ${{ if and(eq(version, 'latest'), true) }}: + device: ios-simulator-64 + ${{ if and(ne(version, 'latest'), true) }}: + device: ios-simulator-64_${{ version }} + provisionatorChannel: ${{ parameters.provisionatorChannel }} + runtimeVariant : "CoreCLR" + testFilter: $(CATEGORYGROUP) + headless: ${{ parameters.headless }} + skipProvisioning: ${{ parameters.skipProvisioning }} + + # Collect and publish iOS snapshot diffs + - template: ui-tests-collect-snapshot-diffs.yml + parameters: + platform: 'iOS' + artifactName: 'uitest-snapshot-results-ios-$(System.StageName)-$(System.JobName)-$(System.JobAttempt)' + - stage: ios_ui_tests_mono displayName: iOS UITests Mono dependsOn: build_ui_tests @@ -458,3 +506,42 @@ stages: parameters: platform: 'Mac' artifactName: 'uitest-snapshot-results-mac-$(System.StageName)-$(System.JobName)-$(System.JobAttempt)' + + - stage: maccatalyst_ui_tests_coreclr + displayName: MacCatalyst UITests CoreCLR + dependsOn: build_ui_tests_coreclr + jobs: + - ${{ each project in parameters.projects }}: + - ${{ if ne(project.mac, '') }}: + - job: maccatalyst_ui_tests_coreclr_${{ project.name }} + strategy: + matrix: + ${{ each categoryGroup in parameters.categoryGroupsToTest }}: + ${{ categoryGroup }}: + CATEGORYGROUP: ${{ categoryGroup }} + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} # how long to run the job before automatically cancelling + workspace: + clean: all + displayName: ${{ coalesce(project.desc, project.name) }} + pool: ${{ parameters.macosPool }} + variables: + REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE) + APPIUM_HOME: $(System.DefaultWorkingDirectory)/.appium/ + steps: + - template: ui-tests-steps.yml + parameters: + platform: catalyst + version: "15.3" + device: mac + path: ${{ project.mac }} + app: ${{ project.app }} + provisionatorChannel: ${{ parameters.provisionatorChannel }} + runtimeVariant : "CoreCLR" + testFilter: $(CATEGORYGROUP) + skipProvisioning: ${{ parameters.skipProvisioning }} + + # Collect and publish MacCatalyst snapshot diffs + - template: ui-tests-collect-snapshot-diffs.yml + parameters: + platform: 'MacCatalyst' + artifactName: 'uitest-snapshot-results-maccatalyst-$(System.StageName)-$(System.JobName)-$(System.JobAttempt)' From 9dc109ba461a9e50dfedeef20a035bb196a9899a Mon Sep 17 00:00:00 2001 From: Milos Kotlar Date: Fri, 9 Jan 2026 13:49:58 +0100 Subject: [PATCH 2/5] Remove TargetFramework property for CoreCLR UI tests --- eng/cake/dotnet.cake | 1 - 1 file changed, 1 deletion(-) diff --git a/eng/cake/dotnet.cake b/eng/cake/dotnet.cake index fe16cca87da4..29f911c6e794 100644 --- a/eng/cake/dotnet.cake +++ b/eng/cake/dotnet.cake @@ -209,7 +209,6 @@ Task("uitests-apphost") { Information("Building for CoreCLR"); properties.Add("UseMonoRuntime", "false"); - properties.Add("TargetFramework", $"{DefaultDotnetVersion}-android"); } if (USE_NATIVE_AOT) From e7adfaff259d2f3a6cd4b0a1898a6b0bb8b9fb84 Mon Sep 17 00:00:00 2001 From: Milos Kotlar Date: Fri, 9 Jan 2026 14:08:07 +0100 Subject: [PATCH 3/5] Update .NET version to 11 in Directory.Build.props --- Directory.Build.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 149a1c461880..61fe87f137ec 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -58,12 +58,12 @@ - <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">10 + <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">11 <_MauiDotNetVersionMinor Condition="'$(_MauiDotNetVersionMinor)' == ''">0 <_MauiDotNetVersion Condition="'$(_MauiDotNetVersion)' == ''">$(_MauiDotNetVersionMajor).$(_MauiDotNetVersionMinor) <_MauiDotNetTfm Condition="'$(_MauiDotNetTfm)' == ''">net$(_MauiDotNetVersion) - <_MauiPreviousDotNetVersionMajor Condition="'$(_MauiPreviousDotNetVersionMajor)' == ''">9 + <_MauiPreviousDotNetVersionMajor Condition="'$(_MauiPreviousDotNetVersionMajor)' == ''">10 <_MauiPreviousDotNetVersionMinor Condition="'$(_MauiPreviousDotNetVersionMinor)' == ''">0 <_MauiPreviousDotNetVersion Condition="'$(_MauiPreviousDotNetVersion)' == ''">$(_MauiPreviousDotNetVersionMajor).$(_MauiPreviousDotNetVersionMinor) <_MauiPreviousDotNetVersionNoDot Condition="'$(_MauiPreviousDotNetVersionNoDot)' == ''">$(_MauiPreviousDotNetVersionMajor)$(_MauiPreviousDotNetVersionMinor) From aa5941dac444a34a844ce8bcb0289a342a6d8dee Mon Sep 17 00:00:00 2001 From: Milos Kotlar Date: Fri, 9 Jan 2026 14:20:58 +0100 Subject: [PATCH 4/5] Revert changes --- Directory.Build.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 61fe87f137ec..149a1c461880 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -58,12 +58,12 @@ - <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">11 + <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">10 <_MauiDotNetVersionMinor Condition="'$(_MauiDotNetVersionMinor)' == ''">0 <_MauiDotNetVersion Condition="'$(_MauiDotNetVersion)' == ''">$(_MauiDotNetVersionMajor).$(_MauiDotNetVersionMinor) <_MauiDotNetTfm Condition="'$(_MauiDotNetTfm)' == ''">net$(_MauiDotNetVersion) - <_MauiPreviousDotNetVersionMajor Condition="'$(_MauiPreviousDotNetVersionMajor)' == ''">10 + <_MauiPreviousDotNetVersionMajor Condition="'$(_MauiPreviousDotNetVersionMajor)' == ''">9 <_MauiPreviousDotNetVersionMinor Condition="'$(_MauiPreviousDotNetVersionMinor)' == ''">0 <_MauiPreviousDotNetVersion Condition="'$(_MauiPreviousDotNetVersion)' == ''">$(_MauiPreviousDotNetVersionMajor).$(_MauiPreviousDotNetVersionMinor) <_MauiPreviousDotNetVersionNoDot Condition="'$(_MauiPreviousDotNetVersionNoDot)' == ''">$(_MauiPreviousDotNetVersionMajor)$(_MauiPreviousDotNetVersionMinor) From 46e50baa5ae956ad58d921b9f9dee4feeb087687 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Tue, 13 Jan 2026 20:16:45 +0000 Subject: [PATCH 5/5] [ci] Move to net11 tfms --- Directory.Build.props | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 149a1c461880..f1ea3608f1de 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -58,7 +58,7 @@ - <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">10 + <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">11 <_MauiDotNetVersionMinor Condition="'$(_MauiDotNetVersionMinor)' == ''">0 <_MauiDotNetVersion Condition="'$(_MauiDotNetVersion)' == ''">$(_MauiDotNetVersionMajor).$(_MauiDotNetVersionMinor) <_MauiDotNetTfm Condition="'$(_MauiDotNetTfm)' == ''">net$(_MauiDotNetVersion) @@ -166,10 +166,10 @@ - 26.0 - 26.0 - 26.0 - 26.0 + 26.2 + 26.2 + 26.2 + 26.2 36.0 26.0 @@ -230,8 +230,8 @@ $(WindowsMauiPlatforms);$(MauiDeviceTestsPlatforms) net$(_MauiDotNetVersion)-android;$(MauiDeviceTestsPlatforms) - net11.0-maccatalyst;$(MauiDeviceTestsPlatforms) - net11.0-ios;$(MauiDeviceTestsPlatforms) + net$(_MauiDotNetVersion)-maccatalyst;$(MauiDeviceTestsPlatforms) + net$(_MauiDotNetVersion)-ios;$(MauiDeviceTestsPlatforms) $(WindowsMauiPlatforms);$(MauiEmbeddingPlatforms)