Which version of Xcode works with .NET MAUI?

Updating Xcode by itself can break .NET MAUI iOS builds. This page shows which Xcode goes with which MAUI workload, and how to fix a mismatch.

This data may be out of date. The automatic check hasn't run since . Confirm against the official .NET for iOS releases before changing anything.

Status as of Oct 6, 2026

Xcode 27.0 is the one to use

The newest .NET for iOS (27.0.10722, .NET 10) requires Xcode 27.0, which is also Apple's latest release. Update Xcode and your MAUI workloads together, as a pair — updating only one of them breaks iOS builds.

Xcode
27.0
.NET / MAUI
.NET 10 · MAUI 10.0.110+
Workload set
10.0.401.1
.NET for iOS
27.0.10722
Needs macOS
26.6+
dotnet workload install maui --version 10.0.401.1

Xcode 27.1 RC 1 is out. Betas are never supported by a stable workload — install betas side by side and don't make them your selected Xcode.

Source: .NET for iOS release notes, Sep 29, 2026 · Apple's latest Xcode: 27.0 (Sep 14, 2026)

The rule

Every .NET for iOS workload release requires exactly one Xcode version. Only the first two numbers (major.minor) have to match: 26.6 and 26.6.1 match, but 26.5 and 26.6 don't. If they don't match, the build stops with error E0191.

The requirement comes from the iOS and Mac Catalyst workloads (dotnet/macios) that MAUI builds on. MAUI itself is just a NuGet package. So the question is really "which workload do I have installed?", not "which MAUI version am I on?"

Apple ships a new Xcode first, and Microsoft ships a matching workload days or weeks later. If Xcode auto-updates during that gap, iOS builds break. It can also go the other way: running dotnet workload update can install a workload that needs a newer Xcode than the one you have.

Just never updating Xcode doesn't work anymore. Since April 28, 2026, the App Store only accepts iOS apps built with Xcode 26 or later (Apple). Always update Xcode and the workload together, as a matched pair.

Support matrix

The newest .NET for iOS release for each .NET version, and the Xcode it requires. Data comes from the official release notes.

Newest .NET for iOS release for each .NET version, and the Xcode it requires
.NETMAUI supportRequires XcodeNeeds macOSWorkload set.NET for iOSReleased
.NET 11 Preview 26.6 26.2+ 11.0.100-rc.1.26458.5 26.5.12193-net11-rc.1 Sep 8, 2026
.NET 10 Supported until May 11, 2027 27.0 26.6+ 10.0.401.1 27.0.10722 Sep 29, 2026
.NET 9 Out of support since May 12, 2026 26.5 26.2+ 9.0.314.3 26.5.9002 May 21, 2026
.NET 8 Out of support since May 14, 2025 16.0 14.5+ — 18.0.8319 Dec 19, 2024

Find your pair: "I have Xcode X. Which workload set do I install?"

Use this table when you can't (or don't want to) change Xcode. Each row is the newest stable workload set that supports that Xcode version. The workload set must match your installed .NET SDK band: a 10.0.4xx SDK can only install 10.0.4xx workload sets. Check yours with dotnet --version.

Newest stable .NET for iOS release for each Xcode version (.NET 8 and later)
Your Xcode.NETWorkload set to install.NET SDK.NET for iOSReleased
27.0 .NET 10 10.0.401.1 10.0.401 27.0.10722 Sep 29, 2026
26.6 .NET 10 10.0.401 10.0.401 26.5.10318 Sep 8, 2026
26.5 .NET 10 10.0.300.3 10.0.300 26.5.10284 May 21, 2026
26.5 .NET 9 9.0.314.3 9.0.314 26.5.9002 May 21, 2026
26.4 .NET 10 10.0.203.1 10.0.203 26.4.10259 May 5, 2026
26.4 .NET 9 9.0.313.1 9.0.313 26.4.9015 May 5, 2026
26.3 .NET 10 10.0.202 10.0.202 26.2.10233 Apr 15, 2026
26.3 .NET 9 9.0.313 9.0.313 26.2.9008 Apr 15, 2026
26.2 .NET 10 10.0.200 10.0.200 26.2.10217 Mar 11, 2026
26.2 .NET 9 9.0.312 9.0.312 26.2.9000 Mar 11, 2026
26.1 .NET 10 10.0.101 10.0.101 26.1.10502 Dec 9, 2025
26.0 .NET 10 10.0.100 10.0.100 26.0.11017 Nov 11, 2025
26.0 .NET 9 9.0.311 9.0.311 26.0.9785 Feb 10, 2026
16.4 .NET 9 9.0.305 9.0.305 18.5.9219 Sep 9, 2025
16.3 .NET 9 9.0.203 9.0.203 18.4.9288 Apr 8, 2025
16.2 .NET 9 9.0.202 9.0.202 18.2.9180 Feb 20, 2025
16.1 .NET 9 9.0.101.1 9.0.101 18.1.9163 Nov 26, 2024
16.0 .NET 8 8.0.402.1 8.0.402+ 18.0.8303 Sep 26, 2024

