<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Doxyfile</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -2,3 +2,4 @@ build
 .DS_Store
 *.pbxuser
 *.mode1v3
+Documentation/*</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -28,6 +28,9 @@
 
 #import &lt;Foundation/Foundation.h&gt;
 
+/*!
+ Protocol for keychain storage. 
+ */
 @protocol GHKeychainStore &lt;NSObject&gt;
 + (id)keychain;
 - (NSString *)secretFromKeychain:(NSString *)key serviceName:(NSString *)serviceName error:(NSError **)error;</diff>
      <filename>Classes/GHKeychainStore.h</filename>
    </modified>
    <modified>
      <diff>@@ -56,29 +56,57 @@ va_end(args); \
 - (void)gh_invokeOnMainThread:(BOOL)waitUntilDone;
 
 /*!
- Invoke selector on target with multiple arguments.
+ Invoke target selector with multiple arguments.
  @param target Invocation target
  @param selector Method
  @param withObjects (Variable) Arguments list
  */
 + (id)gh_invokeWithTarget:(id)target selector:(SEL)selector withObjects:object, ...;
 
+/*!
+ Invoke target selector with multiple arguments.
+ @param target Invocation target
+ @param selector Method
+ @param arguments Arguments list
+ */
 + (id)gh_invokeWithTarget:(id)target selector:(SEL)selector arguments:(NSArray *)arguments;
 
+/*!
+ Invoke target selector with multiple arguments.
+ @param target Invocation target
+ @param selector Method
+ @param afterDelay Time interval for delay (in seconds)
+ @param arguments Arguments list
+ */
 + (id)gh_invokeWithTarget:(id)target selector:(SEL)selector afterDelay:(NSTimeInterval)delay arguments:(NSArray *)arguments;
 
 /*!
- Invoke selector on target on main thread with multiple arguments.
+ Invoke target selector on main thread with multiple arguments.
  Use [NSNull null] for nil arguments.
- @param target
- @param selector
- @param waitUntilDone
- @param withObjects
+ @param target Target
+ @param selector Action
+ @param waitUntilDone Whether to wait for call to finish
+ @param withObjects Nil terminated list of (object) arguments; Use [NSNull null] for nil arguments
  */
 + (void)gh_invokeTargetOnMainThread:(id)target selector:(SEL)selector waitUntilDone:(BOOL)waitUntilDone withObjects:object, ...;
 
+/*!
+ Invoke target selector on main thread with multiple arguments.
+ @param target Target
+ @param selector Action
+ @param waitUntilDone Whether to wait for call to finish
+ @param arguments Arguments list
+ */
 + (void)gh_invokeTargetOnMainThread:(id)target selector:(SEL)selector waitUntilDone:(BOOL)waitUntilDone arguments:(NSArray *)arguments;
 
