Document that DISCOVERY_MODE PRE_TEST should be used with catch_discover_tests when used with XCode.

This addresses https://github.com/catchorg/Catch2/issues/2411 by making the "workaround" the official approach and is consistent with how gtest and cmake deal with the same situation.
This commit is contained in:
Phil Nash
2026-07-10 16:42:51 +01:00
parent a15f718c82
commit e112d0ea2b
2 changed files with 17 additions and 0 deletions
+11
View File
@@ -212,6 +212,17 @@ execution (useful e.g. in cross-compilation environments).
calling ``catch_discover_tests``. This provides a mechanism for globally
selecting a preferred test discovery behavior.
_Note that on Apple Silicon with the Xcode generator you must use `PRE_TEST`,
e.g. `catch_discover_tests(tests DISCOVERY_MODE PRE_TEST)`. With the default
`POST_BUILD` mode the build fails with `Result: Subprocess killed`, because
macOS on Apple Silicon refuses to run unsigned binaries and Xcode code-signs
the test executable only **after** the post-build script that `POST_BUILD`
mode uses to run it for test discovery. `PRE_TEST` avoids this by delaying
discovery until test time, when the executable is already signed. The same
limitation affects CMake's `gtest_discover_tests`; see
[Catch2 #2411](https://github.com/catchorg/Catch2/issues/2411) and
[CMake #21845](https://gitlab.kitware.com/cmake/cmake/-/issues/21845)._
* `SKIP_IS_FAILURE`
Skipped tests will be marked as failed instead.
+6
View File
@@ -146,6 +146,12 @@ same as the Catch name; see also ``TEST_PREFIX`` and ``TEST_SUFFIX``.
calling ``catch_discover_tests``. This provides a mechanism for globally selecting
a preferred test discovery behavior without having to modify each call site.
On Apple Silicon with the Xcode generator you must use ``PRE_TEST``. With the
default ``POST_BUILD`` mode the build fails with ``Result: Subprocess killed``,
because macOS on Apple Silicon refuses to run unsigned binaries and Xcode
code-signs the test executable only after the post-build script that
``POST_BUILD`` mode uses to run it for test discovery. See Catch2 issue #2411.
``SKIP_IS_FAILURE``
Disables skipped test detection.