1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3 <html> 4 <head> 5 <title>Running the analyzer within Xcode</title> 6 <link type="text/css" rel="stylesheet" href="content.css"> 7 <link type="text/css" rel="stylesheet" href="menu.css"> 8 <script type="text/javascript" src="scripts/menu.js"></script> 9 <script type="text/javascript" src="scripts/dbtree.js"></script> 10 </head> 11 <body> 12 13 <div id="page"> 14 <!--#include virtual="menu.html.incl"--> 15 <div id="content"> 16 17 <h1>Running the analyzer within Xcode</h1> 18 19 <table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0"> 20 <tr><td> 21 22 <h3>What is it?</h3> 23 24 <p>Since Xcode 3.2, users have been able to run the Clang Static Analyzer 25 <a 26 href="https://developer.apple.com/library/mac/documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/060-Debug_Your_App/debug_app.html#//apple_ref/doc/uid/TP40010215-CH3-SW17">directly 27 within Xcode</a>.</p> 28 29 <p>It integrates directly with the Xcode build system and 30 presents analysis results directly within Xcode's editor.</p> 31 32 <h3>Can I use the open source analyzer builds with Xcode?</h3> 33 34 <p><b>Yes</b>. Instructions are included below.</p> 35 36 </td> 37 <td style="padding-left:10px; text-align:center"> 38 <a href="images/analyzer_xcode.png"><img src="images/analyzer_xcode.png" width="620px" alt="analyzer in xcode"></a> 39 <br><b>Viewing static analyzer results in Xcode</b> 40 </td></tr></table> 41 42 <h3>Key features:</h3> 43 <ul> 44 <li><b>Integrated workflow:</b> Results are integrated within Xcode. There is 45 no experience of using a separate tool, and activating the analyzer requires a 46 single keystroke or mouse click.</li> 47 <li><b>Transparency:</b> Works effortlessly with Xcode projects (including iPhone projects). 48 <li><b>Cons:</b> Doesn't work well with non-Xcode projects. For those, 49 consider using <a href="scan-build.html"><b>scan-build</b></a>. 50 </ul> 51 52 53 <h2>Getting Started</h2> 54 55 <p>Xcode is available as a free download from Apple on the <a 56 href="https://itunes.apple.com/us/app/xcode/id497799835?mt=12">Mac 57 App Store</a>, with <a 58 href="https://developer.apple.com/library/mac/documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/060-Debug_Your_App/debug_app.html#//apple_ref/doc/uid/TP40010215-CH3-SW17">instructions 59 available</a> for using the analyzer.</p> 60 61 <h2>Using open source analyzer builds with Xcode</h2> 62 63 <p>By default, Xcode uses the version of <tt>clang</tt> that came bundled with 64 it to analyze your code. It is possible to change Xcode's behavior to use an 65 alternate version of <tt>clang</tt> for this purpose while continuing to use 66 the <tt>clang</tt> that came with Xcode for compiling projects.</p> 67 68 <h3>Why try open source builds?</h3> 69 70 <p>The advantage of using open source analyzer builds (provided on this website) 71 is that they are often newer than the analyzer provided with Xcode, and thus can 72 contain bug fixes, new checks, or simply better analysis.</p> 73 74 <p>On the other hand, new checks can be experimental, with results of variable 75 quality. Users are encouraged to <a href="filing_bugs.html">file bug reports</a> 76 (for any version of the analyzer) where they encounter false positives or other 77 issues.</p> 78 79 <h3>set-xcode-analyzer</h3> 80 81 <p>Starting with analyzer build checker-234, analyzer builds contain a command 82 line utility called <tt>set-xcode-analyzer</tt> that allows users to change what 83 copy of <tt>clang</tt> that Xcode uses for analysis:</p> 84 85 <pre class="code_example"> 86 $ <b>set-xcode-analyzer -h</b> 87 Usage: set-xcode-analyzer [options] 88 89 Options: 90 -h, --help show this help message and exit 91 --use-checker-build=PATH 92 Use the Clang located at the provided absolute path, 93 e.g. /Users/foo/checker-1 94 --use-xcode-clang Use the Clang bundled with Xcode 95 </pre> 96 97 <p>Operationally, <b>set-xcode-analyzer</b> edits Xcode's configuration files 98 to point it to use the version of <tt>clang</tt> you specify for static 99 analysis. Within this model it provides you two basic modes:</p> 100 101 <ul> 102 <li><b>--use-xcode-clang</b>: Switch Xcode (back) to using the <tt>clang</tt> that came bundled with it for static analysis.</li> 103 <li><b>--use-checker-build</b>: Switch Xcode to using the <tt>clang</tt> provided by the specified analyzer build.</li> 104 </ul> 105 106 <h4>Things to keep in mind</h4> 107 108 <ul> 109 <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 110 <b><tt>sudo</tt></b> in order to have write privileges to modify the Xcode 111 configuration files.</li> 112 </ul> 113 114 <h4>Examples</h4> 115 116 <p><b>Example 1</b>: Telling Xcode to use checker-235:</p> 117 118 <pre class="code_example"> 119 $ pwd 120 /tmp 121 $ tar xjf checker-235.tar.bz2 122 $ sudo checker-235/set-xcode-analyzer --use-checker-build=/tmp/checker-235 123 </pre> 124 125 <p>Note that you typically won't install an analyzer build in <tt>/tmp</tt>, but 126 the point of this example is that <tt>set-xcode-analyzer</tt> just wants a full 127 path to an untarred analyzer build.</p> 128 129 <p><b>Example 2</b>: Telling Xcode to use a very specific version of <tt>clang</tt>:</p> 130 131 <pre class="code_example"> 132 $ sudo set-xcode-analyzer --use-checker-build=~/mycrazyclangbuild/bin/clang 133 </pre> 134 135 <p><b>Example 3</b>: Resetting Xcode to its default behavior:</p> 136 137 <pre class="code_example"> 138 $ sudo set-xcode-analyzer --use-xcode-clang 139 </pre> 140 141 </div> 142 </div> 143 </body> 144 </html> 145 146