+/*!
+Invoke target selector on main thread with multiple arguments.
+ @param target Target
+ @param selector Action
+ @param waitUntilDone Whether to wait for call to finish
+ @param afterDelay Time interval for delay (in seconds)
+ @param arguments Arguments list
+ */
 + (void)gh_invokeTargetOnMainThread:(id)target selector:(SEL)selector waitUntilDone:(BOOL)waitUntilDone afterDelay:(NSTimeInterval)delay arguments:(NSArray *)arguments;
 
 /*!
@@ -102,12 +130,3 @@ va_end(args); \
 + (NSInvocation *)gh_invocationWithTarget:target selector:(SEL)selector hasReturnValue:(BOOL *)hasReturnValue arguments:(NSArray *)arguments;
 
 @end
-
-
-@interface GHArg : NSObject {
-	void *_value;
-}
-
-+ (GHArg *)argWithInteger:(NSInteger)n;
-
-@end</diff>
      <filename>Classes/GHNSInvocation+Utils.h</filename>
    </modified>
    <modified>
      <diff>@@ -66,21 +66,34 @@
  */
 
 /*!
- Proxy that invokes on a separate thread, or with a delay.
+ Proxy that allows invocation on a separate thread, or with a delay.
  
- Used with GHNSObject+Invocation:
+ Use with the GHNSObject+Invocation category:
  
  @code
- [[self gh_proxyAfterDelay:0.1] foo:1];
- [[self gh_proxyOnThread:someThread waitUntilDone:NO] bar:2 foo:YES];
+ NSMutableArray *array = ...; 
+ // Adds object to array after 5 seconds
+ [[array gh_proxyAfterDelay:5.0] addObject:@&quot;test&quot;];
+ 
+ 
+ NSThread *thread = ...
+ // Remove all objects from another thread
+ [[array gh_proxyOnThread:thread waitUntilDone:NO] removeAllObjects];
  @endcode
  
- @code
- GHNSInvocationProxy *proxy = [GHNSInvocationProxy invocation];
- proxy.target = bar;
- proxy.thread = thread;
- proxy.waitUntilDone = waitUntilDone;
- [proxy foo:1];
+ Create invocation proxy for a NSMutableArray.
+ 
+ @code 
+ NSMutableArray *array = ...;
+ NSThread *thread = ...
+ 
+ GHNSInvocationProxy *arrayProxy = [GHNSInvocationProxy invocation];
+ arrayProxy.target = array;
+ arrayProxy.thread = thread;
+ arrayProxy.waitUntilDone = NO;
+
+ // Performs method on thread and doesn't wait for return
+ [arrayProxy addObject:@&quot;test&quot;];
  @endcode
  */
 @interface GHNSInvocationProxy : NSProxy {
@@ -102,8 +115,17 @@
 @property (assign, nonatomic) BOOL waitUntilDone;
 @property (assign, nonatomic) NSTimeInterval delay;
 
+/*!
+ Create autoreleased empty invocation proxy.
+ @result Invocation proxy
+ */
 + (id)invocation;
 
+/*!
+ Create invocation proxy with target.
+ @param target
+ @result Invocation proxy
+ */
 - (id)prepareWithInvocationTarget:(id)target;
 
 @end</diff>
      <filename>Classes/GHNSInvocationProxy.h</filename>
    </modified>
    <modified>
      <diff>@@ -44,7 +44,6 @@
 	return [self gtm_stringByReplacingMatchesOfPattern:@&quot;^[ \t]+&quot; withReplacement:@&quot;&quot;];
 }
 
-
 - (BOOL)gh_isBlank {
   return ([@&quot;&quot; isEqualToString:[self gh_strip]]);
 }
@@ -78,8 +77,9 @@ static NSDictionary *gh_gTruncateMiddle = nil;
  @result Mime type
 */
 - (NSString *)gh_mimeTypeForExtension {
-  CFStringRef uti = UTTypeCreatePreferredIdentifierForTag (kUTTagClassFilenameExtension, (CFStringRef)self, NULL);    
-  NSString *mime = (NSString *)UTTypeCopyPreferredTagWithClass (uti, kUTTagClassMIMEType);
+	// TODO(gabe): Doesn't look like css extension gets the mime type?
+  CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)self, NULL);    
+  NSString *mime = (NSString *)UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType);
   CFRelease(uti);
   return [mime autorelease];
 }</diff>
      <filename>Classes/GHNSString+Utils.m</filename>
    </modified>
    <modified>
      <diff>@@ -163,7 +163,7 @@
  @param path Path to open
  @abstract Open file path
  */
-+ (void)gh_openFile:(NSString *)path;
++ (BOOL)gh_openFile:(NSString *)path;
 
 /*!
  Opens directory of file at path (or the path itself if it is a directory),</diff>
      <filename>Classes/GHNSURL+Utils.h</filename>
    </modified>
    <modified>
      <diff>@@ -144,10 +144,10 @@
   [pasteboard setString:[self absoluteString] forType:NSStringPboardType];
 }
 
-+ (void)gh_openFile:(NSString *)path {
++ (BOOL)gh_openFile:(NSString *)path {
   NSString *fileURL = [NSString stringWithFormat:@&quot;file://%@&quot;, [self gh_encode:path]];
   NSURL *url = [NSURL URLWithString:fileURL];
-  [[NSWorkspace sharedWorkspace] openURL:url];
+  return [[NSWorkspace sharedWorkspace] openURL:url];
 }
 
 + (void)gh_openContainingFolder:(NSString *)path {</diff>
      <filename>Classes/GHNSURL+Utils.m</filename>
    </modified>
    <modified>
      <diff>@@ -24,6 +24,8 @@
 //  OTHER DEALINGS IN THE SOFTWARE.
 //
 
+/*! @defgroup iPhone */
+
 #import &quot;GHUIColor+Utils.h&quot;
 #import &quot;GHUIAlertView+Utils.h&quot;
 #import &quot;GHUIView+Utils.h&quot;</diff>
      <filename>Classes/IPhone/GHKitIPhone.h</filename>
    </modified>
    <modified>
      <diff>@@ -42,6 +42,10 @@ enum {
 };
 typedef NSUInteger GHNSStringDrawOptions;
 
