diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml
index 1941bd560dcd71cb932e03115085ff5f8b5dbdec..ea31f8dca42af0fd556419e6ea39244cc5ae86c7 100644
--- a/.azure/pipelines/ci.yml
+++ b/.azure/pipelines/ci.yml
@@ -326,11 +326,43 @@ stages:
             publishFeedCredentials: 'DevDiv - VS package feed'
 
 
-  # Build MacOS
+  # Build MacOS arm64
+  - template: jobs/default-build.yml
+    parameters:
+      jobName: MacOs_arm64_build
+      jobDisplayName: "Build: macOS arm64"
+      agentOs: macOs
+      buildArgs:
+        --arch arm64
+        --pack
+        --all
+        --no-build-nodejs
+        --no-build-java
+        -p:OnlyPackPlatformSpecificPackages=true
+        -p:AssetManifestFileName=aspnetcore-MacOS_arm64.xml
+        $(_BuildArgs)
+        $(_PublishArgs)
+        $(_InternalRuntimeDownloadArgs)
+      installNodeJs: false
+      installJdk: false
+      artifacts:
+      - name: MacOS_arm64_Logs
+        path: artifacts/log/
+        publishOnError: true
+        includeForks: true
+      - name: MacOS_arm64_Packages
+        path: artifacts/packages/
+
+  - ${{ if ne(variables['PostBuildSign'], 'true') }}:
+    - template: jobs/codesign-xplat.yml
+      parameters:
+        inputName: MacOS_arm64
+
+  # Build MacOS x64
   - template: jobs/default-build.yml
     parameters:
       jobName: MacOs_x64_build
-      jobDisplayName: "Build: macOS"
+      jobDisplayName: "Build: macOS x64"
       agentOs: macOs
       buildArgs:
         --pack
@@ -787,6 +819,7 @@ stages:
           - Windows_arm_build
           - Windows_arm64_build
           - ${{ if ne(variables['PostBuildSign'], 'true') }}:
+            - CodeSign_Xplat_MacOS_arm64
             - CodeSign_Xplat_MacOS_x64
             - CodeSign_Xplat_Linux_x64
             - CodeSign_Xplat_Linux_arm
diff --git a/.azure/pipelines/jobs/default-build.yml b/.azure/pipelines/jobs/default-build.yml
index 8383409fe902fbdcb4fb0fcea4a3af6b57c2628d..cd082b9444e2454a5558b2545bb842279d8ed6c7 100644
--- a/.azure/pipelines/jobs/default-build.yml
+++ b/.azure/pipelines/jobs/default-build.yml
@@ -92,7 +92,7 @@ jobs:
     # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md
     pool:
       ${{ if eq(parameters.agentOs, 'macOS') }}:
-        vmImage: macOS-10.14
+        vmImage: macOS-10.15
       ${{ if eq(parameters.agentOs, 'Linux') }}:
         ${{ if eq(parameters.useHostedUbuntu, true) }}:
           vmImage: ubuntu-16.04
@@ -143,6 +143,9 @@ jobs:
     - ${{ if ne(parameters.agentOs, 'Windows') }}:
       - script: df -h
         displayName: Disk size
+    - ${{ if eq(parameters.agentOs, 'macOS') }}:
+      - script: sudo xcode-select -s /Applications/Xcode_12.2.app/Contents/Developer
+        displayName: Use XCode 12.2
     - checkout: self
       clean: true
     - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isTestingJob, true)) }}:
diff --git a/Directory.Build.props b/Directory.Build.props
index 4abbbfb80dc77abf5fd05796fbeeb7e590583755..01b78c435d0d97a3c7f5214a85b6c01a4d304f4a 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -146,6 +146,7 @@
       win-arm;
       win-arm64;
       osx-x64;
+      osx-arm64;
       linux-musl-x64;
       linux-musl-arm;
       linux-musl-arm64;
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index a0acb2d7924b7d77230726ea55284b5aca79b123..07684202d9058d4447ccb6c3334bdc311ab99239 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -90,6 +90,7 @@ and are generated based on the last package release.
     <LatestPackageReference Include="Microsoft.NETCore.App.Runtime.win-arm" />
     <LatestPackageReference Include="Microsoft.NETCore.App.Runtime.win-arm64" />
     <LatestPackageReference Include="Microsoft.NETCore.App.Runtime.osx-x64" />
+    <LatestPackageReference Include="Microsoft.NETCore.App.Runtime.osx-arm64" />
     <LatestPackageReference Include="Microsoft.NETCore.App.Runtime.linux-x64" />
     <LatestPackageReference Include="Microsoft.NETCore.App.Runtime.linux-arm" />
     <LatestPackageReference Include="Microsoft.NETCore.App.Runtime.linux-arm64" />