Build and Analyze: running the analyzer within Xcode

What is it?

Build and Analyze is an Xcode feature (introduced in Xcode 3.2) that allows users to run the Clang Static Analyzer directly within Xcode.

It integrates directly with the Xcode build system and presents analysis results directly within Xcode's editor.

Can I use the open source analyzer builds with Xcode?

Yes. Instructions are included below.


Viewing static analyzer results in Xcode

Key features:

Getting Started

Xcode 3.2 is available as a free download from Apple, with instructions available for using Build and Analyze.

Using open source analyzer builds with Build and Analyze

By default, Xcode uses the version of clang that came bundled with it to provide the results for Build and Analyze. It is possible to change Xcode's behavior to use an alternate version of clang for this purpose while continuing to use the clang that came with Xcode for compiling projects.

Why try open source builds?

The advantage of using open source analyzer builds (provided on this website) is that they are often newer than the analyzer provided with Xcode, and thus can contain bug fixes, new checks, or simply better analysis.

On the other hand, new checks can be experimental, with results of variable quality. Users are encouraged to file bug reports (for any version of the analyzer) where they encounter false positives or other issues.

set-xcode-analyzer

Starting with analyzer build checker-234, analyzer builds contain a command line utility called set-xcode-analyzer that allows users to change what copy of clang that Xcode uses for Build and Analyze:

$ set-xcode-analyzer -h
Usage: set-xcode-analyzer [options]

Options:
  -h, --help            show this help message and exit
  --use-checker-build=PATH
                        Use the Clang located at the provided absolute path,
                        e.g. /Users/foo/checker-1
  --use-xcode-clang     Use the Clang bundled with Xcode

Operationally, set-xcode-analyzer edits Xcode's configuration files (in /Developer) to point it to use the version of clang you specify for static analysis. Within this model it provides you two basic modes:

Examples

Example 1: Telling Xcode to use checker-235 for Build and Analyze:

$ pwd
/tmp
$ tar xjf checker-235.tar.bz2
$ checker-235/set-xcode-analyzer --use-checker-build=/tmp/checker-235

Note that you typically won't install an analyzer build in /tmp, but the point of this example is that set-xcode-analyzer just wants a full path to an untarred analyzer build.

Example 2: Telling Xcode to use a very specific version of clang:

$ set-xcode-analyzer --use-checker-build=~/mycrazyclangbuild/bin/clang

Example 3: Resetting Xcode to its default behavior:

$ set-xcode-analyzer --use-xcode-clang