+/*!
+ UIKit utility category for NSString
+ @ingroup iPhone
+ */
 @interface NSString (GHUIKitUtils)
 
 /*!</diff>
      <filename>Classes/IPhone/GHNSString+UIKitUtils.h</filename>
    </modified>
    <modified>
      <diff>@@ -28,10 +28,19 @@
 
 #import &lt;Foundation/Foundation.h&gt;
 
-
+/*! 
+ Utility category for UIAlertView.
+ 
+ TODO(gabe): This is obsoleted by YelpKit which is not released yet.
+ @ingroup iPhone
+ */
 @interface UIAlertView (GHUtils)
 
-// Show alert with OK button
+/*!
+ Show alert with OK button
+ @param title
+ @param message
+ */
 + (void)showAlertWithTitle:(NSString *)title message:(NSString *)message;
 
 @end</diff>
      <filename>Classes/IPhone/GHUIAlertView+Utils.h</filename>
    </modified>
    <modified>
      <diff>@@ -40,6 +40,12 @@ typedef enum {
 } GHUIButtonShadingType;
 	
 
+/*! 
+ Custom UI button.
+ 
+ TODO(gabe): This is obsoleted by YelpKit which is not released yet.
+ @ingroup iPhone
+ */
 @interface GHUIButton : UIControl {
 
 	NSString *title_;	</diff>
      <filename>Classes/IPhone/GHUIButton.h</filename>
    </modified>
    <modified>
      <diff>@@ -44,6 +44,10 @@ typedef struct {
 } GH_HSV;
 
 
+/*!
+ Utility category for UIColor.
+ @ingroup iPhone
+ */
 @interface UIColor (GHUtils)
 
 - (GH_RGBA)gh_rgba;</diff>
      <filename>Classes/IPhone/GHUIColor+Utils.h</filename>
    </modified>
    <modified>
      <diff>@@ -26,9 +26,16 @@
 //  OTHER DEALINGS IN THE SOFTWARE.
 //
 
-// Utilities for UIKit
+/*!
+ Utilities for UIKit.
+ @ingroup iPhone
+ */
 @interface GHUIKitUtils : NSObject { }
 
+/*!
+ Get the path to the applications Documents directory.
+ @result Full path to writable documents directory
+ */
 + (NSString *)documentsDirectory;
 
 @end</diff>
      <filename>Classes/IPhone/GHUIKitUtils.h</filename>
    </modified>
    <modified>
      <diff>@@ -29,19 +29,24 @@
 
 #import &lt;Foundation/Foundation.h&gt;
 
-// WARNING: The willPop delegates aren't fully tested!
+/*!
+ To enable the pop delegate, you need to setup the swizzled (aliased) methods by calling:
+ 
+ @code
+   [UINavigationController addPopDelegate:nil];
+ @endcode
+ 
+ Adds delegate method for UINavigationControllerDelegate
+ 
+ @code
+  - (void)navigationController:(UINavigationController *)navigationController 
+         didPopViewControllers:(NSArray *)viewControllers animated:(BOOL)animated;
 
-// To enable the pop delegate, you need to setup the swizzled (aliased) methods by calling:
-//   [UINavigationController addPopDelegate:nil];
-//
-// Adds delegate method for UINavigationControllerDelegate
-//
-//  - (void)navigationController:(UINavigationController *)navigationController 
-//         didPopViewControllers:(NSArray *)viewControllers animated:(BOOL)animated;
-//
-//  - (void)navigationController:(UINavigationController *)navigationController 
-//        willPopViewControllers:(NSArray *)viewControllers animated:(BOOL)animated;
-//
+  - (void)navigationController:(UINavigationController *)navigationController 
+        willPopViewControllers:(NSArray *)viewControllers animated:(BOOL)animated;
+ @endcode
+ WARNING: The willPop delegates aren't fully tested!
+ */
 @interface UINavigationController (GHPopDelegate)
 
 - (NSArray *)_popToRootViewControllerAnimated:(BOOL)animated;</diff>
      <filename>Classes/IPhone/GHUINavigationController+PopDelegate.h</filename>
    </modified>
    <modified>
      <diff>@@ -27,8 +27,16 @@
 //
 
 
+/*!
+ Utility category for UINavigationController.
+ @ingroup iPhone
+ */
 @interface UINavigationController (GHUtils)
 
+/*!
+ Clear the list of view controllers and set the specified view controller as the root.
+ @param controller New root controller
+ */
 - (void)gh_resetWithRootController:(UIViewController *)controller;
 
 @end</diff>
      <filename>Classes/IPhone/GHUINavigationController+Utils.h</filename>
    </modified>
    <modified>
      <diff>@@ -28,6 +28,10 @@
 
 #import &lt;Foundation/Foundation.h&gt;
 
+/*!
+ Custom responder protocol used by GHUITextField.
+ @ingroup iPhone
+ */
 @protocol GHUIResponder 
 // We need a different return type than nextResponder, so we use nextToRespond and previousToRespond,
 // instead of using UIResponder.</diff>
      <filename>Classes/IPhone/GHUIResponder.h</filename>
    </modified>
    <modified>
      <diff>@@ -26,9 +26,16 @@
 //  OTHER DEALINGS IN THE SOFTWARE.
 //
 
-
+/*!
+ Utility category for UITableView.
+ @ingroup iPhone
+ */
 @interface UITableView (GHUtils)
 
+/*!
+ Deselect currently selected row.
+ @param animated
+ */
 - (void)gh_deselectRow:(BOOL)animated;
 
 @end</diff>
      <filename>Classes/IPhone/GHUITableView+Utils.h</filename>
    </modified>
    <modified>
      <diff>@@ -32,7 +32,9 @@
 @implementation UITableView (GHUtils)
 
 - (void)gh_deselectRow:(BOOL)animated {
-	[self deselectRowAtIndexPath:[self indexPathForSelectedRow] animated:animated];
+	NSIndexPath *indexPath = [self indexPathForSelectedRow];
+	if (indexPath)
+		[self deselectRowAtIndexPath:indexPath animated:animated];
 }
 
 @end</diff>
      <filename>Classes/IPhone/GHUITableView+Utils.m</filename>
    </modified>
    <modified>
      <diff>@@ -26,7 +26,12 @@
 //  OTHER DEALINGS IN THE SOFTWARE.
 //
 
-// A UITableViewCell wrapper for a UIView
+/*!
+ UITableViewCell that wraps a UIView.
+
+ TODO(gabe): This is obsoleted by YelpKit which is not released yet.
+ @ingroup iPhone
+ */
 @interface GHUITableViewCell : UITableViewCell { 
 	UIView *cellView_;
 }</diff>
      <filename>Classes/IPhone/GHUITableViewCell.h</filename>
    </modified>
    <modified>
      <diff>@@ -27,40 +27,48 @@
 //
 
 
-// A table view (data source and view) delegate that shows an alternate view.
-// This allows you to temporarily set your table view delegate to this special
-// status delegate (that can show &quot;Loading...&quot;, for example).
-//
-// Its a cool pattern originally from the Min Kim.
-// 
-// Create the delegate with a view. GHUITableViewStatusView is an example status
-// view with an activity indicator and loading label. You can create your own
-// view; It just has to implement GHUITableViewStatusView protocol. 
-// 
-// For example, in your UITableViewController subclass, create the GHUITableViewStatusDelegate:
-//
-//	 GHUITableViewStatusView *statusView = [[GHUITableViewStatusView alloc] init];
-//   statusDelegate_ = [[GHUITableViewStatusDelegate alloc] initWithStatusView:statusView]; 
-//	 [statusView release];
-//
-// Then you can swap your existing table view delegate for the status delegate, and back again, while
-// keeping your real datasource and view delegates from being polluted. Here is an example of what
-// that might look like:
-//
-// - (void)setStatusDelegateEnabled:(BOOL)enabled {
-//   statusDelegate_.loading = enabled;
-//   if (enabled) {
-//			self.tableView.dataSource = statusDelegate_;
-//			self.tableView.delegate = statusDelegate_;		
-//			[self.tableView setUserInteractionEnabled:NO];
-//		} else {
-//			self.tableView.dataSource = self;
-//			self.tableView.delegate = self;		
-//			[self.tableView setUserInteractionEnabled:YES];
-//		}	
-//		[self.tableView reloadData];
-//  }
-//
+/*!
+ A table view (data source and view) delegate that shows an alternate view.
+ This allows you to temporarily set your table view delegate to this special
+ status delegate (that can show &quot;Loading...&quot;, for example).
+
+ Its a cool pattern originally from the Min Kim.
+ 
+ Create the delegate with a view. GHUITableViewStatusView is an example status
+ view with an activity indicator and loading label. You can create your own
+ view; It just has to implement GHUITableViewStatusView protocol. 
+ 
+ For example, in your UITableViewController subclass, create the GHUITableViewStatusDelegate:
+
+ @code
+	 GHUITableViewStatusView *statusView = [[GHUITableViewStatusView alloc] init];
+   statusDelegate_ = [[GHUITableViewStatusDelegate alloc] initWithStatusView:statusView]; 
+	 [statusView release];
+ @endcode
+
+ Then you can swap your existing table view delegate for the status delegate, and back again, while
+ keeping your real datasource and view delegates from being polluted. Here is an example of what
+ that might look like:
+
+ @code
+ - (void)setStatusDelegateEnabled:(BOOL)enabled {
+   statusDelegate_.loading = enabled;
+   if (enabled) {
+			self.tableView.dataSource = statusDelegate_;
+			self.tableView.delegate = statusDelegate_;		
+			[self.tableView setUserInteractionEnabled:NO];
+		} else {
+			self.tableView.dataSource = self;
+			self.tableView.delegate = self;		
+			[self.tableView setUserInteractionEnabled:YES];
+		}	
+		[self.tableView reloadData];
+ }
+ @endcode
+ TODO(gabe): This is obsoleted by YelpKit which is not released yet.
+ @ingroup iPhone
+ */
+
 
 @protocol GHUITableViewStatusView &lt;NSObject&gt;
 - (void)setText:(NSString *)text;</diff>
      <filename>Classes/IPhone/GHUITableViewStatusDelegate.h</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,10 @@
 
 #import &quot;GHUIResponder.h&quot;
 
-// Adds GHUIResponder implementation
+/*!
+ Custom GHUITextField that adds GHUIResponder implementation.
+ @ingroup iPhone
+ */
 @interface GHUITextField : UITextField &lt;GHUIResponder&gt; {
 	id&lt;GHUIResponder&gt; nextToRespond_; // weak
 	id&lt;GHUIResponder&gt; previousToRespond_; // weak</diff>
      <filename>Classes/IPhone/GHUITextField.h</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,10 @@
 
 #import &lt;Foundation/Foundation.h&gt;
 
-
+/*!
+ Utility category for UIView.
+ @ingroup iPhone
+ */
 @interface UIView (GHUtils)
 
 - (NSInteger)gh_removeAllSubviews;</diff>
      <filename>Classes/IPhone/GHUIView+Utils.h</filename>
    </modified>
    <modified>
      <diff>@@ -43,7 +43,7 @@
 		005B0AA00F22B7A80004F351 /* GHNSInvocation+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 005B0A9E0F22B7A80004F351 /* GHNSInvocation+Utils.m */; };
 		0071E6140FB361A1001D2CF3 /* GHUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0071E6130FB361A1001D2CF3 /* GHUnit.framework */; };
 		0071E6190FB361A7001D2CF3 /* GHUnit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0071E6130FB361A1001D2CF3 /* GHUnit.framework */; };
