1Running the analyzer within Xcode 2================================= 3 4.. contents:: 5 :local: 6 7Since Xcode 3.2, users have been able to run the static analyzer `directly within Xcode <https://developer.apple.com/library/ios/recipes/xcode_help-source_editor/chapters/Analyze.html#//apple_ref/doc/uid/TP40009975-CH4-SW1>`_. 8 9It integrates directly with the Xcode build system and presents analysis results directly within Xcode's editor. 10 11Can I use the open source analyzer builds with Xcode? 12----------------------------------------------------- 13 14**Yes**. Instructions are included below. 15 16.. image:: ../images/analyzer_xcode.png 17 18**Viewing static analyzer results in Xcode** 19 20Key features: 21------------- 22 23- **Integrated workflow:** Results are integrated within Xcode. There is no experience of using a separate tool, and activating the analyzer requires a single keystroke or mouse click. 24- **Transparency:** Works effortlessly with Xcode projects (including iPhone projects). 25- **Cons:** Doesn't work well with non-Xcode projects. For those, consider :doc:`CommandLineUsage`. 26 27Getting Started 28--------------- 29 30Xcode is available as a free download from Apple on the `Mac App Store <https://itunes.apple.com/us/app/xcode/id497799835?mt=12>`_, with `instructions available <https://developer.apple.com/library/ios/recipes/xcode_help-source_editor/chapters/Analyze.html#//apple_ref/doc/uid/TP40009975-CH4-SW1>`_ for using the analyzer. 31 32Using open source analyzer builds with Xcode 33-------------------------------------------- 34 35By default, Xcode uses the version of ``clang`` that came bundled with it to analyze your code. 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. 36 37Why try open source builds? 38---------------------------- 39 40The 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. 41 42On 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 here: :doc:`FilingBugs`. 43 44set-xcode-analyzer 45------------------ 46 47Starting 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 analysis:: 48 49 $ set-xcode-analyzer -h 50 Usage: set-xcode-analyzer [options] 51 52 Options: 53 -h, --help show this help message and exit 54 --use-checker-build=PATH 55 Use the Clang located at the provided absolute path, 56 e.g. /Users/foo/checker-1 57 --use-xcode-clang Use the Clang bundled with Xcode 58 59Operationally, **set-xcode-analyzer** edits Xcode's configuration files to point it to use the version of ``clang`` you specify for static analysis. Within this model it provides you two basic modes: 60 61- **--use-xcode-clang:** Switch Xcode (back) to using the ``clang`` that came bundled with it for static analysis. 62- **--use-checker-build:** Switch Xcode to using the ``clang`` provided by the specified analyzer build. 63 64Things to keep in mind 65---------------------- 66 67- You should quit Xcode prior to running ``set-xcode-analyzer``. 68- You will need to run ``set-xcode-analyzer`` under **``sudo``** in order to have write privileges to modify the Xcode configuration files. 69 70Examples 71-------- 72 73**Example 1**: Telling Xcode to use checker-235:: 74 75 $ pwd 76 /tmp 77 $ tar xjf checker-235.tar.bz2 78 $ sudo checker-235/set-xcode-analyzer --use-checker-build=/tmp/checker-235 79 80Note 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. 81 82**Example 2**: Telling Xcode to use a very specific version of ``clang``:: 83 84 $ sudo set-xcode-analyzer --use-checker-build=~/mycrazyclangbuild/bin/clang 85 86**Example 3**: Resetting Xcode to its default behavior:: 87 88 $ sudo set-xcode-analyzer --use-xcode-clang 89