Then run: dotnet workload install maui --version <workload set>. To pin that choice, see fix 4.

All 41 stable .NET for iOS releases since .NET 8
Released.NETRequires XcodeNeeds macOS.NET for iOSWorkload set
2026-09-29 .NET 10 27.0 26.6+ 27.0.10722 10.0.401.1
2026-09-08 .NET 10 26.6 26.2+ 26.5.10318 10.0.401
2026-08-04 .NET 10 26.6 26.2+ 26.5.10315 10.0.302.1
2026-07-15 .NET 10 26.6 26.2+ 26.5.10301 10.0.302.0
2026-05-21 .NET 9 26.5 26.2+ 26.5.9002 9.0.314.3
2026-05-21 .NET 10 26.5 26.2+ 26.5.10284 10.0.300.3
2026-05-18 .NET 9 26.5 26.2+ 26.5.9001 9.0.314.2
2026-05-18 .NET 10 26.5 26.2+ 26.5.10280 10.0.300.2
2026-05-05 .NET 9 26.4 26.2+ 26.4.9015 9.0.313.1
2026-05-05 .NET 10 26.4 26.2+ 26.4.10259 10.0.203.1
2026-04-15 .NET 9 26.3 15.6+ 26.2.9008 9.0.313
2026-04-15 .NET 10 26.3 15.6+ 26.2.10233 10.0.202
2026-03-11 .NET 9 26.2 15.6+ 26.2.9000 9.0.312
2026-03-11 .NET 10 26.2 15.6+ 26.2.10217 10.0.200
2026-02-10 .NET 9 26.0 15.6+ 26.0.9785 9.0.311
2026-02-10 .NET 10 26.2 15.6+ 26.2.10197 10.0.103
2026-02-10 .NET 10 26.2 15.6+ 26.2.10196 —
2025-12-16 .NET 9 26.0 15.6+ 26.0.9783 9.0.308.2
2025-12-16 .NET 10 26.2 15.6+ 26.2.10191 10.0.101.1
2025-12-09 .NET 9 26.0 15.6+ 26.0.9777 9.0.308.1
2025-12-09 .NET 10 26.1 15.6+ 26.1.10502 10.0.101
2025-11-11 .NET 9 26.0 15.6+ 26.0.9769 9.0.307.1
2025-11-11 .NET 9 26.0 15.6+ 26.0.9766 9.0.307
2025-11-11 .NET 10 26.1 15.6+ 26.1.10494 10.0.100.1
2025-11-11 .NET 10 26.0 15.6+ 26.0.11017 10.0.100
2025-10-15 .NET 9 26.0 15.6+ 26.0.9752 9.0.306
2025-10-15 .NET 9 16.4 15.3+ 18.5.9227 —
2025-09-09 .NET 9 16.4 15.3+ 18.5.9219 9.0.305
2025-08-06 .NET 9 16.4 15.3+ 18.5.9215 9.0.304
2025-08-06 .NET 9 16.4 15.3+ 18.5.9214 9.0.303.1
2025-07-09 .NET 9 16.4 15.3+ 18.5.9207 9.0.302.0
2025-06-17 .NET 9 16.4 15.3+ 18.5.9199 9.0.301.1
2025-04-08 .NET 9 16.3 15.2+ 18.4.9288 9.0.203
2025-02-20 .NET 9 16.2 14.5+ 18.2.9180 9.0.202
2025-01-27 .NET 9 16.2 14.5+ 18.2.9173 9.0.102.1
2024-12-19 .NET 9 16.2 14.5+ 18.2.9170 9.0.101.2
2024-12-19 .NET 8 16.0 14.5+ 18.0.8319 —
2024-11-26 .NET 9 16.1 14.5+ 18.1.9163 9.0.101.1
2024-11-26 .NET 8 16.0 14.5+ 18.0.8316 —
2024-11-13 .NET 8 16.0 14.5+ 18.0.8314 —
2024-09-26 .NET 8 16.0 14.5+ 18.0.8303 8.0.402.1