-		0071EE370FB63AE7001D2CF3 /* GHNSInvocationProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0071EE350FB63AE7001D2CF3 /* GHNSInvocationProxy.h */; };
+		0071EE370FB63AE7001D2CF3 /* GHNSInvocationProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0071EE350FB63AE7001D2CF3 /* GHNSInvocationProxy.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		0071EE380FB63AE7001D2CF3 /* GHNSInvocationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0071EE360FB63AE7001D2CF3 /* GHNSInvocationProxy.m */; };
 		007F598E0EF2438900B3005D /* GHNSArray+Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 007F59850EF2438900B3005D /* GHNSArray+Utils.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		007F598F0EF2438900B3005D /* GHNSArray+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 007F59860EF2438900B3005D /* GHNSArray+Utils.m */; };
@@ -461,7 +461,6 @@
 				089C1665FE841158C02AAC07 /* Resources */,
 				0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
 				034768DFFF38A50411DB9C8B /* Products */,
-				00AF10D20F2D5179009F0ABA /* GHKitTests-Info.plist */,
 			);
 			name = GHKit;
 			sourceTree = &quot;&lt;group&gt;&quot;;
@@ -479,6 +478,7 @@
 			isa = PBXGroup;
 			children = (
 				8DC2EF5A0486A6940098B216 /* Info.plist */,
+				00AF10D20F2D5179009F0ABA /* GHKitTests-Info.plist */,
 				089C1666FE841158C02AAC07 /* InfoPlist.strings */,
 			);
 			name = Resources;
@@ -487,11 +487,11 @@
 		08FB77AEFE84172EC02AAC07 /* Classes */ = {
 			isa = PBXGroup;
 			children = (
+				000E760D0FA61B830085BC13 /* Swizzle */,
 				0071EE350FB63AE7001D2CF3 /* GHNSInvocationProxy.h */,
 				0071EE360FB63AE7001D2CF3 /* GHNSInvocationProxy.m */,
 				00150F2D0FAD1281009A8633 /* GHLogger.h */,
 				00150F2E0FAD1281009A8633 /* GHLogger.m */,
-				000E760D0FA61B830085BC13 /* Swizzle */,
 				52857C8E0E1997B50011DA5C /* GHKit.h */,
 				00BB7AD80F3173BB00B3924D /* GHKitMacros.h */,
 				52857C8F0E1997B50011DA5C /* GHNSDate+Parsing.h */,</diff>
      <filename>GHKit.xcodeproj/project.pbxproj</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,7 @@
 		00264A920F91608F007E9425 /* GHUnitIPhoneTestMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 00264A8F0F91608F007E9425 /* GHUnitIPhoneTestMain.m */; };
 		00264A930F91608F007E9425 /* libGHUnitIPhone.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00264A900F91608F007E9425 /* libGHUnitIPhone.a */; };
 		00264A940F91608F007E9425 /* RunTests.sh in Resources */ = {isa = PBXBuildFile; fileRef = 00264A910F91608F007E9425 /* RunTests.sh */; };
