diff --git a/.github/workflows/xcode-build.yml b/.github/workflows/xcode-build.yml
index 268de2a..8f6aa09 100644
--- a/.github/workflows/xcode-build.yml
+++ b/.github/workflows/xcode-build.yml
@@ -25,3 +25,12 @@ jobs:
-scheme potassiumProvider \
-destination 'platform=macOS' \
CODE_SIGNING_ALLOWED=NO
+
+ - name: Run unit tests on macOS
+ run: |
+ xcodebuild test \
+ -project potassiumProvider.xcodeproj \
+ -scheme potassiumProvider \
+ -destination 'platform=macOS' \
+ MACOSX_DEPLOYMENT_TARGET=26.4 \
+ CODE_SIGNING_ALLOWED=NO
diff --git a/README.md b/README.md
index 538bea0..30d41d6 100644
--- a/README.md
+++ b/README.md
@@ -101,7 +101,7 @@ xcodebuild build \
-destination 'generic/platform=visionOS'
```
-Run tests:
+Run unit tests:
```sh
xcodebuild test \
@@ -110,7 +110,7 @@ xcodebuild test \
-destination 'platform=iOS Simulator,OS=26.5,name=iPhone 17'
```
-Run tests on Mac as well:
+Run unit tests on Mac as well:
```sh
xcodebuild test \
@@ -119,7 +119,7 @@ xcodebuild test \
-destination 'platform=macOS'
```
-Run tests on visionOS as well:
+Run unit tests on visionOS as well:
```sh
xcodebuild test \
@@ -128,16 +128,9 @@ xcodebuild test \
-destination 'platform=visionOS Simulator,OS=26.5,name=Apple Vision Pro'
```
-If the full scheme stalls during simulator/UI-test cleanup, this has previously
-worked more reliably:
-
-```sh
-xcodebuild test \
- -project potassiumProvider.xcodeproj \
- -scheme potassiumProvider \
- -destination 'platform=iOS Simulator,OS=26.5,name=iPhone 17' \
- -parallel-testing-enabled NO
-```
+The shared scheme's Test action contains `potassiumProviderTests` only. UI
+automation remains a separate Xcode test-target workflow and does not run in
+the command-line matrix above.
Use `xcodebuild -showdestinations` to copy exact Mac or visionOS destinations if
local Xcode requires a more specific variant.
diff --git a/doc/TESTING_AND_DEVELOPMENT.md b/doc/TESTING_AND_DEVELOPMENT.md
index 312d31d..76bddfa 100644
--- a/doc/TESTING_AND_DEVELOPMENT.md
+++ b/doc/TESTING_AND_DEVELOPMENT.md
@@ -14,6 +14,10 @@ source of truth.
- Unit test target: `potassiumProviderTests`
- UI test target: `potassiumProviderUITests`
+The shared `potassiumProvider` scheme runs `potassiumProviderTests` in its Test
+action. UI automation remains a separate Xcode test-target workflow and is not
+part of the shared scheme's command-line test path.
+
Do not use Tuist or root-level SwiftPM commands for validation unless the
project is intentionally migrated.
@@ -70,7 +74,7 @@ xcodebuild build \
-destination 'platform=macOS'
```
-Run all tests:
+Run unit tests:
```sh
xcodebuild test \
@@ -79,7 +83,7 @@ xcodebuild test \
-destination 'platform=iOS Simulator,OS=26.5,name=iPhone 17'
```
-Run all tests on Mac as well:
+Run unit tests on Mac as well:
```sh
xcodebuild test \
@@ -88,34 +92,14 @@ xcodebuild test \
-destination 'platform=macOS'
```
-Run only unit tests:
-
-```sh
-xcodebuild test \
- -project potassiumProvider.xcodeproj \
- -scheme potassiumProvider \
- -destination 'platform=iOS Simulator,OS=26.5,name=iPhone 17' \
- -only-testing:potassiumProviderTests
-```
-
-If the full scheme stalls during simulator/UI-test cleanup, retry with:
-
-```sh
-xcodebuild test \
- -project potassiumProvider.xcodeproj \
- -scheme potassiumProvider \
- -destination 'platform=iOS Simulator,OS=26.5,name=iPhone 17' \
- -parallel-testing-enabled NO
-```
-
Use `xcodebuild -showdestinations` to copy the exact Mac destination if local
Xcode requires a more specific macOS variant.
## Continuous Integration
-GitHub Actions runs an unsigned macOS build for every pull request and every
-push to `main`. The build uses the `macos-26` runner and its default Xcode 26.5
-installation:
+GitHub Actions runs an unsigned macOS build followed by the macOS unit tests for
+every pull request and every push to `main`. The job uses the `macos-26` runner
+and its default Xcode 26.5 installation:
```sh
xcodebuild build \
@@ -123,10 +107,21 @@ xcodebuild build \
-scheme potassiumProvider \
-destination 'platform=macOS' \
CODE_SIGNING_ALLOWED=NO
+
+xcodebuild test \
+ -project potassiumProvider.xcodeproj \
+ -scheme potassiumProvider \
+ -destination 'platform=macOS' \
+ MACOSX_DEPLOYMENT_TARGET=26.4 \
+ CODE_SIGNING_ALLOWED=NO
```
-This initial workflow checks compilation only. Unit tests, UI tests, caching,
-and iOS Simulator and visionOS jobs remain outside its scope.
+The build and test commands run as consecutive steps in the same job and share
+the resolved package checkout and DerivedData directory. The CI-only
+deployment-target override allows the tests to run on the hosted runner's
+macOS 26.4 installation without changing the project's macOS 26.5 deployment
+target. UI tests, caching, iOS Simulator and visionOS jobs, and the manual File
+Provider release gates remain outside its scope.
## Test Style
diff --git a/potassiumProvider.xcodeproj/xcshareddata/xcschemes/potassiumProvider.xcscheme b/potassiumProvider.xcodeproj/xcshareddata/xcschemes/potassiumProvider.xcscheme
index b253dfb..f54e915 100644
--- a/potassiumProvider.xcodeproj/xcshareddata/xcschemes/potassiumProvider.xcscheme
+++ b/potassiumProvider.xcodeproj/xcshareddata/xcschemes/potassiumProvider.xcscheme
@@ -35,20 +35,6 @@
ReferencedContainer = "container:potassiumProvider.xcodeproj">
-
-
-
-
-
-
-
-