diff --git a/msbuild/Makefile b/msbuild/Makefile
index b4f88369be..48568fd4e3 100644
--- a/msbuild/Makefile
+++ b/msbuild/Makefile
@@ -78,6 +78,36 @@ MSBUILD_SYMLINKS += symlinks-ios
MSBUILD_TASK_ASSEMBLIES += $(IOS_TASK_ASSEMBLIES)
endif
+##
+## MacCatalyst definitions
+##
+
+MACCATALYST_TARGETS = \
+ $(wildcard Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.*.props) \
+ $(wildcard Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.*.targets) \
+
+MACCATALYST_DIRECTORIES = \
+ $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList \
+ $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst \
+
+MACCATALYST_SYMLINKS = \
+ $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList/FrameworkList.xml \
+ $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/MacCatalyst \
+
+MACCATALYST_PRODUCTS += \
+ $(MACCATALYST_SYMLINKS) \
+ $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/FrameworkList.xml \
+ $(foreach target,$(MACCATALYST_TARGETS),$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/$(notdir $(target))) \
+
+all-maccatalyst: $(MACCATALYST_PRODUCTS)
+symlinks-maccatalyst: $(MACCATALYST_SYMLINKS)
+
+ifdef INCLUDE_MACCATALYST
+MSBUILD_PRODUCTS += all-maccatalyst
+MSBUILD_DIRECTORIES += $(MACCATALYST_DIRECTORIES)
+MSBUILD_SYMLINKS += symlinks-maccatalyst
+endif
+
##
## XW definitions
##
@@ -236,6 +266,22 @@ $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/iOS/%: Xamarin.iOS.Tasks/bin/$(CON
$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/iOS/%: Xamarin.Localization.MSBuild/bin/$(CONFIG)/$(TARGETFRAMEWORK)/% | $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/iOS
$(Q) install -m 644 $< $@
+##
+## MacCatalyst
+##
+
+$(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList/FrameworkList.xml: | $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList
+ $(Q) ln -fs $(IOS_TARGETDIR)/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/msbuild/MacCatalyst/$(notdir $@) $@
+
+$(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/MacCatalyst: | $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild/Xamarin
+ $(Q) ln -Fhs $(IOS_TARGETDIR)/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/msbuild/MacCatalyst $@
+
+$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/FrameworkList.xml: Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in Makefile | $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst
+ $(Q) sed 's@%TargetFrameworkDirectory%@$(IOS_TARGETDIR)/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.MacCatalyst@' $< > $@
+
+$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/%: Xamarin.iOS.Tasks.Core/% | $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst
+ $(Q) install -m 644 $< $@
+
##
## XW
##
diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs
index c9fedb4538..4334dc9833 100644
--- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs
+++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs
@@ -28,6 +28,7 @@ namespace Xamarin.MacDev.Tasks {
case ApplePlatform.iOS:
case ApplePlatform.TVOS:
case ApplePlatform.WatchOS:
+ case ApplePlatform.MacCatalyst:
return "Xamarin.iOS";
case ApplePlatform.MacOSX:
return "Xamarin.Mac";
@@ -70,6 +71,8 @@ namespace Xamarin.MacDev.Tasks {
return "watchOS";
case ApplePlatform.MacOSX:
return "macOS";
+ case ApplePlatform.MacCatalyst:
+ return "MacCatalyst";
default:
throw new InvalidOperationException ($"Invalid platform: {Platform}");
}
diff --git a/msbuild/Xamarin.Shared/Xamarin.Shared.props b/msbuild/Xamarin.Shared/Xamarin.Shared.props
index 703a293c5f..f5fa56a958 100644
--- a/msbuild/Xamarin.Shared/Xamarin.Shared.props
+++ b/msbuild/Xamarin.Shared/Xamarin.Shared.props
@@ -86,12 +86,14 @@ Copyright (C) 2020 Microsoft. All rights reserved.
- <_XamarinBclPath Condition="'$(_PlatformName)' == 'iOS'">$(_XamarinSdkRoot)/lib/mono/Xamarin.iOS/
+ <_XamarinBclPath Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' == 'true'">$(_XamarinSdkRoot)/lib/mono/Xamarin.MacCatalyst/
+ <_XamarinBclPath Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' != 'true'">$(_XamarinSdkRoot)/lib/mono/Xamarin.iOS/
<_XamarinBclPath Condition="'$(_PlatformName)' == 'tvOS'">$(_XamarinSdkRoot)/lib/mono/Xamarin.TVOS/
<_XamarinBclPath Condition="'$(_PlatformName)' == 'watchOS'">$(_XamarinSdkRoot)/lib/mono/Xamarin.WatchOS/
- <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'iOS'">Xamarin.iOS.dll
+ <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' == 'true'">Xamarin.MacCatalyst.dll
+ <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' != 'true'">Xamarin.iOS.dll
<_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'tvOS'">Xamarin.TVOS.dll
<_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'watchOS'">Xamarin.WatchOS.dll
<_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'macOS'">Xamarin.Mac.dll
diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in
new file mode 100644
index 0000000000..c2e0422419
--- /dev/null
+++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.CSharp.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.CSharp.targets
new file mode 100644
index 0000000000..b80a419f95
--- /dev/null
+++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.CSharp.targets
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ Xamarin.MacCatalyst
+ v1.0
+
+
+
+
+
+
+
+
diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.Common.targets
new file mode 100644
index 0000000000..b40957ee39
--- /dev/null
+++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.Common.targets
@@ -0,0 +1,29 @@
+
+
+
+
+
+ xamarinios10;$(AssetTargetFallback)
+
+
+
+
+
+
+
diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.FSharp.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.FSharp.targets
new file mode 100644
index 0000000000..999f691c85
--- /dev/null
+++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.FSharp.targets
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+ Xamarin.MacCatalyst
+ v1.0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/common/Driver.cs b/tools/common/Driver.cs
index 638558c6e1..46f50e4546 100644
--- a/tools/common/Driver.cs
+++ b/tools/common/Driver.cs
@@ -773,6 +773,8 @@ namespace Xamarin.Bundler {
return Path.Combine (GetFrameworkLibDirectory (app), "mono", "Xamarin.WatchOS");
case ApplePlatform.TVOS:
return Path.Combine (GetFrameworkLibDirectory (app), "mono", "Xamarin.TVOS");
+ case ApplePlatform.MacCatalyst:
+ return Path.Combine (GetFrameworkLibDirectory (app), "mono", "Xamarin.MacCatalyst");
case ApplePlatform.MacOSX:
#if MMP
if (IsUnifiedMobile)
diff --git a/tools/mtouch/mtouch.cs b/tools/mtouch/mtouch.cs
index 5630f7513d..456f165794 100644
--- a/tools/mtouch/mtouch.cs
+++ b/tools/mtouch/mtouch.cs
@@ -156,6 +156,7 @@ namespace Xamarin.Bundler
case ApplePlatform.iOS:
case ApplePlatform.TVOS:
case ApplePlatform.WatchOS:
+ case ApplePlatform.MacCatalyst:
return Path.Combine (GetPlatformFrameworkDirectory (app), "..", "..", "64bits", app.PlatformName);
default:
throw ErrorHelper.CreateError (71, Errors.MX0071, app.Platform, "Xamarin.iOS");