+		002CDE4E0FBD04D40071FB1E /* GHUITableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 002CDE4D0FBD04D40071FB1E /* GHUITableViewCell.m */; };
 		0058AACE0EF8C18600C44386 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0058AACD0EF8C18600C44386 /* Security.framework */; };
 		0058AB030EF8C61400C44386 /* GHKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 0058AB020EF8C61400C44386 /* GHKeychainStore.m */; };
 		0064CAE70FA04B6D00E5FA70 /* GHCLUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0064CAE60FA04B6D00E5FA70 /* GHCLUtils.m */; };
@@ -57,7 +58,6 @@
 		00DB2ADA0EECA29900383FB6 /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = 00DB2AC60EECA29900383FB6 /* sha1.c */; };
 		00DB2B110EECA51400383FB6 /* GHUINavigationController+PopDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 00DB2B100EECA51400383FB6 /* GHUINavigationController+PopDelegate.m */; };
 		00E248430F15E37D00C06C63 /* GHUIKitUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E2483E0F15E37D00C06C63 /* GHUIKitUtils.m */; };
-		00E248440F15E37D00C06C63 /* GHUITableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E248400F15E37D00C06C63 /* GHUITableViewCell.m */; };
 		00E248450F15E37D00C06C63 /* GHUITableViewStatusDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E248420F15E37D00C06C63 /* GHUITableViewStatusDelegate.m */; };
 		00E24A390F16BEBD00C06C63 /* GHNSString+UIKitUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E24A380F16BEBD00C06C63 /* GHNSString+UIKitUtils.m */; };
 		00E7119A0F1C82BF00A4EEBA /* GHUINavigationController+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E711970F1C82BF00A4EEBA /* GHUINavigationController+Utils.m */; };
