diff --git a/.gitlab/os-macos.yml b/.gitlab/os-macos.yml
index 7fe62775a8ad216c9d4ed72c60bc85937c27b79f..810fdcad8d49f24946ac4687481650163d9ebc1a 100644
--- a/.gitlab/os-macos.yml
+++ b/.gitlab/os-macos.yml
@@ -7,7 +7,7 @@
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci ext/$CI_CONCURRENT_ID"
         # TODO: Factor this out so that each job selects the Xcode version to
         # use so that different versions can be tested in a single pipeline.
-        DEVELOPER_DIR: "/Applications/Xcode-12.3.app/Contents/Developer"
+        DEVELOPER_DIR: "/Applications/Xcode-12.4.app/Contents/Developer"
         # Avoid conflicting with other projects running on the same machine.
         SCCACHE_SERVER_PORT: 4227
 
@@ -85,7 +85,7 @@
         - cmake # Since this is a bare runner, pin to a project.
         - macos
         - shell
-        - xcode-12.3
+        - xcode-12.4
         - nonconcurrent
 
 .macos_x86_64_builder_tags_package:
@@ -93,7 +93,7 @@
         - cmake # Since this is a bare runner, pin to a project.
         - macos
         - shell
-        - xcode-12.3
+        - xcode-12.4
         - nonconcurrent
         - finder
 
@@ -102,7 +102,7 @@
         - cmake # Since this is a bare runner, pin to a project.
         - macos
         - shell
-        - xcode-12.3
+        - xcode-12.4
         - concurrent
 
 .macos_arm64_builder_tags:
@@ -110,7 +110,7 @@
         - cmake # Since this is a bare runner, pin to a project.
         - macos-arm64
         - shell
-        - xcode-12.3
+        - xcode-12.4
         - nonconcurrent
 
 .macos_arm64_builder_ext_tags:
@@ -118,7 +118,7 @@
         - cmake # Since this is a bare runner, pin to a project.
         - macos-arm64
         - shell
-        - xcode-12.3
+        - xcode-12.4
         - concurrent
 
 ## macOS-specific scripts