The error you're probably seeing

error : This version of .NET for iOS (26.2.10197) requires Xcode 26.2. The current version of Xcode is 26.3. Either install Xcode 26.2, or use a different version of .NET for iOS. See https://aka.ms/xcode-requirement for more information.

The platform in the message can also be Mac Catalyst, tvOS or macOS. Older workloads show a different wording:

This version of Microsoft.iOS requires the iOS 18.4 SDK (shipped with Xcode 16.3). The current version of Xcode is 16.2.

Read it like this: the workload you have installed (the number in parentheses) needs Xcode A, but the selected Xcode is B. Either select Xcode A, or install the workload that goes with B.

How to fix it

  1. See which pair you actually have
    xcodebuild -version          # the Xcode the build will use
    xcode-select -p              # where it lives
    dotnet --version             # .NET SDK (decides which workload sets you can install)
    dotnet workload --version    # installed workload set
    dotnet workload --info       # exact iOS / Mac Catalyst workload versions
    Find your workload in the table above or in the release notes to see which Xcode it needs.
  2. Match Xcode to your workload (usually the easiest fix) You can have several Xcode versions installed side by side. Download the one you need from Apple Developer Downloads, or use xcodes / Xcodes.app. Give each copy its own name, like Xcode_26.6.app, before you open it for the first time. Renaming it afterwards causes strange problems. Then either switch the system-wide Xcode:
    sudo xcode-select --switch /Applications/Xcode_26.6.app
    or pick the Xcode for a single build without changing the system default:
    dotnet build -f net10.0-ios -p:XcodeLocation=/Applications/Xcode_26.6.app
    XcodeLocation also works as an environment variable, which is handy on CI.
  3. Match your workload to Xcode Look up your Xcode in the table above and install that workload set:
    dotnet workload install maui --version 10.0.401
    If you need a workload set from a newer SDK band, install that .NET SDK first.
  4. Pin it so it stays fixed Add a global.json to the repo so every machine and CI agent uses the same SDK and workloads:
    {
      "sdk": {
        "version": "10.0.401",
        "workloadVersion": "10.0.401.1"
      }
    }
    With this file in place, dotnet workload install, update and restore use the pinned version and ignore --version. Commit this file and update it whenever you move to a new Xcode.
  5. Skip the check stopgap only
    <PropertyGroup>
      <ValidateXcodeVersion>false</ValidateXcodeVersion>
    </PropertyGroup>
    or -p:ValidateXcodeVersion=false on the command line. Developers report this usually works when the Xcode version is only one minor release off, including App Store uploads. But Microsoft says using a different Xcode is unsupported "even if there are no build errors", and it doesn't give you any of the new Xcode's APIs. Remove it once matching support ships.
  6. Prevent it On every Mac that builds MAUI apps, turn off System Settings → General → Software Update → Automatic Updates → Install application updates from the App Store. When an update is due, update Xcode and the workload together, using this page.

Gotchas

dotnet workload update can break you too
Without --version or a pinned global.json, it jumps to the newest workload set. That set may need a newer Xcode than you have. In "manifests" update mode, dotnet workload restore does the same thing. Check your mode with dotnet workload config --update-mode.
Hidden settings can override xcode-select
~/Library/Preferences/Xamarin/Settings.plist and ~/Library/Preferences/maui/Settings.plist (the AppleSdkRoot key), and the MD_APPLE_SDK_ROOT environment variable, all take priority over xcode-select. They're leftovers from Visual Studio for Mac and are deprecated. If the build keeps finding the "wrong" Xcode, delete them.
Xcode needs a minimum macOS
Some new Xcode versions need a newer macOS (see the "Needs macOS" column). If your Mac can't run that macOS, you're stuck on an older workload until you get new hardware.
Physical test devices
If a test iPhone updates to an iOS version newer than your Xcode supports, deploying to it fails even though the build succeeds. Keep test devices in step with Xcode, or turn off their automatic updates too.
Windows + Pair to Mac
When you build from Visual Studio on Windows, the check runs against the Xcode on the remote Mac. Rented and shared build Macs that auto-update Xcode will break your Windows builds without warning. Find out which Xcode the Mac has and match your workloads to it.
CI runners change Xcode on their own schedule
Hosted macOS images (GitHub Actions, Azure Pipelines) change their default Xcode without warning you. In the pipeline, select Xcode explicitly (sudo xcode-select -s /Applications/Xcode_26.6.app or XcodeLocation) and pin the workload set in global.json.
Xcode betas and .NET previews
Stable workloads never support Xcode betas, so install betas side by side and don't select them. Previews of the next .NET version often need a different Xcode than the current stable release.
Visual Studio for Mac is gone
Microsoft retired it on August 31, 2024. On a Mac, use VS Code with the .NET MAUI extension, or JetBrains Rider. Both use the same command-line workloads and Xcode selection described here.
Old MAUI versions are out of support
.NET MAUI 8 support ended on May 14, 2025, and MAUI 9 support ended on May 12, 2026. MAUI 10 is supported until May 11, 2027 (policy). Also, an old MAUI version can't produce App Store builds once it no longer supports a current Xcode.

