| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | 
 |           "http://www.w3.org/TR/html4/strict.dtd"> | 
 | <html> | 
 | <head> | 
 |   <title>Running the analyzer within Xcode</title> | 
 |   <link type="text/css" rel="stylesheet" href="content.css"> | 
 |   <link type="text/css" rel="stylesheet" href="menu.css"> | 
 |   <script type="text/javascript" src="scripts/menu.js"></script> | 
 | </head> | 
 | <body> | 
 |  | 
 | <div id="page"> | 
 | <!--#include virtual="menu.html.incl"--> | 
 | <div id="content"> | 
 |  | 
 | <h1>Running the analyzer within Xcode</h1> | 
 |  | 
 | <table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0"> | 
 | <tr><td> | 
 |  | 
 | <h3>What is it?</h3> | 
 |  | 
 | <p>Since Xcode 3.2, users have been able to run the Clang Static Analyzer | 
 | <a | 
 | href="https://developer.apple.com/library/ios/recipes/xcode_help-source_editor/chapters/Analyze.html#//apple_ref/doc/uid/TP40009975-CH4-SW1">directly | 
 | within Xcode</a>.</p> | 
 |  | 
 | <p>It integrates directly with the Xcode build system and | 
 | presents analysis results directly within Xcode's editor.</p> | 
 |  | 
 | <h3>Can I use the open source analyzer builds with Xcode?</h3> | 
 |  | 
 | <p><b>Yes</b>. Instructions are included below.</p> | 
 |  | 
 | </td> | 
 | <td style="padding-left:10px; text-align:center"> | 
 |   <a href="images/analyzer_xcode.png"><img src="images/analyzer_xcode.png" width="620px" alt="analyzer in xcode"></a> | 
 | <br><b>Viewing static analyzer results in Xcode</b> | 
 | </td></tr></table> | 
 |  | 
 | <h3>Key features:</h3> | 
 | <ul> | 
 |   <li><b>Integrated workflow:</b> 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.</li> | 
 |   <li><b>Transparency:</b> Works effortlessly with Xcode projects (including iPhone projects). | 
 |   <li><b>Cons:</b> Doesn't work well with non-Xcode projects. For those, | 
 |   consider using <a href="scan-build.html"><b>scan-build</b></a>. | 
 | </ul> | 
 |  | 
 |  | 
 | <h2>Getting Started</h2> | 
 |  | 
 | <p>Xcode is available as a free download from Apple on the <a | 
 | href="https://itunes.apple.com/us/app/xcode/id497799835?mt=12">Mac | 
 | App Store</a>, with <a | 
 | href="https://developer.apple.com/library/ios/recipes/xcode_help-source_editor/chapters/Analyze.html#//apple_ref/doc/uid/TP40009975-CH4-SW1">instructions | 
 | available</a> for using the analyzer.</p> | 
 |  | 
 | <h2>Using open source analyzer builds with Xcode</h2> | 
 |  | 
 | <p>By default, Xcode uses the version of <tt>clang</tt> that came bundled with | 
 | it to analyze your code. It is possible to change Xcode's behavior to use an | 
 | alternate version of <tt>clang</tt> for this purpose while continuing to use | 
 | the <tt>clang</tt> that came with Xcode for compiling projects.</p> | 
 |  | 
 | <h3>Why try open source builds?</h3> | 
 |  | 
 | <p>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.</p> | 
 |  | 
 | <p>On the other hand, new checks can be experimental, with results of variable | 
 | quality. Users are encouraged to <a href="filing_bugs.html">file bug reports</a> | 
 | (for any version of the analyzer) where they encounter false positives or other | 
 | issues.</p> | 
 |  | 
 | <h3>set-xcode-analyzer</h3> | 
 |  | 
 | <p>Starting with analyzer build checker-234, analyzer builds contain a command | 
 | line utility called <tt>set-xcode-analyzer</tt> that allows users to change what | 
 | copy of <tt>clang</tt> that Xcode uses for analysis:</p> | 
 |  | 
 | <pre class="code_example"> | 
 | $ <b>set-xcode-analyzer -h</b> | 
 | 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 | 
 | </pre> | 
 |  | 
 | <p>Operationally, <b>set-xcode-analyzer</b> edits Xcode's configuration files | 
 | to point it to use the version of <tt>clang</tt> you specify for static | 
 | analysis. Within this model it provides you two basic modes:</p> | 
 |  | 
 | <ul> | 
 |   <li><b>--use-xcode-clang</b>: Switch Xcode (back) to using the <tt>clang</tt> that came bundled with it for static analysis.</li> | 
 |   <li><b>--use-checker-build</b>: Switch Xcode to using the <tt>clang</tt> provided by the specified analyzer build.</li> | 
 | </ul> | 
 |  | 
 | <h4>Things to keep in mind</h4> | 
 |  | 
 | <ul> | 
 |   <li>You should quit Xcode prior to running <tt>set-xcode-analyzer</tt>.</li>    <li>You will need to run <tt>set-xcode-analyzer</tt> under | 
 | <b><tt>sudo</tt></b> in order to have write privileges to modify the Xcode | 
 | configuration files.</li> | 
 | </ul> | 
 |  | 
 | <h4>Examples</h4> | 
 |  | 
 | <p><b>Example 1</b>: Telling Xcode to use checker-235:</p> | 
 |  | 
 | <pre class="code_example"> | 
 | $ pwd | 
 | /tmp | 
 | $ tar xjf checker-235.tar.bz2 | 
 | $ sudo checker-235/set-xcode-analyzer --use-checker-build=/tmp/checker-235 | 
 | </pre> | 
 |  | 
 | <p>Note that you typically won't install an analyzer build in <tt>/tmp</tt>, but | 
 | the point of this example is that <tt>set-xcode-analyzer</tt> just wants a full | 
 | path to an untarred analyzer build.</p> | 
 |  | 
 | <p><b>Example 2</b>: Telling Xcode to use a very specific version of <tt>clang</tt>:</p> | 
 |  | 
 | <pre class="code_example"> | 
 | $ sudo set-xcode-analyzer --use-checker-build=~/mycrazyclangbuild/bin/clang | 
 | </pre> | 
 |  | 
 | <p><b>Example 3</b>: Resetting Xcode to its default behavior:</p> | 
 |  | 
 | <pre class="code_example"> | 
 | $ sudo set-xcode-analyzer --use-xcode-clang | 
 | </pre> | 
 |  | 
 | </div> | 
 | </div> | 
 | </body> | 
 | </html> |