reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
<!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>