How long does the gap last?

The number of days between Apple releasing an Xcode version and Microsoft shipping a .NET for iOS release that supports it. During this gap, the safe choice is to wait.

How long each Xcode release went unsupported by .NET for iOS
XcodeApple released.NET support shippedGap
27.0 Sep 14, 2026 Sep 29, 2026 15 days
26.6 Jun 25, 2026 Jul 15, 2026 20 days
26.5 May 11, 2026 May 18, 2026 7 days
26.4 Mar 24, 2026 May 5, 2026 42 days
26.3 Feb 26, 2026 Apr 15, 2026 48 days
26.2 Dec 12, 2025 Dec 16, 2025 4 days
26.1 Nov 3, 2025 Nov 11, 2025 8 days
26.0 Sep 15, 2025 Oct 15, 2025 30 days

FAQ

Is it safe to update Xcode?

Only if the latest .NET for iOS release says it requires that exact Xcode version. The status box at the top of this page checks this for you every day. If it says to wait, install the new Xcode side by side and keep the supported one selected.

Does the MAUI NuGet version (e.g. 10.0.110) decide the Xcode version?

No. The Xcode requirement comes from the iOS / Mac Catalyst workload installed with your .NET SDK. Microsoft's release notes sometimes recommend a minimum MAUI version to use alongside a workload, but the Xcode check itself only looks at the workload.

Do I need to match patch versions, like 26.6.1?

No. The build only compares major.minor. Any Xcode 26.6.x works with a workload that requires Xcode 26.6.

Can I stay on an old Xcode forever?

Not if you ship to the App Store. Apple raises the minimum SDK every spring. Since April 28, 2026, uploads must be built with Xcode 26 or later. Your app's minimum iOS version (deployment target) can stay lower; the rule is only about which Xcode you build with.

Does this affect Android or Windows builds?

No. Only iOS, Mac Catalyst, tvOS and macOS targets check the Xcode version. If you're blocked, you can still build the Android and Windows targets with -f net10.0-android or -f net10.0-windows10.0.19041.0.

Is there an API or machine-readable version of this page?

Yes. /compat.json has all the data, and /llms.txt is a plain-text summary written for AI assistants. Both refresh automatically with the page.

About this data

A scheduled job reads the dotnet/macios release notes once a day. Every release states "Xcode X is required with this release", along with the workload set and minimum macOS. The job also reads Apple's Xcode release history from xcodereleases.com, so it can tell when Apple has shipped an Xcode that .NET doesn't support yet. Last checked: .

Microsoft's own explainer is Xcode requirement – .NET for iOS. If this page and the release notes ever disagree, the release notes win.

I built this site when MAUI first came out, because Xcode auto-updates kept breaking builds. I have no affiliation with Microsoft or Apple. I'm just a big fan of MAUI, and I want it to be easy for other developers to know whether it's safe to update.

Need help?

Do you need help with a MAUI project, or with moving a Xamarin app to MAUI? As a mobile consultant, I've helped companies like Bain, EY, IMSA, and the IRS build apps in Xamarin and MAUI over the last decade. Episode 91 of the Microsoft Xamarin Podcast was about my work on the LivePerson mobile app.

I can help with anything from a one-hour screen-share session to putting together a team that builds a full mobile app and .NET backend: brad@fweem.com