diff --git a/Make.config b/Make.config
index 8d8a8f9c3f..aec0de0e56 100644
--- a/Make.config
+++ b/Make.config
@@ -126,9 +126,9 @@ MACCATALYST_NUGET_VERSION_NO_METADATA=$(MACCATALYST_NUGET_VERSION)-$(NUGET_PRERE
MACCATALYST_NUGET_VERSION_FULL=$(MACCATALYST_NUGET_VERSION_NO_METADATA)+$(NUGET_BUILD_METADATA)
# Xcode version should have both a major and a minor version (even if the minor version is 0)
-XCODE_VERSION=12.3
-XCODE_URL=http://xamarin-storage/bot-provisioning/xcodes/Xcode_12.3.xip
-XCODE_DEVELOPER_ROOT=/Applications/Xcode_12.3.0.app/Contents/Developer
+XCODE_VERSION=12.4
+XCODE_URL=http://xamarin-storage/bot-provisioning/xcodes/Xcode_12.4.xip
+XCODE_DEVELOPER_ROOT=/Applications/Xcode_12.4.0.app/Contents/Developer
XCODE_PRODUCT_BUILD_VERSION:=$(shell /usr/libexec/PlistBuddy -c 'Print :ProductBuildVersion' $(XCODE_DEVELOPER_ROOT)/../version.plist)
# Mono version embedded in XI/XM (NEEDED_MONO_VERSION/BRANCH) are specified in mk/mono.mk
@@ -169,7 +169,7 @@ IOS_SDK_VERSION=$(word 1, $(subst ., ,$(IOS_NUGET_VERSION))).$(word 2, $(subst .
OSX_SDK_VERSION=$(word 1, $(subst ., ,$(MACOS_NUGET_VERSION))).$(word 2, $(subst ., ,$(MACOS_NUGET_VERSION)))
WATCH_SDK_VERSION=$(word 1, $(subst ., ,$(WATCHOS_NUGET_VERSION))).$(word 2, $(subst ., ,$(WATCHOS_NUGET_VERSION)))
TVOS_SDK_VERSION=$(word 1, $(subst ., ,$(TVOS_NUGET_VERSION))).$(word 2, $(subst ., ,$(TVOS_NUGET_VERSION)))
-MACCATALYST_SDK_VERSION=$(IOS_SDK_VERSION)
+MACCATALYST_SDK_VERSION=$(word 1, $(subst ., ,$(MACCATALYST_NUGET_VERSION))).$(word 2, $(subst ., ,$(MACCATALYST_NUGET_VERSION)))
MACCATALYST_MAC_SDK_VERSION=$(OSX_SDK_VERSION)
MAX_IOS_DEPLOYMENT_TARGET=$(IOS_SDK_VERSION)
diff --git a/Make.versions b/Make.versions
index 677fdc59ca..c339c9e7a2 100644
--- a/Make.versions
+++ b/Make.versions
@@ -66,7 +66,7 @@ MAC_PACKAGE_VERSION=7.11.0.$(MAC_COMMIT_DISTANCE)
# WARNING: Do **not** use versions higher than the available Xcode SDK or else we will have issues with mtouch (See https://github.com/xamarin/xamarin-macios/issues/7705)
# When bumping the major macOS version in MACOS_NUGET_VERSION also update the macOS version where we execute on bots in jenkins/Jenkinsfile (in the 'node' element)
-IOS_NUGET_VERSION=14.3.100
+IOS_NUGET_VERSION=14.4.100
TVOS_NUGET_VERSION=14.3.100
WATCHOS_NUGET_VERSION=7.2.100
MACOS_NUGET_VERSION=11.1.100
diff --git a/Makefile b/Makefile
index 6feb1adcfb..26765b6b31 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,12 @@
TOP=.
-SUBDIRS=builds runtime fsharp src msbuild tools dotnet
+SUBDIRS=builds runtime fsharp src msbuild tools
include $(TOP)/Make.config
include $(TOP)/mk/versions.mk
+ifdef ENABLE_DOTNET
+SUBDIRS += dotnet
+endif
+
#
# Common
#
diff --git a/Versions-ios.plist.in b/Versions-ios.plist.in
index eaf21a0fe0..8239a5faf8 100644
--- a/Versions-ios.plist.in
+++ b/Versions-ios.plist.in
@@ -44,6 +44,7 @@
14.1
14.2
14.3
+ 14.4
tvOS
@@ -121,6 +122,8 @@
11.0
14.3
11.1
+ 14.4
+ 11.1
RecommendedXcodeVersion
@XCODE_VERSION@
diff --git a/tests/Makefile b/tests/Makefile
index 620ddae0eb..e96a58edd9 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -1,11 +1,15 @@
TOP = ..
-SUBDIRS=test-libraries dotnet
+SUBDIRS=test-libraries
# disabled for now: mac-test
include $(TOP)/Make.config
include $(TOP)/mk/rules.mk
+ifdef ENABLE_DOTNET
+SUBDIRS += dotnet
+endif
+
MTOUCH=$(IOS_DESTDIR)/$(MONOTOUCH_PREFIX)/bin/mtouch
UNIT_SERVER_DIR=$(TOUCH_UNIT_PATH)/Touch.Server
UNIT_SERVER=$(UNIT_SERVER_DIR)/bin/Debug/Touch.Server.exe
diff --git a/tests/xtro-sharpie/iOS-ExposureNotification.ignore b/tests/xtro-sharpie/iOS-ExposureNotification.ignore
index 326df09872..446e1678c4 100644
--- a/tests/xtro-sharpie/iOS-ExposureNotification.ignore
+++ b/tests/xtro-sharpie/iOS-ExposureNotification.ignore
@@ -121,3 +121,10 @@
!missing-selector! ENManager::setInvalidationHandler: not bound
!missing-selector! +ENManager::authorizationStatus not bound
!missing-selector! ENManager::exposureNotificationEnabled not bound
+!missing-enum! ENActivityFlags not bound
+!missing-selector! ENManager::activityHandler not bound
+!missing-selector! ENManager::diagnosisKeysAvailableHandler not bound
+!missing-selector! ENManager::preAuthorizeDiagnosisKeysWithCompletionHandler: not bound
+!missing-selector! ENManager::requestPreAuthorizedDiagnosisKeysWithCompletionHandler: not bound
+!missing-selector! ENManager::setActivityHandler: not bound
+!missing-selector! ENManager::setDiagnosisKeysAvailableHandler: not bound