# Xcode project {#xcode-project}
::: warning REQUIREMENTS
- A Tuist account and project
:::
You can run the tests of your Xcode projects selectively through the command
line. For that, you can prepend your `xcodebuild` command with `tuist` – for
example, `tuist xcodebuild test -scheme App`. The command hashes your project
and on success, it persists the hashes to determine what has changed in future
runs.
In future runs `tuist xcodebuild test` transparently uses the hashes to filter
down the tests to run only the ones that have changed since the last successful
test run.
For example, assuming the following dependency graph:
- `FeatureA` has tests `FeatureATests`, and depends on `Core`
- `FeatureB` has tests `FeatureBTests`, and depends on `Core`
- `Core` has tests `CoreTests`
`tuist xcodebuild test` will behave as such:
| Action | Description | Internal state |
| ---------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| `tuist xcodebuild test` invocation | Runs the tests in `CoreTests`, `FeatureATests`, and `FeatureBTests` | The hashes of `FeatureATests`, `FeatureBTests` and `CoreTests` are persisted |
| `FeatureA` is updated | The developer modifies the code of a target | Same as before |
| `tuist xcodebuild test` invocation | Runs the tests in `FeatureATests` because it hash has changed | The new hash of `FeatureATests` is persisted |
| `Core` is updated | The developer modifies the code of a target | Same as before |
| `tuist xcodebuild test` invocation | Runs the tests in `CoreTests`, `FeatureATests`, and `FeatureBTests` | The new hash of `FeatureATests` `FeatureBTests`, and `CoreTests` are persisted |
To use `tuist xcodebuild test` on your CI, follow the instructions in the
Continuous integration guide.
Check out the following video to see selective testing in action: