New: xcc --reset resets the Xcode support before opening the project.

This will help in cases where the project is way out of sync and crashes XCC.
This commit is contained in:
Aparajita Fishman
2013-05-12 16:18:41 -04:00
parent 574672f15f
commit e047212f5f
12 changed files with 261 additions and 276 deletions
+6 -8
View File
@@ -24,16 +24,16 @@
@interface AppController : NSObject <NSApplicationDelegate, NSMenuDelegate>
@property (strong) IBOutlet NSMenu *statusMenu;
@property (assign) IBOutlet NSMenuItem *menuItemHistory;
@property (assign) IBOutlet NSMenuItem *menuItemOpenProject;
@property (assign) IBOutlet NSMenuItem *menuItemShowInFinder;
@property (strong) IBOutlet NSMenu *statusMenu;
@property (unsafe_unretained) IBOutlet NSMenuItem *menuItemHistory;
@property (unsafe_unretained) IBOutlet NSMenuItem *menuItemOpenProject;
@property (unsafe_unretained) IBOutlet NSMenuItem *menuItemShowInFinder;
@property (strong) IBOutlet NSPanel *aboutWindow;
@property (strong) IBOutlet NSWindow *preferencesWindow;
@property (strong) IBOutlet NSWindow *helpWindow;
@property (assign) IBOutlet PDFView *helpView;
@property (strong) IBOutlet NSWindow *helpWindow;
@property (unsafe_unretained) IBOutlet PDFView *helpView;
@property (strong) IBOutlet NSUserDefaultsController *preferencesController;
@property (strong) IBOutlet XcodeCapp *xcc;
@@ -44,7 +44,5 @@
- (IBAction)openHelp:(id)aSender;
- (IBAction)openAbout:(id)aSender;
- (BOOL)loadProjectAtPath:(NSString *)path;
@end
+21 -19
View File
@@ -39,6 +39,7 @@ AppController *SharedAppControllerInstance = nil;
@property NSString *finderName;
@property BOOL appFinishedLaunching;
@property NSString *pathToOpenAtLaunch;
@property NSFileManager *fm;
@end
@@ -55,6 +56,7 @@ AppController *SharedAppControllerInstance = nil;
- (void)awakeFromNib
{
SharedAppControllerInstance = self;
self.fm = [NSFileManager defaultManager];
[self registerDefaultPreferences];
[self initLogging];
@@ -77,7 +79,7 @@ AppController *SharedAppControllerInstance = nil;
NSString *path = filename.stringByStandardizingPath;
if (self.appFinishedLaunching)
return [self loadProjectAtPath:path];
return [self loadProjectAtPath:path reopening:YES];
else
self.pathToOpenAtLaunch = path;
}
@@ -110,7 +112,7 @@ AppController *SharedAppControllerInstance = nil;
return;
}
// If we were opened from the command line, xcc.projectPath will be set.
// If we were opened from the command line, self.pathToOpenAtLaunch will be set.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (!self.pathToOpenAtLaunch)
@@ -124,7 +126,7 @@ AppController *SharedAppControllerInstance = nil;
if (self.pathToOpenAtLaunch)
{
if ([[NSFileManager defaultManager] fileExistsAtPath:self.pathToOpenAtLaunch])
[self loadProjectAtPath:self.pathToOpenAtLaunch];
[self loadProjectAtPath:self.pathToOpenAtLaunch reopening:YES];
else
[defaults removeObjectForKey:kDefaultLastOpenedPath];
}
@@ -170,9 +172,15 @@ AppController *SharedAppControllerInstance = nil;
[DDLogLevel setLogLevel:LOG_LEVEL_VERBOSE];
#else
[DDLog addLogger:[DDASLLogger sharedInstance]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[DDLogLevel setLogLevel:(int)[defaults integerForKey:kDefaultLogLevel]];
int logLevel = (int)[defaults integerForKey:kDefaultLogLevel];
NSUInteger modifiers = [NSEvent modifierFlags];
if (modifiers & NSAlternateKeyMask)
logLevel = LOG_LEVEL_VERBOSE;
[DDLogLevel setLogLevel:logLevel];
#endif
}
@@ -341,7 +349,7 @@ AppController *SharedAppControllerInstance = nil;
return;
NSString *projectPath = [[openPanel.URLs[0] path] stringByStandardizingPath];
[self loadProjectAtPath:projectPath];
[self loadProjectAtPath:projectPath reopening:YES];
}
- (void)closeProject:(id)aSender
@@ -357,7 +365,7 @@ AppController *SharedAppControllerInstance = nil;
- (void)switchToProject:(NSMenuItem *)aSender
{
[self loadProjectAtPath:aSender.representedObject];
[self loadProjectAtPath:aSender.representedObject reopening:NO];
}
- (void)clearProjectHistory:(id)aSender
@@ -405,22 +413,16 @@ AppController *SharedAppControllerInstance = nil;
- (BOOL)validateMenuItem:(NSMenuItem *)aMenuItem
{
NSMenu *menu = aMenuItem.menu;
if (aMenuItem == self.menuItemOpenProject)
{
return !!self.xcc.projectPath;
}
else if (menu == self.recentMenu)
if (menu == self.recentMenu)
{
// Disable recent items if they don't exist or are not directories,
// but enable the Clear History item, which is last in the menu.
if ([menu indexOfItem:aMenuItem] == menu.itemArray.count - 1)
return YES;
NSFileManager *fm = [NSFileManager defaultManager];
BOOL exists, isDirectory;
exists = [fm fileExistsAtPath:aMenuItem.representedObject isDirectory:&isDirectory];
BOOL isDirectory;
BOOL exists = [self.fm fileExistsAtPath:aMenuItem.representedObject isDirectory:&isDirectory];
return exists && isDirectory;
}
@@ -437,9 +439,9 @@ AppController *SharedAppControllerInstance = nil;
#pragma mark - Private Helpers
- (BOOL)loadProjectAtPath:(NSString *)path
- (BOOL)loadProjectAtPath:(NSString *)path reopening:(BOOL)reopen
{
if ([self.xcc.projectPath isEqualToString:path])
if (!reopen && [self.xcc.projectPath isEqualToString:path])
return YES;
[self closeProject:self];
+2 -2
View File
@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>3.0.4</string>
<string>3.0.5</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>3.0.4</string>
<string>3.0.5</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>LSUIElement</key>
Binary file not shown.
+4 -1
View File
@@ -55,7 +55,7 @@ extern NSString * const XCCProjectDidFinishLoadingNotification;
still queued from the previous load, we compare the projectId returned by a notification
with the current projectId. If they don't match, we let the notification drain.
*/
@property NSInteger projectId;
@property NSInteger projectId;
// An array of paths we add to the NSTask environment
@property NSArray *environmentPaths;
@@ -69,6 +69,9 @@ extern NSString * const XCCProjectDidFinishLoadingNotification;
// Full path to the Cappuccino project root directory
@property NSString *projectPath;
// Full path to the <project>.xcodeproj
@property NSString *xcodeProjectPath;
// Full path to parser.j
@property NSString *parserPath;
+20 -35
View File
@@ -26,6 +26,7 @@
#import "Notifications.h"
#import "ProcessSourceOperation.h"
#import "UserDefaults.h"
#import "XcodeProjectCloser.h"
#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_6
@@ -50,23 +51,6 @@ enum XCCLineSpecifier {
};
typedef enum XCCLineSpecifier XCCLineSpecifier;
// Used to close the Xcode project if it is open.
static const char *XCCCloseProjectScript =
"tell application \"Xcode\"\n"
"set docs to (document of every window)\n"
"repeat with doc in docs\n"
"if class of doc is workspace document then\n"
"set docURL to file of doc\n"
"set docPath to docURL as text\n"
"set docPath to POSIX path of docPath\n"
"if docPath begins with \"%@\" then\n"
"close doc\n"
"return\n"
"end if\n"
"end if\n"
"end repeat\n"
"end tell";
// Where we put the generated Cocoa class files
static NSString * const XCCSupportFolderName = @".XcodeSupport";
@@ -109,10 +93,7 @@ static NSArray *XCCDefaultIgnoredPathPredicates = nil;
@property NSFileManager *fm;
// Full path to the <project>.xcodeproj
@property NSString *xcodeProjectPath;
// An NSString version of XCCCloseProjectScript
// An NSString version of XCCCloseXcodeProjectScript
@property NSString *closeXcodeProjectScriptSource;
// Full path to .xcodecapp-ignore
@@ -199,7 +180,6 @@ void fsevents_callback(ConstFSEventStreamRef streamRef,
self.fm = [NSFileManager defaultManager];
self.ignoredPathPredicates = [NSMutableArray new];
self.parserPath = [[NSBundle mainBundle].sharedSupportPath stringByAppendingPathComponent:@"parser.j"];
self.closeXcodeProjectScriptSource = [NSString stringWithUTF8String:XCCCloseProjectScript];
self.appStartedTimestamp = [NSDate date];
self.projectPathsForSourcePaths = [NSMutableDictionary new];
self.xcodecappIgnorePath = @"";
@@ -287,6 +267,13 @@ void fsevents_callback(ConstFSEventStreamRef streamRef,
return _pathModificationDates;
}
- (BOOL)xcodeProjectCanBeOpened
{
return (self.xcodeProjectPath &&
!self.isProcessing &&
[self.fm fileExistsAtPath:self.xcodeProjectPath]);
}
#pragma mark - Project Management
- (void)loadProjectAtPath:(NSString *)path
@@ -445,14 +432,21 @@ void fsevents_callback(ConstFSEventStreamRef streamRef,
}
}
- (IBAction)synchronizeProject:(id)aSender
- (void)resetProject
{
NSString *projectPath = self.projectPath;
[self stop];
[self removeSupportFilesAtPath:projectPath];
[self removeAllCibsAtPath:[projectPath stringByAppendingPathComponent:@"Resources"]];
[self loadProjectAtPath:projectPath];
self.projectPath = projectPath;
}
- (IBAction)synchronizeProject:(id)aSender
{
[self resetProject];
[self loadProjectAtPath:self.projectPath];
}
- (void)removeAllCibsAtPath:(NSString *)path
@@ -468,21 +462,12 @@ void fsevents_callback(ConstFSEventStreamRef streamRef,
- (void)removeSupportFilesAtPath:(NSString *)projectPath
{
[self closeXcodeProjectForProject:projectPath];
[XcodeProjectCloser closeXcodeProjectForProject:projectPath];
[self.fm removeItemAtPath:self.xcodeProjectPath error:nil];
[self.fm removeItemAtPath:self.supportPath error:nil];
}
- (void)closeXcodeProjectForProject:(NSString *)projectPath
{
NSString *source = [NSString stringWithFormat:self.closeXcodeProjectScriptSource, projectPath];
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
NSAppleEventDescriptor *descriptor;
descriptor = [script executeAndReturnError:nil];
}
- (void)stop
{
// Increment the projectId to ensure remaining notifications in the queue for the current project are ignored
@@ -0,0 +1,15 @@
//
// XcodeProjectCloser.h
// XcodeCapp
//
// Created by Aparajita on 5/12/13.
// Copyright (c) 2013 Cappuccino Project. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface XcodeProjectCloser : NSObject
+ (void)closeXcodeProjectForProject:(NSString *)projectPath;
@end
@@ -0,0 +1,40 @@
//
// XcodeProjectCloser.m
// XcodeCapp
//
// Created by Aparajita on 5/12/13.
// Copyright (c) 2013 Cappuccino Project. All rights reserved.
//
#import "XcodeProjectCloser.h"
// Used to close the Xcode project if it is open.
static const char *kCloseXcodeProjectScript =
"tell application \"Xcode\"\n"
"set docs to (document of every window)\n"
"repeat with doc in docs\n"
"if class of doc is workspace document then\n"
"set docPath to path of doc\n"
"if docPath begins with \"%@\" then\n"
"close doc\n"
"return\n"
"end if\n"
"end if\n"
"end repeat\n"
"end tell";
@implementation XcodeProjectCloser
+ (void)closeXcodeProjectForProject:(NSString *)projectPath
{
NSString *format = [NSString stringWithUTF8String:kCloseXcodeProjectScript];
NSString *source = [NSString stringWithFormat:format, projectPath];
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
NSAppleEventDescriptor *descriptor;
descriptor = [script executeAndReturnError:nil];
}
@end
+29 -186
View File
@@ -186,7 +186,6 @@
<reference key="NSMixedImage" ref="103460472"/>
</object>
</array>
<bool key="NSNoAutoenable">YES</bool>
</object>
<object class="NSCustomObject" id="993249905">
<string key="NSClassName">AppController</string>
@@ -551,7 +550,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA</string>
<nil key="NSViewClass"/>
<nil key="NSUserInterfaceItemIdentifier"/>
<object class="NSView" key="NSWindowView" id="145921208">
<nil key="NSNextResponder"/>
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSBox" id="98274870">
@@ -799,6 +798,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA</string>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{137, 17}, {60, 18}}</string>
<reference key="NSSuperview" ref="732728607"/>
<reference key="NSNextKeyView"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="368407823">
<int key="NSCellFlags">-2080374784</int>
@@ -868,6 +868,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA</string>
</object>
</array>
<string key="NSFrameSize">{431, 292}</string>
<reference key="NSSuperview"/>
<reference key="NSNextKeyView" ref="98274870"/>
</object>
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
@@ -947,6 +948,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA</string>
</object>
<int key="connectionID">695</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="280310327"/>
<reference key="destination" ref="993249905"/>
</object>
<int key="connectionID">874</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">statusMenu</string>
@@ -1067,6 +1076,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA</string>
</object>
<int key="connectionID">872</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">menuItemOpenXcodeProject</string>
<reference key="source" ref="993249905"/>
<reference key="destination" ref="798304033"/>
</object>
<int key="connectionID">873</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performClose:</string>
@@ -1308,62 +1325,38 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA</string>
</object>
<int key="connectionID">800</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">enabled: isLoadingProject</string>
<reference key="source" ref="798304033"/>
<reference key="destination" ref="1027936551"/>
<object class="NSNibBindingConnector" key="connector" id="53593599">
<reference key="NSSource" ref="798304033"/>
<reference key="NSDestination" ref="1027936551"/>
<string key="NSLabel">enabled: isLoadingProject</string>
<string key="NSBinding">enabled</string>
<string key="NSKeyPath">isLoadingProject</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">835</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">enabled: projectPath.length</string>
<reference key="source" ref="798304033"/>
<reference key="destination" ref="1027936551"/>
<object class="NSNibBindingConnector" key="connector" id="64254864">
<object class="NSNibBindingConnector" key="connector" id="451145892">
<reference key="NSSource" ref="798304033"/>
<reference key="NSDestination" ref="1027936551"/>
<string key="NSLabel">enabled: projectPath.length</string>
<string key="NSBinding">enabled</string>
<string key="NSKeyPath">projectPath.length</string>
<reference key="NSPreviousConnector" ref="53593599"/>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">836</int>
<int key="connectionID">875</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">enabled2: isProcessing</string>
<string key="label">enabled: xcodeProjectCanBeOpened</string>
<reference key="source" ref="798304033"/>
<reference key="destination" ref="1027936551"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="798304033"/>
<reference key="NSDestination" ref="1027936551"/>
<string key="NSLabel">enabled2: isProcessing</string>
<string key="NSBinding">enabled2</string>
<string key="NSKeyPath">isProcessing</string>
<dictionary key="NSOptions">
<integer value="-1" key="NSMultipleValuesPlaceholder"/>
<integer value="-1" key="NSNoSelectionPlaceholder"/>
<integer value="-1" key="NSNotApplicablePlaceholder"/>
<integer value="-1" key="NSNullPlaceholder"/>
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
<reference key="NSPreviousConnector" ref="64254864"/>
<string key="NSLabel">enabled: xcodeProjectCanBeOpened</string>
<string key="NSBinding">enabled</string>
<string key="NSKeyPath">xcodeProjectCanBeOpened</string>
<reference key="NSPreviousConnector" ref="451145892"/>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">837</int>
<int key="connectionID">876</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
@@ -2143,159 +2136,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA</string>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">872</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">AppController</string>
<string key="superclassName">NSObject</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="loadProject:">id</string>
<string key="openAbout:">id</string>
<string key="openHelp:">id</string>
<string key="openPreferences:">id</string>
<string key="showInFinder:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="loadProject:">
<string key="name">loadProject:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="openAbout:">
<string key="name">openAbout:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="openHelp:">
<string key="name">openHelp:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="openPreferences:">
<string key="name">openPreferences:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="showInFinder:">
<string key="name">showInFinder:</string>
<string key="candidateClassName">id</string>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="aboutWindow">NSPanel</string>
<string key="helpView">PDFView</string>
<string key="helpWindow">NSWindow</string>
<string key="menuItemHistory">NSMenuItem</string>
<string key="menuItemOpenProject">NSMenuItem</string>
<string key="menuItemShowInFinder">NSMenuItem</string>
<string key="preferencesController">NSUserDefaultsController</string>
<string key="preferencesWindow">NSWindow</string>
<string key="statusMenu">NSMenu</string>
<string key="xcc">XcodeCapp</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="aboutWindow">
<string key="name">aboutWindow</string>
<string key="candidateClassName">NSPanel</string>
</object>
<object class="IBToOneOutletInfo" key="helpView">
<string key="name">helpView</string>
<string key="candidateClassName">PDFView</string>
</object>
<object class="IBToOneOutletInfo" key="helpWindow">
<string key="name">helpWindow</string>
<string key="candidateClassName">NSWindow</string>
</object>
<object class="IBToOneOutletInfo" key="menuItemHistory">
<string key="name">menuItemHistory</string>
<string key="candidateClassName">NSMenuItem</string>
</object>
<object class="IBToOneOutletInfo" key="menuItemOpenProject">
<string key="name">menuItemOpenProject</string>
<string key="candidateClassName">NSMenuItem</string>
</object>
<object class="IBToOneOutletInfo" key="menuItemShowInFinder">
<string key="name">menuItemShowInFinder</string>
<string key="candidateClassName">NSMenuItem</string>
</object>
<object class="IBToOneOutletInfo" key="preferencesController">
<string key="name">preferencesController</string>
<string key="candidateClassName">NSUserDefaultsController</string>
</object>
<object class="IBToOneOutletInfo" key="preferencesWindow">
<string key="name">preferencesWindow</string>
<string key="candidateClassName">NSWindow</string>
</object>
<object class="IBToOneOutletInfo" key="statusMenu">
<string key="name">statusMenu</string>
<string key="candidateClassName">NSMenu</string>
</object>
<object class="IBToOneOutletInfo" key="xcc">
<string key="name">xcc</string>
<string key="candidateClassName">XcodeCapp</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/AppController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">XcodeCapp</string>
<string key="superclassName">NSObject</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="clearErrors:">id</string>
<string key="openErrorInEditor:">id</string>
<string key="openErrorsPanel:">id</string>
<string key="openXcodeProject:">id</string>
<string key="synchronizeProject:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="clearErrors:">
<string key="name">clearErrors:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="openErrorInEditor:">
<string key="name">openErrorInEditor:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="openErrorsPanel:">
<string key="name">openErrorsPanel:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="openXcodeProject:">
<string key="name">openXcodeProject:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="synchronizeProject:">
<string key="name">synchronizeProject:</string>
<string key="candidateClassName">id</string>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="errorListController">NSArrayController</string>
<string key="errorTable">NSTableView</string>
<string key="errorsPanel">NSPanel</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="errorListController">
<string key="name">errorListController</string>
<string key="candidateClassName">NSArrayController</string>
</object>
<object class="IBToOneOutletInfo" key="errorTable">
<string key="name">errorTable</string>
<string key="candidateClassName">NSTableView</string>
</object>
<object class="IBToOneOutletInfo" key="errorsPanel">
<string key="name">errorsPanel</string>
<string key="candidateClassName">NSPanel</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/XcodeCapp.h</string>
</object>
</object>
</array>
<int key="maxID">876</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">