<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Steve Nygard]]></title>
  <link href="http://stevenygard.com/atom.xml" rel="self"/>
  <link href="http://stevenygard.com/"/>
  <updated>2013-11-16T14:06:11-07:00</updated>
  <id>http://stevenygard.com/</id>
  <author>
    <name><![CDATA[Steve Nygard]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[class-dump 3.5 is now available]]></title>
    <link href="http://stevenygard.com/blog/2013/11/16/class-dump-3-dot-5-is-now-available/"/>
    <updated>2013-11-16T13:34:00-07:00</updated>
    <id>http://stevenygard.com/blog/2013/11/16/class-dump-3-dot-5-is-now-available</id>
    <content type="html"><![CDATA[<p>This release of class-dump has been updated for Mac OS X 10.9 Mountain Lion.  It requires the 10.9 SDK, but still targets 10.8.  You can download this
version from the <a href="http://stevenygard.com/projects/class-dump/">class-dump project page</a>, and the latest source is always available from
the <a href="http://github.com/nygard/class-dump">class-dump git repository at Github</a>.</p>

<p>class-dump now parses extended types (available only in protocols), so you get more precise type information on protocol methods.  It also recognizes
the &#8220;arm64&#8221; architecture.  For a complete list of changes, see <a href="http://stevenygard.com/projects/class-dump/changes">the class-dump Release Notes.</a>
</p>

<p>You can send but reports to me at nygard at gmail.com, or add it to the <a href="https://github.com/nygard/class-dump/issues">project&#8217;s Issue Tracker at
github</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[class-dump 3.4 is now available]]></title>
    <link href="http://stevenygard.com/blog/2012/11/19/class-dump-3-dot-4-is-now-available/"/>
    <updated>2012-11-19T16:25:00-07:00</updated>
    <id>http://stevenygard.com/blog/2012/11/19/class-dump-3-dot-4-is-now-available</id>
    <content type="html"><![CDATA[<p>This release of class-dump has been updated for Mac OS X 10.8 Mountain Lion.  It requires the 10.8 SDK, but still targets 10.7.  You can download this
version from the <a href="http://stevenygard.com/projects/class-dump/">class-dump project page</a>, and the latest source is always available from
the <a href="http://github.com/nygard/class-dump">class-dump git repository at Github</a>.</p>

<p>Mac OS X 10.8 adds a few new load commands, and now class-dump doesn&#8217;t log warnings about these.  Two of these load commands indicate the minimum Mac OS X or
iOS versions required, and these now appear in the class-dump output.  class-dump also recognizes the new &#8216;armv7s&#8217; architecture.</p>

<p>The project now uses ARC, properties are synthesized by default when possible and instance variables are declared in the implementation.  There are several
other changes to the coding style.</p>

<p>You can send but reports to me at nygard at gmail.com, or add it to the <a href="https://github.com/nygard/class-dump/issues">project&#8217;s Issue Tracker at
github</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[class-dump 3.3.4 is now available]]></title>
    <link href="http://stevenygard.com/blog/2011/09/07/class-dump-334-is-now-available/"/>
    <updated>2011-09-07T17:23:00-06:00</updated>
    <id>http://stevenygard.com/blog/2011/09/07/class-dump-334-is-now-available</id>
    <content type="html"><![CDATA[<p>Lion&#8217;s been out for about six weeks now, so it&#8217;s time to release an updated version of class-dump.  Especially when the old version gets assertion failures on
Lion!  So here it is, version 3.3.4.  You can download this version from the <a href="http://stevenygard.com/projects/class-dump/">class-dump project page</a>.</p>

<!-- more -->

<p>class-dump now handles two more types:</p>

<ul>
 <li>_Complex, which fixes a parse error on Grapher.app that has been a problem for a long time</li>
 <li>long double, encoded as &#8216;D&#8217;;  this is only used in a couple of frameworks/apps</li>
</ul>

<p>And three more load commands:</p>

<ul>
 <li>LC_DYLD_ENVIRONMENT</li>
 <li>LC_VERSION_MIN_MACOSX</li>
 <li>LC_VERSION_MIN_IPHONEOS</li>
</ul>

<p>You can see the rest of the <a href="http://stevenygard.com/projects/class-dump/changes/">changes in 3.3.4</a> on that page.</p>

<p>This version is built as a 64-bit Intel executable, supporting 10.6 or later.  (10.6 means no more PPC support, and there&#8217;s not really any reason to support a
32-bit version any more.)</p>

<p>I&#8217;ve switched from Mercurial to Git, and moved the source repository to Github.  The latest source is now available at the <a
href="http://github.com/nygard/class-dump">class-dump git repository at github</a>.</p>

<p>As always, you can send bug reports to me at nygard at gmail.com</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[class-dump 3.3.1 is now available]]></title>
    <link href="http://stevenygard.com/blog/2009/09/17/class-dump-331-is-now-available/"/>
    <updated>2009-09-17T14:27:00-06:00</updated>
    <id>http://stevenygard.com/blog/2009/09/17/class-dump-331-is-now-available</id>
    <content type="html"><![CDATA[<p>Version 3.3.1 adds support for dumping 10.6 style protected binaries, so that you can once again look at the Finder, Dock, SystemUIServer, and a few other
applications.  This release fixes a crasher when trying to dump 64-bit files with the 32-bit version of class-dump.  Now it prints an error message saying that
this isn&#8217;t supported.  Finally, it generates typedefs for template types that are used in methods, to make the method declarations shorter and more
readable.</p>

<p>You can download this version from the <a href="http://stevenygard.com/projects/class-dump">class-dump project page</a>.  It is built for Mac OS X 10.5 or later.</p>

<p>As always, you can send bug reports to me at nygard at gmail.com</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[class-dump 3.3 is now available]]></title>
    <link href="http://stevenygard.com/blog/2009/09/01/class-dump-33-is-now-available/"/>
    <updated>2009-09-01T20:39:00-06:00</updated>
    <id>http://stevenygard.com/blog/2009/09/01/class-dump-33-is-now-available</id>
    <content type="html"><![CDATA[<p>A new version of class-dump is now available.  You can download it from the links on the <a href="http://stevenygard.com/projects/class-dump">class-dump project page</a>.  It is
built for Mac OS X 10.5 or later.</p>

<p>Version 3.3 adds support for Snow Leopard, improves property handling, improves structure/union handling, fixes a bunch of bugs (including two crashers), and
no doubt adds some new bugs.</p>

<!-- more -->

<h3>Snow Leopard</h3>

<p>There is a new load command (LC_DYLD_INFO) that contains a byte stream of information that dyld needs to load an image.  This replaces the relocation info
from the old dynamic symbol table; otool -rv outputs nothing for files built for 10.6.  class-dump needs to understand this to correctly look up references to
external class names.  Version 3.2 shows a blank name for many superclass and category class names.  This is fixed in version 3.3.</p>

<p>Snow Leopard also adds a new version of protected segments.  These are recognized so that class-dump doesn&#8217;t spew out a bunch of garbage.  Encrypted iPhone
apps (indicated by the LC_ENCRYPTION_INFO command) are recognized for the same reason.</p>

<h3>Bug Fixes</h3>

<p>There are a lot of bug fixes.  First of all, Mac OS X prefers 64-bit executables over 32-bit executables, so there was no need for a separate 32-bit
executable.  Now there is just one 32/64-bit universal executable.  I&#8217;ve improved the parsing of C++ types, and class-dump can now make it through Safari and
WebKit without complaint.  Also fixed a crasher when trying to dump the 10.5 Finder.</p>

<h3>Properties</h3>

<p>More property attributes are now supported: dynamic, weak, strong, and non-atomic.  Thanks to Joe Ranieri for sending a patch to handle these.  Objective-C
2.0 categories and protocols now show their properties.  Properties are now emitted when the first accessor method is encountered, and those accessors are not
shown.  Any remaining properties (usually dynamic ones, but there seem to be other cases where this can happen) are shown at the end of the method list.
Properties declared in the optional section of protocols appear there in the output.  The result is shorter, more readable output.</p>

<p>Property type strings can contain commas (for example, <code>T^{map&lt;int, int>=...},V_task</code>), so we can&#8217;t just split the property attribute string on
commas.  Now class-dump parses the type, and then splits the rest.</p>

<h3>Structure Handling</h3>

<p>This is the process of trying to make sense out of all the structure and union definitions found in the files, and then to present it in a meaningful
way.</p>

<p>Merging member names and types: Not all occurrences of a structure have member names, so it needs to merge member names when possible.  For example, there
might be both <code>{_NSPoint="x"f"y"f}</code> and <code>{_NSPoint=ff}</code>.  Of course, there are exceptions where structures with the same name have either
the same underlying type with different member names, or a different underlying type altogether.  An example of this
is <code>^{?=@ii{_flags=b1b1b1b1b12}}</code> from @category NSApplication (NSWindowCache)
and <code>^{__NSRowHeightBucket=fi{_flags="equalRowSizes"b1"reserved"b31}}</code> from the _NSTableRowHeightStorage class.  Anonymous structures can collide in
the same way.  It is common to have a structure of bitfield flags, and these can easily have the same layout but different member names.  Types in methods never
have member names, but worse still is that they reduce object types down to ids.  That is, @&#8221;NSObject&#8221; appears as @ instead.  Sometimes the compiler generates
different names (such as $_2531) for multiple instances of the same union.</p>

<p>Determining how named and anonymous structures are declared: Named structures are generally declared at the top, unless they are only referenced once in an
ivar or another structure, or if they are a special case (such as _flags), in which case they get expanded at the point where they occur.  Any top level
anonymous structures that are referenced by a method, or referenced from more than one place, need to be typedef&#8217;d and referred to by that name.  And there are
a few more special cases that should be handled.</p>

<p>Hmm, when I put it that way it sounds easy enough&#8230;  But my specification was more like &#8220;Take a bunch of types, mix &#8216;em all together, and generate something
pretty&#8221;.  So there&#8217;s a lot of details and special cases to get right, and I ran into them one at a time.  When I wrote that code, years ago, it took a lot of
time to get it working on all of my test cases.  I was tired of tweaking it, happy that it mostly worked, and ready to move on to something else.  So I didn&#8217;t
document it, and now I fear that code.  I&#8217;ve made a couple attempts to figure out what it was doing and document it, but they didn&#8217;t get far.</p>

<p>I was working on the code after 3.2 was released.  I decided to cache the parsed types, and pass the parsed types to the type formatter instead of passing a
type string.  Easy enough, but it introduced a bug, and that led me to the code that I feared.  I ended up removing most of the old code and writing it from
scratch.  By the time is was mostly working again I was tired of tweaking it and ready to move on to something else.  But this time I&#8217;ve documented it, so that
I can remember how it works next year.  Or next week.</p>

<p>What&#8217;s the result of that effort?  Some structures get an actual object type, instead of just an id.  Some structures pick up the correct member names, which
were missing previously.  Some structures have member names generated where they weren&#8217;t before.  Some of the special cases (like _flag) are handled better.</p>

<p>I have also changed how typedef names are generated.  Previously I just added an index to the name.  This worked, but was extremely fragile.  Unrelated
changes to the code could alter the order that structures were processed, and change their name.  Updates to frameworks could lead to large diffs in the output.
The author of <a href="http://code.google.com/p/networkpx/wiki/class_dump_z">class-dump-z</a>, kennytm, rightly criticized this (and other things!).  Now I
generate a hash based on the type string (after it&#8217;s been filled out with member names, and before the generic _field names have been added), and use that to
create a unique typedef name.  The results are great.  There were only 6 diffs between the 10.5.5 and 10.5.8 AppKits with the new version, compared to 78 with
the old.</p>

<p>The named structures are sorted by name and printed first, followed by the special cases.  The anonymous structures are next, sorted by nested structure
depth and then by the type string, followed by the special cases.  #pragma marks are added before each section, and a #pragma mark - before each mach-o file, to
make it easy to search for the next section.</p>

<p>As always, you can send bug reports to me at nygard at gmail.com.  There were a lot of changes, and I haven&#8217;t tested it as thoroughly as I normally
do.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[class-dump 3.2 is now available]]></title>
    <link href="http://stevenygard.com/blog/2009/07/01/class-dump-32-is-now-available/"/>
    <updated>2009-07-01T22:28:00-06:00</updated>
    <id>http://stevenygard.com/blog/2009/07/01/class-dump-32-is-now-available</id>
    <content type="html"><![CDATA[<p>A new version of class-dump is now available.  You can download it from the links on the <a href="http://stevenygard.com/projects/class-dump">class-dump project page</a>.  It is
built for Mac OS X 10.5 or later.</p>

<p>This release includes support for Objective-C 2.0 on both 32 bit (iPhone) and 64 bit (Mac OS X).  It shows class properties and handles all documented
property attributes.  Unrecognized property attributes are noted in a comment following the property declaration.  class-dump also shows optional protocol
methods.  The Objective-C garbage collection status of each file is included in the output, as either &#8220;Unsupported&#8221;, &#8220;Supported&#8221;, or &#8220;Required&#8221;.</p>

<!-- more -->

<p>To support 64 bit files, class-dump is built as a 64 bit executable.  A 32 bit executable (class-dump-32) is provided for 32 bit systems, but it doesn&#8217;t
handle 64 bit files.</p>

<p>Internally, class-dump now stores the architectures as a cpu type, cpu subtype pair, instead of a string.  This was necessary to handle unknown architectures
such as the iPhone.  For architectures without a recognized name, you can specify them as &lt;cpu type>:&lt;cpu subtype>, values are hex with an optional &#8220;0x&#8221;
prefix.  For example, you can use <code>--arch 0xc:0x6</code> or simply <code>--arch c:6</code>.  The &#8211;list-arches option will also list unknown architectures
in this format.</p>

<p>If you find class-dump useful, I am now accepting donations to support its development.  There is a donation button next to the download link on the project
page.  Thanks!</p>

<p>As always, you can send bug reports to me at nygard at gmail.com</p>

<p>2009-07-05: I&#8217;ve fixed the .tar.bz2 packages.  Ever since 3.1, my packaging script has been creating a .tar.gz, then bzip2 compressing the result and calling
it a .tar.bz2.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[class-dump 3.1.2 is now available]]></title>
    <link href="http://stevenygard.com/blog/2007/11/08/class-dump-312-is-now-available/"/>
    <updated>2007-11-08T01:00:00-07:00</updated>
    <id>http://stevenygard.com/blog/2007/11/08/class-dump-312-is-now-available</id>
    <content type="html"><![CDATA[<p>A new version of class-dump is now available.  This release includes several bug fixes and a few minor enhancements.  It&#8217;s recommended for all users of Mac
OS X 10.4 or later.  You can download it from the links on the <a href="http://stevenygard.com/projects/class-dump">class-dump project page</a>, and see
a <a href="http://stevenygard.com/projects/class-dump/changes.html">detailed summary of the changes</a>.</p>

<!-- more -->

<h2>New Features</h2>

<p>My favorite new feature is the -f option.  This lets you search for methods and display them in context, showing the class, category or protocol that
contains the matching methods.  Before this, I would just class-dump a framework and search for the method in the output.  In classes with a lot of methods,
though, I&#8217;d have to scroll up to see what class contained the method, and it was difficult to get a good picture of the results.  Now you can just use the -f
option and get a nice short summary.  This is great for discovering what classes implement some bit of private API.  For example:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>% class-dump /System/Library/Frameworks/AppKit.framework -f leed</span></code></pre></td></tr></table></div></figure>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="cm">/*</span>
</span><span class='line'><span class="cm"> *     Generated by class-dump 3.1.2.</span>
</span><span class='line'><span class="cm"> *</span>
</span><span class='line'><span class="cm"> *     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2007 by Steve Nygard.</span>
</span><span class='line'><span class="cm"> */</span>
</span><span class='line'>
</span><span class='line'><span class="k">@interface</span> <span class="nc">_NSBrowserScrollView</span> : <span class="nc">NSScrollView</span>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nf">_focusRingBleedRegion</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@interface</span> <span class="nc">NSButton</span> : <span class="nc">NSControl</span> <span class="o">&lt;</span><span class="n">NSUserInterfaceValidations</span><span class="o">&gt;</span>
</span><span class='line'><span class="o">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="n">_focusRingBleedRegion</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@interface</span> <span class="nc">NSTableView</span> : <span class="nc">NSControl</span> <span class="o">&lt;</span><span class="n">NSUserInterfaceValidations</span><span class="o">&gt;</span>
</span><span class='line'><span class="o">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="n">_focusRingBleedRegion</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@interface</span> <span class="nc">NSView</span> <span class="nl">(NSPrivateFocusRingSupport)</span>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nf">_focusRingBleedRegion</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'><span class="k">@interface</span> <span class="nc">NSWindow</span> : <span class="nc">NSResponder</span> <span class="o">&lt;</span><span class="n">NSAnimatablePropertyContainer</span><span class="p">,</span> <span class="n">NSUserInterfaceValidations</span><span class="o">&gt;</span>
</span><span class='line'><span class="o">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nl">_setLastFocusRingView:</span><span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="n">fp8</span> <span class="nl">bleedRegion:</span><span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="n">fp12</span><span class="p">;</span>
</span><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">_getRetainedLastFocusRingView:</span><span class="p">(</span><span class="kt">id</span> <span class="o">*</span><span class="p">)</span><span class="nv">fp8</span> <span class="nf">bleedRegion:</span><span class="p">(</span><span class="kt">id</span> <span class="o">*</span><span class="p">)</span><span class="nv">fp12</span><span class="p">;</span>
</span></code></pre></td></tr></table></div></figure>

<p>The string is case sensitive and doesn&#8217;t support regular expressions.  I just needed something simple, and it works quite well.</p>

<p>The -H option now generates protocol header files.  These are named &lt;protocol-name>-Protocol.h, which differs from the imports generated by the previous
version.  The extra dash in the name helps make them stand out against regular classes that end in Protocol, such as NSURLProtocol.</p>

<p>I&#8217;ve also added a &#8211;list-arches option that prints the architectures contained in the given file.  I added this for my regression testing, so that I can dump
all architectures that are available.  Unlike lipo -info, it only lists the architecture names, which makes it easier to use in shell scripts.</p>

<h2>Bug Fixes</h2>

<p>I&#8217;ve added several fixes for files that use C++, so a bunch of old warnings should go away.  This version of class-dump also
recognizes <a href="http://www.osxbook.com/book/bonus/chapter7/binaryprotection/">Apple protected binaries</a>, and won&#8217;t spew a bunch of garbage when you try
to dump these files.</p>

<h2>The Code</h2>

<p>There are two big changes in the source code.  First, I&#8217;ve implemented a visitor pattern for going through the Objective-C data to generate output.  When I
first implemented the -f option, I just copied the old generation code and added the pattern check.  It was a quick and easy proof of concept, but it wasn&#8217;t
maintainable.  With the visitors most of the actual output is contained in one or two classes, instead of being spread out among many classes.  I like it a
lot.</p>

<p>The other change was converting the unit tests from ObjCUnit to OCUnit/SenTestKit.  It makes sense to use OCUnit since it&#8217;s bundled with the developer tools,
and ObjCUnit was crashing, so it was just as easy to switch.  After converting the unit tests it was apparent that the two frameworks were practically identical
in usage.  Just import a different header file, subclass from a different test case class, and use slightly different asserts.  My main reason for picking
ObjCUnit originally was that it was easier to control the order of the unit tests, but I&#8217;ve managed to get that working with OCUnit.</p>

<h2>Next Version</h2>

<p>The next version will be 10.5 only so that I can start using some of the new features that are available.  I think I can add support for @rpath, and
supporting 64-bit files is on my list of things to do.</p>

<p>As always, you can send bug reports to me at nygard at gmail.com</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Minor bugfix, class-dump 3.1.1]]></title>
    <link href="http://stevenygard.com/blog/2006/11/12/minor-bugfix-class-dump-311/"/>
    <updated>2006-11-12T01:00:00-07:00</updated>
    <id>http://stevenygard.com/blog/2006/11/12/minor-bugfix-class-dump-311</id>
    <content type="html"><![CDATA[<p>This release fixes some old bugs with parsing C++ template types, which occurred frequently with applications like iPhoto.  It doesn&#8217;t try to parse these
types&mdash;it just scans for commas, nested &lt; and >, and the closing >.</p>

<p>You can <a href="http://stevenygard.com/Projects/class-dump/download.html">download class-dump 3.1.1</a>.  This version is built against the 10.4 Universal SDK and will not run on
Mac OS X 10.3 or earlier.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Universal binary support]]></title>
    <link href="http://stevenygard.com/blog/2005/08/16/universal-binary-support/"/>
    <updated>2005-08-16T01:00:00-06:00</updated>
    <id>http://stevenygard.com/blog/2005/08/16/universal-binary-support</id>
    <content type="html"><![CDATA[<p>I&#8217;ve added universal binary support to class-dump.  It will choose the host architecture, if available, or the first architecture otherwise.  There is also
a &#8211;arch command line option to select between ppc and i386.  The selected architecture is displayed in the output.</p>

<p>You can <a href="http://stevenygard.com/Projects/class-dump/download.html">download class-dump 3.1</a>.  This version is built against the 10.4 Universal SDK and will not run on
Mac OS X 10.3 or earlier.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[class-dump 3.0 released]]></title>
    <link href="http://stevenygard.com/blog/2004/02/18/class-dump-30-released/"/>
    <updated>2004-02-18T01:00:00-07:00</updated>
    <id>http://stevenygard.com/blog/2004/02/18/class-dump-30-released</id>
    <content type="html"><![CDATA[<p>I have released <a href="http://stevenygard.com/Projects/class-dump/index.html">class-dump 3.0</a>. This is the first update in almost three years, and the biggest update since
the first release.  Be sure to check out the <a href="http://stevenygard.com/Projects/class-dump/release-notes.html">release notes</a> to see what&#8217;s changed.</p>

<p>It&#8217;s been a little over seven years since I released class-dump version 2.  It now has a new home&mdash;I&#8217;ve set up this website to distribute the software
that I create.  At the moment there&#8217;s only class-dump, but I&#8217;ll probably add some new, smaller projects, and maybe even some of my older code once it&#8217;s been
updated to work with Mac OS X.  (I said it was old!)</p>
]]></content>
  </entry>
  
</feed>
