FindXCTest — CMake 4.1.2 Documentation

# FindXCTest

New in version 3.3.

Finds the XCTest framework for writing unit tests in Xcode projects.

Note

Xcode 16 and later includes the Swift Testing framework for writing unit tests in the Swift programming language, which supersedes XCTest.

An XCTest bundle is a CFBundle (Core Foundation Bundle) with a special product type and bundle extension. See the Apple Developer Library for more information in the Testing with Xcode documentation.

## Result Variables

This module defines the following variables:

`XCTest_FOUND`

  Boolean indicating whether the XCTest framework and executable are found.

`XCTest_INCLUDE_DIRS`

  Include directories containing the XCTest framework headers needed to use XCTest.

`XCTest_LIBRARIES`

  Libraries needed to link against to use XCTest framework.

## Cache Variables

The following cache variables may also be set:

`XCTest_EXECUTABLE`

  The path to the `xctest` command-line tool used to execute XCTest bundles.

## Commands

When XCTest is found, this module provides the following commands to help create and run XCTest bundles:

xctest_add_bundle

  Creates an XCTest bundle to test a given target:

      xctest_add_bundle(<bundle> <testee> [<sources>...])

  This command creates an XCTest bundle named `<bundle>` that will test the specified `<testee>` target.

  The arguments are:

  `<bundle>`

    Name of the XCTest bundle to create. The `XCTEST` target property will be set on this bundle.

  `<testee>`

    Name of the target to test. Supported types for the testee are Frameworks and App Bundles.

  `<sources>...`

    One or more source files to add to the bundle. If not provided, they must be added later using commands like `target_sources()`.

  Note

  The `CMAKE_OSX_SYSROOT` variable must be set before using this command.

xctest_add_test

  Adds an XCTest bundle to the project to be run during the CTest phase:

      xctest_add_test(<name> <bundle>)

  This command registers an XCTest bundle to be executed by `ctest(1)`. The test will be named `<name>` and will run the specified `<bundle>`.

  The arguments are:

  `<name>`

    Name of the test as it will appear in CTest.

  `<bundle>`

    Target name of the XCTest bundle.

## Examples

Finding XCTest and adding tests:

    find_package(XCTest)

    add_library(foo SHARED foo.c)

    if(XCTest_FOUND)
      xctest_add_bundle(TestAppBundle foo source.swift)
      xctest_add_test(app.TestAppBundle TestAppBundle)
    endif()