| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
| "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <title>Build and Analyze: 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> |
| <script type="text/javascript" src="scripts/dbtree.js"></script> |
| </head> |
| <body> |
| |
| <div id="page"> |
| <!--#include virtual="menu.html.incl"--> |
| <div id="content"> |
| |
| <h1>Build and Analyze: 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><i>Build and Analyze</i> is an Xcode feature (introduced in Xcode 3.2) that |
| allows users to run the Clang Static Analyzer <a |
| href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html">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"> |
| <center> |
| <a href="images/analyzer_xcode.png"><img src="images/analyzer_xcode.png" width="620px" border=0></a> |
| <br><b>Viewing static analyzer results in Xcode</b></center> |
| </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 3.2 is available as a free download from Apple, with <a |
| href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html">instructions available</a> |
| for using <i>Build and Analyze</i>.</p> |
| |
| <h2>Using open source analyzer builds with <i>Build and Analyze</i></h2> |
| |
| <p>By default, Xcode uses the version of <tt>clang</tt> that came bundled with |
| it to provide the results for <i>Build and Analyze</i>. 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 <i>Build and Analyze</i>:</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 |
| (in <tt>/Developer</tt>) 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 for <i>Build and Analyze</i>:</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> |
| |