@@ -93,6 +93,8 @@
 		00264A8F0F91608F007E9425 /* GHUnitIPhoneTestMain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHUnitIPhoneTestMain.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		00264A900F91608F007E9425 /* libGHUnitIPhone.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGHUnitIPhone.a; sourceTree = &quot;&lt;group&gt;&quot;; };
 		00264A910F91608F007E9425 /* RunTests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = RunTests.sh; sourceTree = &quot;&lt;group&gt;&quot;; };
+		002CDE4C0FBD04D40071FB1E /* GHUITableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHUITableViewCell.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		002CDE4D0FBD04D40071FB1E /* GHUITableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHUITableViewCell.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		0058AACD0EF8C18600C44386 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
 		0058AB010EF8C61400C44386 /* GHKeychainStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHKeychainStore.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		0058AB020EF8C61400C44386 /* GHKeychainStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHKeychainStore.m; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -180,8 +182,6 @@
 		00DB2B100EECA51400383FB6 /* GHUINavigationController+PopDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = &quot;GHUINavigationController+PopDelegate.m&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		00E2483D0F15E37D00C06C63 /* GHUIKitUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHUIKitUtils.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		00E2483E0F15E37D00C06C63 /* GHUIKitUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHUIKitUtils.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		00E2483F0F15E37D00C06C63 /* GHUITableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHUITableViewCell.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		00E248400F15E37D00C06C63 /* GHUITableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHUITableViewCell.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		00E248410F15E37D00C06C63 /* GHUITableViewStatusDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHUITableViewStatusDelegate.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		00E248420F15E37D00C06C63 /* GHUITableViewStatusDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHUITableViewStatusDelegate.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		00E24A370F16BEBD00C06C63 /* GHNSString+UIKitUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = &quot;GHNSString+UIKitUtils.h&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -316,10 +316,10 @@
 		00DB2A9B0EECA29900383FB6 /* Classes */ = {
 			isa = PBXGroup;
 			children = (
-				00A943790FA6F4A10080CFF3 /* GHNSBundle+Utils.h */,
-				00A9437A0FA6F4A10080CFF3 /* GHNSBundle+Utils.m */,
 				00A9437B0FA6F4A10080CFF3 /* Swizzle */,
 				00DB2AC50EECA29900383FB6 /* IPhone */,
+				00A943790FA6F4A10080CFF3 /* GHNSBundle+Utils.h */,
+				00A9437A0FA6F4A10080CFF3 /* GHNSBundle+Utils.m */,
 				00CDDDFB0F77023C0089C60E /* GHNSDate+Utils.h */,
 				00CDDDFC0F77023C0089C60E /* GHNSDate+Utils.m */,
 				00CDDDFD0F77023C0089C60E /* GHNSDictionary+Utils.h */,
@@ -384,12 +384,12 @@
 				00E711990F1C82BF00A4EEBA /* GHUITableView+Utils.m */,
 				00E2483D0F15E37D00C06C63 /* GHUIKitUtils.h */,
 				00E2483E0F15E37D00C06C63 /* GHUIKitUtils.m */,
-				00E2483F0F15E37D00C06C63 /* GHUITableViewCell.h */,
-				00E248400F15E37D00C06C63 /* GHUITableViewCell.m */,
+				002CDE4C0FBD04D40071FB1E /* GHUITableViewCell.h */,
+				002CDE4D0FBD04D40071FB1E /* GHUITableViewCell.m */,
 				00E248410F15E37D00C06C63 /* GHUITableViewStatusDelegate.h */,
 				00E248420F15E37D00C06C63 /* GHUITableViewStatusDelegate.m */,
-				00A97A100F0C424400B083F6 /* GHUIButton.m */,
 				00A97A110F0C424400B083F6 /* GHUIButton.h */,
+				00A97A100F0C424400B083F6 /* GHUIButton.m */,
 				009129540F01752E00338B5E /* GHUIAlertView+Utils.h */,
 				009129550F01752E00338B5E /* GHUIAlertView+Utils.m */,
 				009129560F01752E00338B5E /* GHUIView+Utils.h */,
@@ -570,7 +570,6 @@
 				00A97A140F0C424400B083F6 /* GHUIButton.m in Sources */,
 				00A97A1C0F0C436700B083F6 /* GHCGUtils.m in Sources */,
 				00E248430F15E37D00C06C63 /* GHUIKitUtils.m in Sources */,
-				00E248440F15E37D00C06C63 /* GHUITableViewCell.m in Sources */,
 				00E248450F15E37D00C06C63 /* GHUITableViewStatusDelegate.m in Sources */,
 				00E24A390F16BEBD00C06C63 /* GHNSString+UIKitUtils.m in Sources */,
 				008488CF0F19944900EB7732 /* GHUITextField.m in Sources */,
@@ -599,6 +598,7 @@
 				00A9436E0FA6F4640080CFF3 /* SFHFKeychainUtils.m in Sources */,
 				00A9437E0FA6F4A10080CFF3 /* GHNSBundle+Utils.m in Sources */,
 				00A9437F0FA6F4A10080CFF3 /* GHNSObject+Swizzle.m in Sources */,
+				002CDE4E0FBD04D40071FB1E /* GHUITableViewCell.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};</diff>
      <filename>GHKitIPhone.xcodeproj/project.pbxproj</filename>
    </modified>
    <modified>
      <diff>@@ -19,9 +19,9 @@
 	&lt;key&gt;CFBundleSignature&lt;/key&gt;
 	&lt;string&gt;GABE&lt;/string&gt;
 	&lt;key&gt;CFBundleVersion&lt;/key&gt;
-	&lt;string&gt;0.3.4&lt;/string&gt;
+	&lt;string&gt;0.3.7&lt;/string&gt;
 	&lt;key&gt;NSMainNibFile&lt;/key&gt;
-	&lt;string&gt;GHUnitIPhone&lt;/string&gt;
+	&lt;string&gt;&lt;/string&gt;
 	&lt;key&gt;NSPrincipalClass&lt;/key&gt;
 	&lt;string&gt;&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Info.plist</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,9 @@ COMMAND=xcodebuild
 default:
 	$(COMMAND) -target GHKit -configuration Debug -sdk macosx10.5 -project GHKit.xcodeproj
 
+docs:
+	/Applications/Doxygen.app/Contents/Resources/doxygen
+
 # If you need to clean a specific target/configuration: $(COMMAND) -target $(TARGET) -configuration DebugOrRelease -sdk $(SDK) clean
 clean:
 	-rm -rf build/*</diff>
      <filename>Makefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,23 @@
 ## Download
 
-[GHKit-0.3.6.zip](https://rel.me.s3.amazonaws.com/gh-kit/GHKit-0.3.6.zip) (2009/05/02)
\ No newline at end of file
+[GHKit-0.3.6.zip](https://rel.me.s3.amazonaws.com/gh-kit/GHKit-0.3.6.zip) (2009/05/02)
+
+## Installation
+
+There are a few options. You can install it globally in /Library/Frameworks or with a little extra effort embed it with your project.
+
+### Installing in /Library/Frameworks
+
+- Copy `GHKit.framework` to `/Library/Frameworks/`
+- In the `Target Info` window, `General` tab:
+	- Add a linked library, under `Mac OS X 10.5 SDK` section, select `GHKit.framework`
+
+### Installing in your project
+
+- Copy `GHKit.framework` to your project directory (maybe in MyProject/Frameworks/.)
+- Add the `GHKit.framekwork` (from MyProject/Frameworks/) to the your target. It should now be visible as a `Linked Framework` in the target. 
+- Under Build Settings, add `@loader_path/../Frameworks` to `Runpath Search Paths`
+- Add `New Build Phase` | `New Copy Files Build Phase`. 
+	- Change the Destination to `Frameworks`.
+	- Drag `GHKit.framework` into the the build phase
+	- Make sure the phase appears before any `Run Script` phases </diff>
      <filename>README.md</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>003fc741bf0ecce546e2b543526eae03979eda1d</id>
    </parent>
  </parents>
  <author>
    <name>Gabriel Handford</name>
    <email>gabrielh@gmail.com</email>
  </author>
  <url>http://github.com/gabriel/gh-kit/commit/a2a0700a1ffb4971a28de7237be096b88fe9f228</url>
  <id>a2a0700a1ffb4971a28de7237be096b88fe9f228</id>
  <committed-date>2009-05-14T19:15:07-07:00</committed-date>
  <authored-date>2009-05-14T19:15:07-07:00</authored-date>
  <message>Updating documentation</message>
  <tree>b5cc1b29326b5eb78f01649648b5134e19738a48</tree>
  <committer>
    <name>Gabriel Handford</name>
    <email>gabrielh@gmail.com</email>
  </committer>
</commit>
