From c77b35c07bf32eaebb668cfae541a628c4f447a6 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 3 Nov 2011 17:47:33 +0100 Subject: [PATCH] Major XCC improvments This patch contains the following: - FSEvent is now at files level instead of folders level. This allows to drop the registry in plist and improve the performances - When you remove a J file, the mirrored H file is removed too - .xcodecapp-ignore has been added to the FSEvent stream. ignored token are updated in live - By default XCC ignores all .git, .svn, .hg .xCodeSupport, Frameworks and Build folders - When you quit XCC without stop listening of the project, at next launch it will resume on the same project - Help has been added - Help is displayed at first user launch - The Error & Warning table doesn't pop ups automatically, instead it displays Growl (you can then open the panel for more informations) - The code has been refactored into several classes, one for UI thing, another one for XCC worker - Several bugs has been fixed - The about window now displays the version number - The main window has been removed - Several other small enhancements. This is XCC 2.0. --- .../scrollview.xcodeproj/project.pbxproj | 7 +- .../NibAppRemixed.xcodeproj/project.pbxproj | 7 +- Tools/xcodecapp-cocoa/AppController.h | 45 +- Tools/xcodecapp-cocoa/AppController.m | 559 ++----- .../English.lproj/MainMenu.nib/designable.nib | 1353 ++++++----------- .../MainMenu.nib/keyedobjects.nib | Bin 27102 -> 27671 bytes Tools/xcodecapp-cocoa/FSEventCallback.h | 26 + Tools/xcodecapp-cocoa/FSEventCallback.m | 57 + Tools/xcodecapp-cocoa/Info.plist | 2 +- Tools/xcodecapp-cocoa/TNXCodeCapp.h | 73 + Tools/xcodecapp-cocoa/TNXCodeCapp.m | 515 +++++++ Tools/xcodecapp-cocoa/help.rtfd/1.PNG | Bin 0 -> 35727 bytes Tools/xcodecapp-cocoa/help.rtfd/2.PNG | Bin 0 -> 81193 bytes Tools/xcodecapp-cocoa/help.rtfd/3.PNG | Bin 0 -> 34310 bytes Tools/xcodecapp-cocoa/help.rtfd/TXT.rtf | 137 ++ .../xcodecapp-cocoa-icon-active.psd | Bin 110773 -> 245562 bytes .../xcodecapp-cocoa-icon-working.png | Bin 0 -> 36293 bytes .../xcodecapp-cocoa.xcodeproj/project.pbxproj | 20 + 18 files changed, 1482 insertions(+), 1319 deletions(-) create mode 100644 Tools/xcodecapp-cocoa/FSEventCallback.h create mode 100644 Tools/xcodecapp-cocoa/FSEventCallback.m create mode 100644 Tools/xcodecapp-cocoa/TNXCodeCapp.h create mode 100644 Tools/xcodecapp-cocoa/TNXCodeCapp.m create mode 100644 Tools/xcodecapp-cocoa/help.rtfd/1.PNG create mode 100644 Tools/xcodecapp-cocoa/help.rtfd/2.PNG create mode 100644 Tools/xcodecapp-cocoa/help.rtfd/3.PNG create mode 100644 Tools/xcodecapp-cocoa/help.rtfd/TXT.rtf create mode 100644 Tools/xcodecapp-cocoa/xcodecapp-cocoa-icon-working.png diff --git a/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj b/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj index 2760e2941..83d2420fc 100644 --- a/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj +++ b/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj @@ -134,9 +134,10 @@ 9EEC448A135749D200615446 /* Project object */ = { isa = PBXProject; attributes = { + LastUpgradeCheck = 0420; ORGANIZATIONNAME = "280 North, Inc."; }; - buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */; + buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "scrollview" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -323,7 +324,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */ = { + 9EEC448D135749D200615446 /* Build configuration list for PBXProject "scrollview" */ = { isa = XCConfigurationList; buildConfigurations = ( 9EEC44C3135749D300615446 /* Debug */, @@ -339,6 +340,7 @@ 9EEC44C7135749D300615446 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */ = { isa = XCConfigurationList; @@ -347,6 +349,7 @@ 9EEC44CA135749D300615446 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/Tests/Manual/NibAppRemixed/.xCodeSupport/NibAppRemixed.xcodeproj/project.pbxproj b/Tests/Manual/NibAppRemixed/.xCodeSupport/NibAppRemixed.xcodeproj/project.pbxproj index 508461eac..0c00d2009 100644 --- a/Tests/Manual/NibAppRemixed/.xCodeSupport/NibAppRemixed.xcodeproj/project.pbxproj +++ b/Tests/Manual/NibAppRemixed/.xCodeSupport/NibAppRemixed.xcodeproj/project.pbxproj @@ -134,9 +134,10 @@ 9EEC448A135749D200615446 /* Project object */ = { isa = PBXProject; attributes = { + LastUpgradeCheck = 0420; ORGANIZATIONNAME = "280 North, Inc."; }; - buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */; + buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "NibAppRemixed" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -323,7 +324,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */ = { + 9EEC448D135749D200615446 /* Build configuration list for PBXProject "NibAppRemixed" */ = { isa = XCConfigurationList; buildConfigurations = ( 9EEC44C3135749D300615446 /* Debug */, @@ -339,6 +340,7 @@ 9EEC44C7135749D300615446 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */ = { isa = XCConfigurationList; @@ -347,6 +349,7 @@ 9EEC44CA135749D300615446 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/Tools/xcodecapp-cocoa/AppController.h b/Tools/xcodecapp-cocoa/AppController.h index 9a8fb6d55..0257b9af5 100644 --- a/Tools/xcodecapp-cocoa/AppController.h +++ b/Tools/xcodecapp-cocoa/AppController.h @@ -17,67 +17,42 @@ */ #import +#import #import "PRHEmptyGrowlDelegate.h" +#import "TNXCodeCapp.h" @interface AppController : NSObject { - IBOutlet NSButton *buttonOpenXCode; - IBOutlet NSButton *buttonStart; - IBOutlet NSButton *buttonStop; IBOutlet NSMenu *statusMenu; IBOutlet NSMenuItem *menuItemOpenXCode; IBOutlet NSMenuItem *menuItemStart; IBOutlet NSMenuItem *menuItemStop; + IBOutlet NSMenuItem *menuItemProjectName; IBOutlet NSPanel *errorsPanel; - IBOutlet NSProgressIndicator *spinner; IBOutlet NSTableView *errorsTable; - IBOutlet NSTextField *labelCurrentPath; - IBOutlet NSTextField *labelPath; - IBOutlet NSTextField *labelStatus; - IBOutlet NSWindow *mainWindow; + IBOutlet NSWindow *helpWindow; + IBOutlet NSTextView *helpTextView; + IBOutlet NSTextField *labelVersion; - FSEventStreamRef stream; - NSDate *appStartedTimestamp; - NSFileManager *fm; + TNXCodeCapp *_xcc; NSImage *_iconActive; NSImage *_iconInactive; - NSMutableArray *errorList; - NSMutableArray *ignoredFilePaths; - NSMutableArray *modifiedXIBs; - NSMutableDictionary *pathModificationDates; - NSNumber *lastEventId; + NSImage *_iconWorking; NSStatusItem *_statusItem; - NSString *currentProjectName; - NSString *parserPath; - NSString *XCodeSupportPBXPath; - NSString *XCodeSupportProjectName; - NSString *XCodeTemplatePBXPath; - NSString *_profilePath; - NSURL *currentProjectURL; - NSURL *XCodeSupportFolder; - NSURL *XCodeSupportProject; - NSURL *XCodeSupportProjectSources; PRHEmptyGrowlDelegate *growlDelegateRef; } -- (BOOL)isObjJFile:(NSString*)path; -- (BOOL)isPathMatchingIgnoredPaths:(NSString*)aPath; -- (BOOL)isXIBFile:(NSString *)path; -- (BOOL)prepareXCodeSupportProject; - (BOOL)validateMenuItem:(NSMenuItem*)menuItem; -- (NSURL*)shadowURLForSourceURL:(NSURL*)aSourceURL; -- (void)handleFileModification:(NSString*)path ignoreDate:(BOOL)shouldIgnoreDate; -- (void)initializeEventStreamWithPath:(NSString*)aPath; - (void)registerDefaults; - (void)updateErrorTable; -- (void)updateLastEventId:(uint64_t)eventId; +- (void)growlWithTitle:(NSString *)aTitle message:(NSString *)aMessage; - (IBAction)chooseFolder:(id)aSender; - (IBAction)clearErrors:(id)sender; - (IBAction)openXCode:(id)aSender; - (IBAction)stopListener:(id)aSender; +- (IBAction)openHelp:(id)aSender; -- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag; - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(int)aRow; - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView; diff --git a/Tools/xcodecapp-cocoa/AppController.m b/Tools/xcodecapp-cocoa/AppController.m index 2eed110d1..5fef5c165 100644 --- a/Tools/xcodecapp-cocoa/AppController.m +++ b/Tools/xcodecapp-cocoa/AppController.m @@ -19,122 +19,71 @@ #import "AppController.h" -void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t numEvents, - void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) -{ - AppController *ac = (AppController *)userData; - size_t i; - for(i = 0; i < numEvents; i++) - { - [ac handleFileModification:[(NSArray *)eventPaths objectAtIndex:i] ignoreDate:NO]; - [ac updateLastEventId:eventIds[i]]; - } -} - - @implementation AppController #pragma mark - #pragma mark Initialization -- (id)init -{ - self = [super init]; - - if (self) - { - errorList = [NSMutableArray arrayWithCapacity:10]; - - if (!growlDelegateRef) - growlDelegateRef = [[[PRHEmptyGrowlDelegate alloc] init] autorelease]; - - [GrowlApplicationBridge setGrowlDelegate:growlDelegateRef]; - - fm = [NSFileManager defaultManager]; - modifiedXIBs = [NSMutableArray new]; - ignoredFilePaths = [NSMutableArray new]; - parserPath = [[NSBundle mainBundle] pathForResource:@"parser" ofType:@"j"]; - - if([fm fileExistsAtPath:[@"~/.bash_profile" stringByExpandingTildeInPath]]) - _profilePath = [@"source ~/.bash_profile" stringByExpandingTildeInPath]; - else if([fm fileExistsAtPath:[@"~/.profile" stringByExpandingTildeInPath]]) - _profilePath = [@"source ~/.profile" stringByExpandingTildeInPath]; - else if([fm fileExistsAtPath:[@"~/.bashrc" stringByExpandingTildeInPath]]) - _profilePath = [@"source ~/.bashrc" stringByExpandingTildeInPath]; - else if([fm fileExistsAtPath:[@"~/.zshrc" stringByExpandingTildeInPath]]) - _profilePath = [@"source ~/.zshrc" stringByExpandingTildeInPath]; - else - { - NSAlert *alert = [NSAlert alertWithMessageText:@"Cannot find any valid profile file" - defaultButton:@"Ok" - alternateButton:nil - otherButton:nil - informativeTextWithFormat:@"We have checked for ~/.bash_profile, ~/.profile, ~/.bashrc and ~/.zshrc without luck.\n\nYou need to have on of this file to tell XCodeCapp-cocoa where is located nib2cib. Now we gonna try to without sourcing one this file and it may fail.\n\nIf you notice any error or weird behaviour, please look at Mac OS' Console.app for log message and open a ticket."]; - [alert runModal]; - _profilePath = @""; - } - } - - return self; -} - +/*! + Called when NIB is ready + */ - (void)awakeFromNib { - [self registerDefaults]; - [labelCurrentPath setHidden:YES]; - [buttonOpenXCode setEnabled:NO]; - [buttonStop setEnabled:NO]; - [buttonStart setEnabled:YES]; - [spinner setHidden:YES]; - appStartedTimestamp = [NSDate date]; - pathModificationDates = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"pathModificationDates"] mutableCopy]; - lastEventId = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastEventId"]; + if (!growlDelegateRef) + growlDelegateRef = [[[PRHEmptyGrowlDelegate alloc] init] autorelease]; + + [GrowlApplicationBridge setGrowlDelegate:growlDelegateRef]; NSBundle *bundle = [NSBundle mainBundle]; - _iconInactive = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"xcodecapp-cocoa-icon-inactive" ofType:@"png"]]; - _iconActive = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"xcodecapp-cocoa-icon-active" ofType:@"png"]]; + [labelVersion setStringValue:[NSString stringWithFormat:@"Version %@", [bundle objectForInfoDictionaryKey:@"CFBundleVersion"]]]; + + [self registerDefaults]; + + _iconInactive = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"xcodecapp-cocoa-icon-inactive" ofType:@"png"]]; + _iconActive = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"xcodecapp-cocoa-icon-active" ofType:@"png"]]; + _iconWorking = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"xcodecapp-cocoa-icon-working" ofType:@"png"]]; [_iconActive setSize:NSMakeSize(14.0, 16.0)]; [_iconInactive setSize:NSMakeSize(14.0, 16.0)]; + [_iconWorking setSize:NSMakeSize(14.0, 16.0)]; _statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; [_statusItem setMenu:statusMenu]; [_statusItem setImage:_iconInactive]; [_statusItem setHighlightMode:YES]; [statusMenu setDelegate:self]; -} - -- (void)initializeEventStreamWithPath:(NSString*)aPath -{ - NSArray *pathsToWatch = [NSArray arrayWithObject:aPath]; - void *appPointer = (void *)self; - FSEventStreamContext context = {0, appPointer, NULL, NULL, NULL}; - NSTimeInterval latency = 5.0; - stream = FSEventStreamCreate(NULL, &fsevents_callback, &context, (CFArrayRef) pathsToWatch, - [lastEventId unsignedLongLongValue], (CFAbsoluteTime) latency,kFSEventStreamCreateFlagUseCFTypes); - - FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - FSEventStreamStart(stream); -} - -- (void)stopEventStream -{ - if (stream) + if ([[NSUserDefaults standardUserDefaults] integerForKey:@"FirstLaunch"]) { - FSEventStreamStop(stream); - FSEventStreamInvalidate(stream); - stream = nil; + [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithInt:0] forKey:@"FirstLaunch"]; + [self openHelp:self]; } + + _xcc = [[TNXCodeCapp alloc] init]; + [_xcc setDelegate:self]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappConversionDidStart:) name:XCCConversionStartNotification object:_xcc]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappConversionDidStop:) name:XCCConversionStopNotification object:_xcc]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappPopulateProject:) name:XCCDidPopulateProjectNotification object:_xcc]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(XCodeCappListeningDidStart:) name:XCCListeningStartNotification object:_xcc]; + + [_xcc start]; } + +/*! + Register the application defaults + */ - (void)registerDefaults { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSDictionary *appDefaults = [NSDictionary - dictionaryWithObjects:[NSArray arrayWithObjects:[NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], [NSMutableDictionary new], nil] - forKeys:[NSArray arrayWithObjects:@"lastEventId", @"pathModificationDates", nil]]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSNumber *streamEventIdSinceNow = [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow]; + NSMutableDictionary *appDefaults = [NSMutableDictionary new]; + + [appDefaults setObject:streamEventIdSinceNow forKey:@"lastEventId"]; + [appDefaults setObject:[NSNumber numberWithInt:1] forKey:@"FirstLaunch"]; + [defaults registerDefaults:appDefaults]; } @@ -142,289 +91,85 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n #pragma mark - #pragma mark Notification handlers -- (NSApplicationTerminateReply)applicationShouldTerminate: (NSApplication *)app +/*! + Handle cleaning operation when application will stop. + It will stop the FSEvent listener, and store the last event id + */ +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - [defaults setObject:lastEventId forKey:@"lastEventId"]; - [defaults setObject:pathModificationDates forKey:@"pathModificationDates"]; - [defaults synchronize]; - - [self stopEventStream]; + [_xcc clear]; return NSTerminateNow; } +/*! + Called when XCC start a conversion + @param aNotification the notification + */ +- (void)XCodeCappConversionDidStart:(NSNotification *)aNotification +{ + [_statusItem setImage:_iconWorking]; +} + +/*! + Called when XCC finish a conversion + @param aNotification the notification + */ +- (void)XCodeCappConversionDidStop:(NSNotification *)aNotification +{ + [_statusItem setImage:_iconActive]; +} + +/*! + Called when XCC has populated a project + @param aNotification the notification + */ +- (void)XCodeCappPopulateProject:(NSNotification *)aNotification +{ + [self growlWithTitle:[[[[aNotification userInfo] objectForKey:@"URL"] path] lastPathComponent] + message:@"Your project has been loaded successfully!"]; + +} + +/*! + Called when XCC start a to listen to a project + @param aNotification the notification + */ +- (void)XCodeCappListeningDidStart:(NSNotification *)aNotification +{ + [_statusItem setImage:_iconActive]; + [menuItemProjectName setTitle:[NSString stringWithFormat:@"Current project: %@", [_xcc currentProjectName]]]; +} + #pragma mark - #pragma mark Utilities -- (void)updateLastModificationDateForPath: (NSString *)path +/*! + Simple growl wrapper + @param aTitle the growl title + @param aMessage the growl message + */ +- (void)growlWithTitle:(NSString *)aTitle message:(NSString *)aMessage { - [pathModificationDates setObject:[NSDate date] forKey:path]; -} - -- (NSDate*)lastModificationDateForPath: (NSString *)path -{ - if(nil != [pathModificationDates valueForKey:path]) - return [pathModificationDates valueForKey:path]; - else - return appStartedTimestamp; -} - -- (void)updateLastEventId:(uint64_t)eventId -{ - lastEventId = [NSNumber numberWithUnsignedLongLong:eventId]; -} - -- (void)handleFileModification:(NSString*)path ignoreDate:(BOOL)shouldIgnoreDate -{ - if ([self isPathMatchingIgnoredPaths:path]) - return; - - NSArray *contents = [fm contentsOfDirectoryAtPath:path error:NULL]; - NSDate *lastModifiedDate = [self lastModificationDateForPath:path]; - - [self updateLastModificationDateForPath:path]; - for(NSString *node in contents) - { - NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, node]; - NSString *splitedPath = [NSString stringWithFormat:@"%@/%@", [[fullPath pathComponents] objectAtIndex:[[fullPath pathComponents] count] - 2], [fullPath lastPathComponent]]; - NSDictionary *fileAttributes = [fm attributesOfItemAtPath:fullPath error:NULL]; - NSDate *fileModDate = [fileAttributes objectForKey:NSFileModificationDate]; - - if(shouldIgnoreDate || [fileModDate compare:lastModifiedDate] == NSOrderedDescending) - { - //Prepare the shell - NSTask *task; - task = [[NSTask alloc] init]; - [task setLaunchPath: @"/bin/bash"]; - NSArray *arguments; - NSString *successMsg; - - if ([self isXIBFile:fullPath] || [self isObjJFile:fullPath]) - { - if ([self isXIBFile:fullPath]) - { - - NSLog(@"running command nib2cib %@", fullPath); - - //Create the nib2cib task - arguments = [NSArray arrayWithObjects: @"-c", - [NSString stringWithFormat:@"(%@; nib2cib '%@';) 2>&1", _profilePath, fullPath],@"",nil]; - successMsg = @"The XIB file has been converted"; - } - else if ([self isObjJFile:fullPath]) - { - NSLog(@"Full path string is: %@", [fullPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]); - NSString *shadowPath = [[self shadowURLForSourceURL:[NSURL URLWithString:[fullPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]] path]; - NSLog(@"running command objj %@", shadowPath); - //Create the objj task - arguments = [NSArray arrayWithObjects: @"-c", - [NSString stringWithFormat:@"(%@; objj '%@' '%@' '%@';) 2>&1", _profilePath, parserPath, fullPath, shadowPath],@"",nil]; - successMsg = @"The Objective-J file has been converted"; - } - - //Run the task and get the response - [task setArguments: arguments]; - [task setStandardOutput:[NSPipe pipe]]; - - [_statusItem setTitle:@"..."]; - [task launch]; - [task waitUntilExit]; - - NSData *stdOut; - stdOut = [[[task standardOutput] fileHandleForReading] availableData]; - NSString *response; - response = [[NSString alloc] initWithData:stdOut - encoding:NSUTF8StringEncoding]; - - NSLog(@"response was\n%@", response); - - [_statusItem setTitle:@""]; - if ([task terminationStatus] == 0) - { - if (!shouldIgnoreDate) - { - [GrowlApplicationBridge notifyWithTitle:splitedPath - description:successMsg - notificationName:@"DefaultNotifications" - iconData:nil - priority:0 - isSticky:NO - clickContext:nil]; - } - - } - else - { - NSLog(@"Error in conversion: return message is %@", response); - - //if (![GrowlApplicationBridge isGrowlRunning]) - { - [errorList addObject:response]; - [self updateErrorTable]; - } - } - } - } - } -} - -- (BOOL)isObjJFile:(NSString *)path -{ - return [[[path pathExtension] uppercaseString] isEqual:@"J"]; -} - -- (BOOL)isXIBFile:(NSString *)path -{ - path = [[path pathExtension] uppercaseString]; - return [path isEqual:@"XIB"] || [path isEqual:@"NIB"]; -} - -- (BOOL)prepareXCodeSupportProject -{ - XCodeSupportProjectName = [NSString stringWithFormat:@"%@.xcodeproj/", currentProjectName]; - XCodeTemplatePBXPath = [[NSBundle mainBundle] pathForResource:@"project" ofType:@"pbxproj"]; - XCodeSupportFolder = [NSURL URLWithString:@".xCodeSupport/" relativeToURL:currentProjectURL]; - XCodeSupportProject = [NSURL URLWithString:XCodeSupportProjectName relativeToURL:XCodeSupportFolder]; - XCodeSupportProjectSources = [NSURL URLWithString:@"Sources/" relativeToURL:XCodeSupportFolder]; - XCodeSupportPBXPath = [NSString stringWithFormat:@"%@/project.pbxproj", [XCodeSupportProject path]]; - - //[fm removeItemAtURL:XCodeSupportFolder error:nil]; - - // create the template project if it doesn't exist - if (![fm fileExistsAtPath:[XCodeSupportFolder path]]) - { - NSLog(@"Xcode support folder created at: %@", [XCodeSupportProject path]); - [fm createDirectoryAtPath:[XCodeSupportProject path] withIntermediateDirectories:YES attributes:nil error:nil]; - - NSLog(@"Copying project.pbxproj from %@ to %@", XCodeTemplatePBXPath, [XCodeSupportProject path]); - [fm copyItemAtPath:XCodeTemplatePBXPath toPath:XCodeSupportPBXPath error:nil]; - - NSLog(@"Reading the content of the project.pbxproj"); - NSMutableString *PBXContent = [NSMutableString stringWithContentsOfFile:XCodeSupportPBXPath encoding:NSUTF8StringEncoding error:nil]; - [PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectName}" - withString:currentProjectName - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [PBXContent length])]; - [PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectRelativePath}" - withString:@".." - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [PBXContent length])]; - - [PBXContent writeToFile:XCodeSupportPBXPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; - NSLog(@"PBX file adapted to the project"); - - NSLog(@"Creating source folder"); - [fm createDirectoryAtPath:[XCodeSupportProjectSources path] withIntermediateDirectories:YES attributes:nil error:nil]; - - - [NSThread detachNewThreadSelector:@selector(populateXCodeProject:)toTarget:self withObject:nil]; - return NO; - } - return YES; -} - -- (void)populateXCodeProject:(id)argement -{ - [GrowlApplicationBridge notifyWithTitle:[[currentProjectURL path] lastPathComponent] - description:@"Loading of project..." + [GrowlApplicationBridge notifyWithTitle:aTitle + description:aMessage notificationName:@"DefaultNotifications" iconData:nil priority:0 isSticky:NO clickContext:nil]; - - [self handleFileModification:[NSString stringWithFormat:@"%@", [currentProjectURL path]] ignoreDate:YES]; - NSArray *subdirs = [fm subpathsAtPath:[currentProjectURL path]]; - for (NSString *p in subdirs) - [self handleFileModification:[NSString stringWithFormat:@"%@/%@", [currentProjectURL path], p] ignoreDate:YES]; - - [labelStatus setStringValue:@"XCodeCapp is running"]; - [buttonOpenXCode setEnabled:YES]; - [buttonStop setEnabled:YES]; - [buttonStart setEnabled:NO]; - [spinner setHidden:YES]; - - [GrowlApplicationBridge notifyWithTitle:[[currentProjectURL path] lastPathComponent] - description:@"Your project has been loaded successfully!" - notificationName:@"DefaultNotifications" - iconData:nil - priority:0 - isSticky:NO - clickContext:nil]; - } -- (NSURL*)shadowURLForSourceURL:(NSURL*)aSourceURL -{ - NSMutableString *flattenedPath = [NSMutableString stringWithString:[aSourceURL path]]; - NSLog(@"Flattened path is : %@", flattenedPath); - [flattenedPath replaceOccurrencesOfString:@"/" - withString:@"_" - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [[aSourceURL path] length])]; - - NSString *basename = [NSString stringWithFormat:@"%@.h", [[flattenedPath stringByDeletingPathExtension] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; - - return [NSURL URLWithString:basename relativeToURL:XCodeSupportProjectSources]; -} - -- (void)computeIgnoredPaths -{ - NSString *ignorePath = [NSString stringWithFormat:@"%@/.xcodecapp-ignore", [currentProjectURL path]]; - - if (![fm fileExistsAtPath:ignorePath]) - return; - - NSString *ignoreFileContent = [NSString stringWithContentsOfFile:ignorePath encoding:NSUTF8StringEncoding error:nil]; - ignoredFilePaths = [NSMutableArray arrayWithArray:[ignoreFileContent componentsSeparatedByString:@"\n"]]; - - NSLog(@"ignored file paths are: %@", ignoredFilePaths); -} - -- (BOOL)isPathMatchingIgnoredPaths:(NSString*)aPath -{ - BOOL isMatching = NO; - - for (NSString *ignoredPath in ignoredFilePaths) - { - if ([ignoredPath isEqual:@""]) - continue; - - NSMutableString *regexp = [NSMutableString stringWithFormat:@"%@/%@", [currentProjectURL path], ignoredPath]; - [regexp replaceOccurrencesOfString:@"/" - withString:@"\\/" - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [regexp length])]; - - [regexp replaceOccurrencesOfString:@"." - withString:@"\\." - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [regexp length])]; - - [regexp replaceOccurrencesOfString:@"*" - withString:@".*" - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [regexp length])]; - - NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexp]; - if ([regextest evaluateWithObject:aPath]) - { - isMatching = YES; - - break; - } - } - - return isMatching; -} #pragma mark - #pragma mark Actions +/*! + Open the folder chooser and eventually start to listen + @param aSender the sender of the action + */ - (IBAction)chooseFolder:(id)aSender { NSOpenPanel *openPanel = [NSOpenPanel openPanel]; @@ -437,112 +182,96 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n if ([openPanel runModal] != NSFileHandlingPanelOKButton) return; - [spinner setHidden:NO]; - [spinner startAnimation:nil]; - - currentProjectURL = [[openPanel URLs] objectAtIndex:0]; - NSMutableString *tempName = [NSMutableString stringWithString:[[[openPanel URLs] objectAtIndex:0] lastPathComponent]]; - - [tempName replaceOccurrencesOfString:@" " - withString:@"_" - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [tempName length])]; - currentProjectName = [NSString stringWithString:tempName]; - - [self computeIgnoredPaths]; - [self initializeEventStreamWithPath:[currentProjectURL path]]; - - BOOL isProjectReady = [self prepareXCodeSupportProject]; - - [labelPath setStringValue:[currentProjectURL path]]; - [labelCurrentPath setHidden:NO]; - [buttonStart setEnabled:NO]; - - if (isProjectReady) - { - [spinner setHidden:YES]; - [buttonStop setEnabled:YES]; - [buttonOpenXCode setEnabled:YES]; - [labelStatus setStringValue:@"XCodeCapp is running"]; - } - - else - [labelStatus setStringValue:@"XCodeCapp is loading project..."]; - - [_statusItem setImage:_iconActive]; + [_xcc listenProjectAtPath:[NSString stringWithFormat:@"%@/", [[[openPanel URLs] objectAtIndex:0] path]]]; } +/*! + Stop listening to a project + @param aSender the sender of the action + */ - (IBAction)stopListener:(id)aSender { - currentProjectURL = nil; - currentProjectName = nil; - [ignoredFilePaths removeAllObjects]; - [labelPath setStringValue:@""]; - [labelCurrentPath setHidden:YES]; - [buttonOpenXCode setEnabled:NO]; - [buttonStop setEnabled:NO]; - [buttonStart setEnabled:YES]; - [labelStatus setStringValue:@"XCodeCapp is not running"]; - [self stopEventStream]; + [_xcc clear]; + [_statusItem setImage:_iconInactive]; + [menuItemProjectName setTitle:@"No project selected"]; + + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"LastOpenedPath"]; } +/*! + Open the xCode support project in xCode + @param aSender the sender of the action + */ - (IBAction)openXCode:(id)aSender { - if (!currentProjectURL) + if (![_xcc currentProjectURL]) return; - NSLog(@"Open Xcode project at URL : '%@'", [XCodeSupportProject path]); - system([[NSString stringWithFormat:@"open \"%@\"", [XCodeSupportProject path]] UTF8String]); + NSLog(@"Open Xcode project at URL : '%@'", [[_xcc XCodeSupportProject] path]); + system([[NSString stringWithFormat:@"open \"%@\"", [[_xcc XCodeSupportProject] path]] UTF8String]); } - +/*! + reload error table data and show it + @param aSender the sender of the action + */ - (void)updateErrorTable { [errorsTable reloadData]; [errorsPanel orderFront:self]; - NSLog(@"update?"); } +/*! + Clear all errors in errors table + @param aSender the sender of the action + */ - (IBAction)clearErrors:(id)sender { - [errorList removeAllObjects]; + [[_xcc errorList] removeAllObjects]; [errorsTable reloadData]; } + +/*! + Open the help file + @param aSender the sender of the action + */ +- (IBAction)openHelp:(id)aSender +{ + [helpTextView readRTFDFromFile:[[NSBundle mainBundle] pathForResource:@"help" ofType:@"rtfd"]]; + + [helpWindow center]; + [helpWindow makeKeyAndOrderFront:aSender]; +} + + #pragma mark - #pragma mark Delegates -- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag -{ - [mainWindow makeKeyAndOrderFront:nil]; - - return YES; -} - - (BOOL)validateMenuItem:(NSMenuItem *)aMenuItem { if (aMenuItem == menuItemStart) - return !currentProjectURL; + return ![_xcc currentProjectURL]; if ((aMenuItem == menuItemStop) || (aMenuItem == menuItemOpenXCode)) - return !!currentProjectURL; + return !![_xcc currentProjectURL]; return YES; } - - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { - return [errorList count]; + return [[_xcc errorList] count]; } + - (id)tableView:(NSTableView*)aTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - return [errorList objectAtIndex:row]; + return [[_xcc errorList] objectAtIndex:row]; } - (void)tableViewColumnDidResize:(NSNotification *)tableView { [errorsTable noteHeightOfRowsWithIndexesChanged: - [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [errorList count])]]; + [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[_xcc errorList] count])]]; } - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(int)aRow @@ -552,7 +281,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n float width = [tabCol width]; NSRect r = NSMakeRect(0,0,width,1000.0); NSCell *cell = [tabCol dataCellForRow:aRow]; - NSString *content = [errorList objectAtIndex:aRow]; + NSString *content = [[_xcc errorList] objectAtIndex:aRow]; [cell setObjectValue:content]; float height = [cell cellSizeForBounds:r].height; @@ -560,6 +289,6 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n height = 16.0; // Ensure miniumum height is 16.0 return height; - } + @end diff --git a/Tools/xcodecapp-cocoa/English.lproj/MainMenu.nib/designable.nib b/Tools/xcodecapp-cocoa/English.lproj/MainMenu.nib/designable.nib index 9181fede0..e9d1120b1 100644 --- a/Tools/xcodecapp-cocoa/English.lproj/MainMenu.nib/designable.nib +++ b/Tools/xcodecapp-cocoa/English.lproj/MainMenu.nib/designable.nib @@ -2,13 +2,13 @@ 0 - 11A511 - 1617 - 1138 - 566.00 + 11C74 + 1938 + 1138.23 + 567.00 com.apple.InterfaceBuilder.CocoaPlugin - 1617 + 1938 YES @@ -17,11 +17,11 @@ NSMenu NSTextFieldCell NSScrollView - NSButtonCell NSButton - NSProgressIndicator + NSButtonCell NSTableView NSCustomObject + NSTextView NSView NSWindowTemplate NSTextField @@ -32,11 +32,8 @@ com.apple.InterfaceBuilder.CocoaPlugin - YES - - YES - - + PluginDependencyRecalculationVersion + YES @@ -775,241 +772,13 @@ _NSMainMenu - - 3 - 2 - {{335, 180}, {331, 298}} - 1954021376 - xcodecapp-cocoa - NSWindow - - - {402, 378} - {402, 378} - - - 256 - - YES - - - 266 - {{7, 45}, {316, 12}} - - - - YES - - 68288064 - 138413056 - - - LucidaGrande - 9 - 16 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - - 266 - {{7, 65}, {316, 17}} - - - - YES - - 68288064 - 138413056 - Currently listening path: - - LucidaGrande-Bold - 13 - 16 - - - - - - - - - 266 - {{7, 108}, {316, 22}} - - - - YES - - 68288064 - 138413056 - XCodeCapp is not running - - LucidaGrande-Bold - 18 - 16 - - - - - 6 - System - alternateSelectedControlColor - - 1 - MCAwIDEAA - - - - - - - 293 - {{123, 17}, {86, 19}} - - - - YES - - -2080244224 - 134217728 - Stop - - LucidaGrande - 12 - 16 - - - -2038152961 - 164 - - - 400 - 75 - - - - - 293 - {{29, 17}, {86, 19}} - - - - YES - - -2080244224 - 134217728 - Start - - - -2038152961 - 164 - - - 400 - 75 - - - - - 293 - {{217, 17}, {85, 19}} - - - - YES - - -2080244224 - 134217728 - Xcode - - - -2038152961 - 164 - - - 400 - 75 - - - - - 269 - {{94, 147}, {142, 132}} - - - - YES - - -2080244224 - 134217728 - - - LucidaGrande - 13 - 1044 - - - -2041822977 - 98 - - NSImage - xcodecapp-cocoa - - - - 400 - 75 - - - - - 1293 - - {{126, 88}, {78, 12}} - - - - 16650 - 100 - - - {331, 298} - - - - - {{0, 0}, {1920, 1178}} - {402, 400} - {402, 400} - YES - AppController 8215 2 - {{196, 240}, {348, 62}} + {{196, 240}, {348, 140}} 611844096 About NSPanel @@ -1024,36 +793,62 @@ YES - 274 - {{17, -86}, {314, 128}} + 269 + {{17, 52}, {314, 36}} - YES 67239424 138674176 - XCodeCapp-cocoa is developed by Antoine Mercadal <primalmotion@archipelproject.org> + xCodeCapp-cocoa is developed by Antoine Mercadal <primalmotion@archipelproject.org> LucidaGrande 10 16 - + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + 3 MQA + + + 269 + {{95, 27}, {158, 11}} + + YES + + 68288064 + 138675200 + LABEL VERSION + + LucidaGrande-Bold + 11 + 3357 + + + + + + - {348, 62} + {348, 140} - - {{0, 0}, {1920, 1178}} + {{0, 0}, {1680, 1028}} {348, 81} {348, 81} YES @@ -1062,20 +857,37 @@ YES + + + YES + No project selected + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + - Start listenning - r - 1048576 + Start Listenning + 2147483647 - Stop listening - R - 1048576 + Stop Listening + 2147483647 @@ -1090,20 +902,10 @@ - - - Open Main window - o - 1048576 - 2147483647 - - - - Open Xcode - O - 1048576 + Open xCode + 2147483647 @@ -1144,11 +946,28 @@ + + + Help + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + Quit - q - 1048576 + 2147483647 @@ -1165,7 +984,7 @@ - + 256 YES @@ -1184,7 +1003,6 @@ 256 {512, 249} - YES @@ -1217,14 +1035,21 @@ 6 System headerTextColor - + + 3 + MAA + 337772032 0 Text Cell - + + LucidaGrande + 13 + 1044 + 6 @@ -1232,7 +1057,12 @@ controlBackgroundColor - + + 6 + System + controlTextColor + + 3 YES @@ -1260,7 +1090,6 @@ {{1, 1}, {512, 249}} - @@ -1271,7 +1100,6 @@ -2147483392 {{413, 17}, {15, 166}} - _doScroller: @@ -1282,7 +1110,6 @@ -2147483392 {{1, 183}, {427, 15}} - 1 @@ -1292,7 +1119,6 @@ {{-1, 35}, {514, 251}} - 133682 @@ -1305,13 +1131,16 @@ 289 {{407, 8}, {85, 19}} - YES -2080244224 134217728 Clear - + + LucidaGrande + 12 + 16 + -2038152961 164 @@ -1326,7 +1155,6 @@ 289 {{314, 8}, {85, 19}} - YES -2080244224 @@ -1344,11 +1172,192 @@ {512, 285} - - - {{0, 0}, {1920, 1178}} + {{0, 0}, {1680, 1028}} + {10000000000000, 10000000000000} + YES + + + 15 + 2 + {{163, 199}, {716, 571}} + 1685586944 + Help + NSWindow + + + + + 256 + + YES + + + 274 + + YES + + + 2304 + + YES + + + 2322 + {716, 14} + + + + + + + + + + + + YES + + + 134 + + + + 716 + 1 + + + 67121125 + 0 + + + + YES + + YES + NSBackgroundColor + NSColor + + + YES + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + YES + + YES + NSColor + NSCursor + NSUnderline + + + YES + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + + 1 + + 6 + {716, 10000000} + {238, 0} + + + + {{1, 1}, {716, 571}} + + + _NS:1478 + + + + {4, 5} + + 12582912 + + YES + + YES + + + + TU0AKgAAAHCAFUqgBVKsAAAAwdVQUqwaEQeIRGJRGFlYqwWLQ+JxuOQpVRmEx2RROKwOQyOUQSPyaUym +SxqWyKXyeYxyZzWbSuJTScRCbz2Nz+gRKhUOfTqeUai0OSxiWTiBQSHSGFquGwekxyAgAAAOAQAAAwAA +AAEAEAAAAQEAAwAAAAEAEAAAAQIAAwAAAAIACAAIAQMAAwAAAAEABQAAAQYAAwAAAAEAAQAAAREABAAA +AAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEAAgAAARYAAwAAAAEAEAAAARcABAAAAAEAAABnARwAAwAA +AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{702, 1}, {15, 571}} + + + _doScroller: + 1 + 0.85256409645080566 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{-1, -1}, {718, 573}} + + + 133138 + + + + + + {716, 571} + + + + {{0, 0}, {1680, 1028}} {10000000000000, 10000000000000} YES @@ -1356,6 +1365,30 @@ YES + + + terminate: + + + + 458 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 401 + performMiniaturize: @@ -1396,14 +1429,6 @@ 127 - - - orderFrontStandardAboutPanel: - - - - 142 - performClose: @@ -1668,110 +1693,6 @@ 374 - - - delegate - - - - 401 - - - - labelPath - - - - 407 - - - - chooseFolder: - - - - 418 - - - - stopListener: - - - - 420 - - - - labelStatus - - - - 422 - - - - labelCurrentPath - - - - 423 - - - - makeKeyAndOrderFront: - - - - 433 - - - - openXCode: - - - - 437 - - - - buttonOpenXCode - - - - 438 - - - - buttonStart - - - - 439 - - - - buttonStop - - - - 440 - - - - spinner - - - - 444 - - - - mainWindow - - - - 445 - statusMenu @@ -1804,22 +1725,6 @@ 457 - - - terminate: - - - - 458 - - - - makeKeyAndOrderFront: - - - - 460 - menuItemStart @@ -1860,22 +1765,6 @@ 476 - - - dataSource - - - - 477 - - - - delegate - - - - 478 - clearErrors: @@ -1884,6 +1773,46 @@ 482 + + + helpWindow + + + + 507 + + + + helpTextView + + + + 515 + + + + openHelp: + + + + 517 + + + + menuItemProjectName + + + + 521 + + + + labelVersion + + + + 524 + orderFront: @@ -1908,13 +1837,31 @@ 498 + + + dataSource + + + + 477 + + + + delegate + + + + 478 + YES 0 - + + YES + @@ -2507,106 +2454,11 @@ - - 371 - - - YES - - - - - - 372 - - - YES - - - - - - - - - - - 376 - - 405 - - - YES - - - - - - 406 - - - - - 410 - - - YES - - - - - - 411 - - - - - 412 - - - YES - - - - - - 413 - - - - - 414 - - - YES - - - - - - 415 - - - - - 416 - - - YES - - - - - - 417 - - - 427 @@ -2622,6 +2474,7 @@ YES + @@ -2639,54 +2492,24 @@ - - 431 - - - YES - - - - - - 432 - - - - - 434 - - - YES - - - - - - 435 - - - - - 443 - - - 446 YES - - + + + + + @@ -2725,11 +2548,6 @@ - - 459 - - - 464 @@ -2832,6 +2650,84 @@ + + 505 + + + YES + + + + + + 506 + + + YES + + + + + + 511 + + + YES + + + + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 516 + + + + + 518 + + + + + 519 + + + + + 520 + + + + + 522 + + + YES + + + + + + 523 + + + @@ -2905,24 +2801,7 @@ 350.IBPluginDependency 351.IBPluginDependency 354.IBPluginDependency - 371.IBNSWindowAutoPositionCentersHorizontal - 371.IBNSWindowAutoPositionCentersVertical - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 371.lastResizeAction - 372.IBPluginDependency 376.IBPluginDependency - 405.IBPluginDependency - 406.IBPluginDependency - 410.IBPluginDependency - 411.IBPluginDependency - 412.IBPluginDependency - 413.IBPluginDependency - 414.IBPluginDependency - 415.IBPluginDependency - 416.IBPluginDependency - 417.IBPluginDependency 427.IBNSWindowAutoPositionCentersHorizontal 427.IBNSWindowAutoPositionCentersVertical 427.IBPluginDependency @@ -2930,11 +2809,6 @@ 428.IBPluginDependency 429.IBPluginDependency 430.IBPluginDependency - 431.IBPluginDependency - 432.IBPluginDependency - 434.IBPluginDependency - 435.IBPluginDependency - 443.IBPluginDependency 446.IBPluginDependency 447.IBPluginDependency 448.IBPluginDependency @@ -2943,7 +2817,6 @@ 451.IBPluginDependency 452.IBPluginDependency 456.IBPluginDependency - 459.IBPluginDependency 464.IBPluginDependency 464.NSWindowTemplate.visibleAtLaunch 465.IBPluginDependency @@ -2960,6 +2833,19 @@ 494.IBPluginDependency 495.IBPluginDependency 5.IBPluginDependency + 505.IBPluginDependency + 505.NSWindowTemplate.visibleAtLaunch + 506.IBPluginDependency + 511.IBPluginDependency + 512.IBPluginDependency + 513.IBPluginDependency + 514.IBPluginDependency + 516.IBPluginDependency + 518.IBPluginDependency + 519.IBPluginDependency + 520.IBPluginDependency + 522.IBPluginDependency + 523.IBPluginDependency 56.IBPluginDependency 57.IBPluginDependency 58.IBPluginDependency @@ -3045,35 +2931,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - {{266, -670}, {351, 570}} - - - YES - - YES - IBResizeActionFinalFrame - IBResizeActionInitialFrame - - - YES - {{158, 405}, {351, 570}} - {{158, 515}, {531, 460}} - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3091,6 +2948,16 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3124,9 +2991,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -3141,256 +3005,19 @@ - 498 - - - - YES - - AppController - NSObject - - YES - - YES - chooseFolder: - clearErrors: - openXCode: - stopListener: - - - YES - id - id - id - id - - - - YES - - YES - chooseFolder: - clearErrors: - openXCode: - stopListener: - - - YES - - chooseFolder: - id - - - clearErrors: - id - - - openXCode: - id - - - stopListener: - id - - - - - YES - - YES - buttonOpenXCode - buttonStart - buttonStop - errorsPanel - errorsTable - labelCurrentPath - labelPath - labelStatus - mainWindow - menuItemOpenXCode - menuItemStart - menuItemStop - spinner - statusMenu - - - YES - NSButton - NSButton - NSButton - NSPanel - NSTableView - NSTextField - NSTextField - NSTextField - NSWindow - NSMenuItem - NSMenuItem - NSMenuItem - NSProgressIndicator - NSMenu - - - - YES - - YES - buttonOpenXCode - buttonStart - buttonStop - errorsPanel - errorsTable - labelCurrentPath - labelPath - labelStatus - mainWindow - menuItemOpenXCode - menuItemStart - menuItemStop - spinner - statusMenu - - - YES - - buttonOpenXCode - NSButton - - - buttonStart - NSButton - - - buttonStop - NSButton - - - errorsPanel - NSPanel - - - errorsTable - NSTableView - - - labelCurrentPath - NSTextField - - - labelPath - NSTextField - - - labelStatus - NSTextField - - - mainWindow - NSWindow - - - menuItemOpenXCode - NSMenuItem - - - menuItemStart - NSMenuItem - - - menuItemStop - NSMenuItem - - - spinner - NSProgressIndicator - - - statusMenu - NSMenu - - - - - IBProjectSource - ./Classes/AppController.h - - - - NSDocument - - YES - - YES - printDocument: - revertDocumentToSaved: - runPageLayout: - saveDocument: - saveDocumentAs: - saveDocumentTo: - - - YES - id - id - id - id - id - id - - - - YES - - YES - printDocument: - revertDocumentToSaved: - runPageLayout: - saveDocument: - saveDocumentAs: - saveDocumentTo: - - - YES - - printDocument: - id - - - revertDocumentToSaved: - id - - - runPageLayout: - id - - - saveDocument: - id - - - saveDocumentAs: - id - - - saveDocumentTo: - id - - - - - IBProjectSource - ./Classes/NSDocument.h - - - + 524 + 0 IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 @@ -3403,13 +3030,11 @@ YES NSMenuCheckmark NSMenuMixedState - xcodecapp-cocoa YES {9, 8} {7, 2} - {512, 512} diff --git a/Tools/xcodecapp-cocoa/English.lproj/MainMenu.nib/keyedobjects.nib b/Tools/xcodecapp-cocoa/English.lproj/MainMenu.nib/keyedobjects.nib index ea95968f51dd972447f698c73052075e5e29bd5d..d121ed2cf7e57cbbbe3471741066f790d36f95c5 100644 GIT binary patch literal 27671 zcmeIb2Y3`^7braMJ3F(R8Ax{0JDc9irZ+adZL-TY0)!GmvOpwcLkd-3Mv5R!kq%1l z%>oFBT@Y+2(!q|1SP&Hz5xHk(H(^2e?!Di=&-4G!^Z!|5W@p|x=e(z%^S(0}c%FEPc#rs)_?-9} zF^EOJC`H>d;8kgdRboQ3slWrlRR+HhKchLkrQ8koQxr3$v85eRFm0c0a-|D$tu!78p#^6A6ZKdB!`kMWINeG zc9IjxN#vvCRB{?QoqU{}Mb0CakW0yB|#^WjAEM%l?qv zqA*2LGK!*HC?&;F?vw}RL-nFmR0tJ8#Zw7XB9%gAQ@tq-l}{B@TB?ewrVLa+Y9KX; z8cYqLhEYw_Bh)CWnQEoRQRArz)I@3uHG`T>JweT(=2A~mOQ~hla_Sjs1GSObL~W+F zQ!h|2QhTVq)B);s>J92m>MiOW>NxcYb&@(oou2h*W+3>{0y(Mfa$okQo+d30~OkglLBX)Ud%`_cpG zT6!Q|M-Qh*&?D(4dNkcZchY0&arC3~Wco3B8a<1iP0y#Fq8HLj>236OdI!Cekkh;9 z7wMPb?;-jyeT06Oevf{i{(%0FK2D#cPtoV;3-lNCH}qwBy?nTQgnW#AlKfHmWceKV zBKb=BD)}?=P4eCH=j6}J_sI{)56a(?zc2qlep-G;epY^2eog+f{JQ*x{CD{sg+jq8 z+!Y>*Fh#r~U7=CrD+&}9iarX1qMxF_VyL2CF-$Q^(X1G)=uk{nOi@f#%uvi%EKoeD zSgd$fv0AZ4u~D%@u~V^6@seV{;uXaa#XE|lisOp2igSvu6kjX8Ra|jtU;>#_%xUHf zbCx;BoM$dD7nx6)&zR4dFPJZxub8iyOUyUSW#(Jv3iBOvmHD3ef%%d7iMhu7%v@)F zVSZ(PV{S0NGk-9DGB=sOm|M)>%x&f$<_=4+h{Y_)%2&1GrKCCb6$NIAYY#qFHjnMiYS?_XfGuQ;*kZPXEoIBta<+o4WVLJ+ zTg~cNJ==#hutwIznpq3mm#ty@vHjTrY%M#G9mEc1hp=_*P_~{O#x}5xtd$+kj$lW! zP3$A=D7Kj$&9<;Mwv`>jwz2JO2iwVxWyi7O*$M1Kb`tw2JDHurPGxykU>{?rvD4WZ z>`eA?b{0FEeS)3C&S#(M8{X2{+AsB)sdJsJcSHg`@5**=9co3e17vW9#5Wa*T z;ZFn*fkY4yRHszx%{5K!O~ab4{hC@DZR6Sp>&<=ap1;aEp}j_LHrZ?)gWzOSV|z_~ zbEmbvCcL4!zP-KHeoh<(_Y~V&S|D6NgHBtrf7U3Y2VDFMCAV*$Gf_^5zgdAWdl3iybC-+_N8VD2g+ga{o7go(83 z>qlF88BYSCg{=_#8tO$#PY@AABoReK*V<>)0;Brd53TJ(;MUIe4%=uuH`c+pnEqY! z5)s4^@k9bJA<+>id3uc+ zi3}o>$Re_d93q#VYKVSBe_{YpOAI6i5rc^#L>)1ds3(RI4MZbhC596th>=7S@dz=BXeLGzErg9| zCC2ayz9-+0AHYxMSM%HX{rn;Rb^dMsB!8Me!+*+u#ed8H$Y1Aw=Whv!5D>7N5s*?q zo&xd{P_Tf)1QaEpH~}RKC`~{)0?HRqiGZ{M(hJBep#B0HET9GfjTF#m0gVw*r+_92 zXsUo_2xzu|<_qX)0WA~I3IVMW(6a(sE1*3B+9#m>0y=OKc-&5O5S_$WVjMA^@b0HK zSJw}-HiHmLtnD35Es_vHCT3e_TZ5JF!Lz&z4>8#;{6|6H%wP~V=vqgct-0CS*1yr( zY#mYGVYLg2Cxkksr{1h@8rG+?quJWgt(EHuo_LIi0UdyA-DjOCnnBDY#skV4-j#Rx zl$cFCLChiM67z`p!~!7TN#ZGDA@MY^h*(T4A(j%$h~>lzVkNPPc!qeESPf^^f{xft z&IEP?bFzQ2Gyx%X${@YDZ@aavvZce?HoU&UTG?S8UD;@D>1Z0>WNjM&>Qz79+%(bJ z4Wy>YI!>C59ZY4r30P!n6IBq#m>b%x))od4jj_?k>EU@2kY_jpGS|=XgR{SEuxyG$}hP zGhUURmN_|IH7Q-460b_hN}oKrPU+FFzO4lix2x(~8darjZQun!wubr^Yx8Mh6L4=c zv4z-5Y$LW4JBXdYtKGzNK%3q=z61P%NE8TttVFUj9q|H8x7F6tXl(S6Gz~`M~P#^yFf>~LVFfZpbpt_(WCAVb&Q@!iNP);s5QC(L zc8S1Y;pmQbxKPn`f%kSNFq6WU@ZNkW@6I82-k*2xqf{2E2txW@27lp~_u})rX7PbI zi`Rgtci}F7KL0#%0_O1vaS~=?pT`!M!zto4e9jW*i1RSzi}3pyNWQ4N*w$9b0L67K3zD!SGjL|h|&CawcFe<6Mas(vGGfJA=>a{nZ5!tYyDkU{`Z*g3kTuoKkT+TJt~G)L0GI%O}Qx~+c12=R>M0z|bev$g4M zE!DP$`esRMMJ*rEX6tNelxA9|4AYw}qFIQu?YiB`pGdGlaY`Jn0#sRVmh7;>+T3hz zt#1Hy71pK^BRfEHCfhjsG4RdOrILXUp-UnPWM6D+Yq7S8_~A=QeMh~WdH`46)?_CW zz?HU$R5nWS@qYaMni@Msf_IW8V&@NpOCYp+X5}#DR-n$oDt8Ec&CL+rEfZQHCN+a6 z;Qc_h-b#Yc;&b_&umZyV6IP(MA9&n>pA)YWgwl-<;B)wFm#_kb{SxR|uoCh9F0~HB zPRpKr4)p-}9zZ>jt7JPpi7m*Dco%WRcH{xSUdWr+4)#(gB?)j~sc#!$?SP3Itl+&{ zI`{%UpV#o7VfoiiuQ9z=EAXBY2|U!Od?D|7N(Aq44zD496o9;lr9ep_AH);j`X)_E zQ>VtOl0|o;&WKm3Gbc}${5#N2xtk{wYfqFB4Ui9_E}BxXHp)S{ARNgDgBKFTC@K^Px)@Xl zz;{atT}2d^bwfHC0JCDDq9O)Xtg25Ka=7u6f?xElw+>qui<_yn-k3_c{RU_pT- zqOgJzyQq{TuL>)e`jPaluT^xmXOITvqXL*iAu1v+qheHoN>LdqM-`|Ns1s?CoSLYr zUB@XvlEbr!9?JqQx65;Yi)*#Db-2rfe+oDS!H4qkd^8`%NA{I`J48)XjdVzl`XB=` zA``G#%*Wu5=%YashD+G^2tGWlAkt1Y*CTLHb!S6UV|{rWL&T#*A$0u<}v5!$0!CySrz|KLmJzM9`pgK9x`6lLv@6 zR3fZH=U(?YVQ03?m1LCB^^-~55AsP- z8WPAfJ`M^N2gq(7+hsZiE!qIQTa1NOxtHN;p^0oQ@b$k7JK?@i@Jd{l*6C4Ra@y$Nl0w)l-` z3)*UTKF+7X4T{zUGLbx)8r;|2v zE;ZR2n;N9xJGNe|JBm6xI&3YD%+o`RsgR#T9b)ZrjgpB%l3F^Zvk7j2uqK`90tHD$ z{RGf5Cpam}Dk;oONBkP1iWal68it~>h7M5X3YJ)iHFYD;mW)SE)EF)qDO7XH?s!W`UKkNdTv{?N0 z2cPNU7$i9r=Rs~*DGhp*ujO4X5_7Q!_9Ql8FGo&(MXYhKH}=84*bn>T033*ea4@kH z{u_cryM4W=S@lhjFNzvJvcApQC?*nOx>+OXAxI2T1qh`41bzrVf*%Y4X%at>b8&}S zXCOa_pLp^9dH{zLTW|!_1UIn~h&+p9i1Rp(xQOF%98SbZ0J6BVt=-lp6_h4xXS?-o z&H>5|8DlMcW9k>&ZC6=NQu*fn2PlS3ODnmS(SSp!i zbyLfzZp!W5!V>H7`p)JKLp=zpt-f`nqs9R-RklFWL~QLz$y%M#AG~;*bvT%@wNa#_ z40@c_HfcOWbxFKnR(G#JbHX9(kyfcWB9=>l6q-c#qRHCmObY}FU47dq=aYOZs6`w< z-d#o{eFKMC{77ER6EIK2LA&xXJOdCXj)L|kZ(E0_;pu!6|HwK#6F<(6;vs{CKFfW{ z(tY_5p4**bHH#@$K)Y1U+2{8^xpiT8D%B#UQk?Ux636TUU4oYaS4x_sO0B+a!a58| z)!jL)z|Zow^>{j7g`eRc;m7c8>+x#52CwDY`3_#}&DgyM|tOCO)bx zS(U7U{0VQtTY)#*@OHcdP}=Vkc@8F1Ve2rr+B%dy`A&Xpze!o~s)Q_u%ifKj>&CJU zKQEb#{a*V7Uc`GOnTdiG&Ht|7T!;6HY6-Y^RDm=?i`Hy`={5C!eUg;ftlvsh^75j$x zef$B~#vOht&x2w;!$0Q2uj2bc*G)$7f>;7W&rO{HC9pa>Tg-kWhn$`XS(Bv#r~!`I zL);lCq`Ue;&}GA)5IgWGVkbU@&)~ECO5VgzgU|uNfAH|okKR*y!SqgW4Ie7I_{xN))8^;!bNR6~lOP32pA1~b zxA5O+7`~1F!FNakL}RkHwu7EYgC*SB!L1_#?P0&lQb#kpI%2Q zNEdzq|0J9vS+WP&)2>35Wn}=d&Dsump45!y7xGW_;ZU$n2aDna(aL*i*HES%aQMb4 zgK399C!bX^%;-Cy|8{Cl@mFK^UyAALH~pPPW7ZDW;;==9VZSt0Z>sWNa&+S_6Xv#! zNMEV_%3S$&k*)W<<5##?FW1RA&lN1yVH3u$1#R6-i~7tzEAh~5h&1U zd~c`mCa3de=@b3N%!dWa?p-u&JxU}Rl`Br8YH zkY4M=`poWIq&5KQ%SV-fZ*idTCj+`vV;$*F#E3nrdrBcOEg^$(9I1l*XQ!Bwkl~Pr zEEUs^?<>-HAojj2M5=KzlcAd}6=-6mC7GCHeF>0Yf}4W>O4Wy0{z#c9q^M#slOWxa zsRoylo|!s%a_wCcl?tB!GL5YjeU06;ojeVhNG3_1W*fhTcllQiPo|P-WICBaW|HYH z{5pO;zm`Ki`K|og``iPWL+l{)h@E5}sUcyBXDe?K&}Ql1ZUJqP_>m1;xv9p!A;y`tgUKNhYhU7b0Bgy5av1o92C|W~lEcXnowt=1OR_+ne5)c|HejwMv& zIC4BG)|}8ql$zvX3yXh|e}R9#%QmF!O@ve|W<8@Jqmc}ZoJ>xU?9jdr+I9araO=X z`2)PmSzv1yi{}HAhXZ3BOeR(Un-_~7y}hKVUFw$ummExU;SY-WoK4l*W)rtEsk+h~ zINOEYV80~t#2Nnza;1d-HU5?VEa3HB$N=rDzyX+cTZgI|Hdk3JzLU5KO$&M3B! zTO|~4@o)TR6wf=McykDpC#??n0DjP2@U~WG==;bK67)~tW|ywW_A;Njlbl1oLarpY zlCP6P$T!Ki$hXPE=cJ^p?EL;g7b(K#mpyi49A0(1tJ zH9-jI3}|y@yV=?bNjX$d-BQrHxbWKlB>?}&w>;1g(HY4QzjrWE3s~L-XDiu>)Shlv zMXI_MB>xLK{}a-`osfRezi=27sfme+54^+fFYsX}S@Zw5sIkMAc{;)V*kbH#g1rdP z4VU@Id>vkDoy>=bsci?#?QGY9c{(YSED%=UPeaS&6z{_O);2;5!oFzbG)7vb7srUp z@V?-FVEMjN7AcF8Me`T=3;fx$ve<4zmVBiwP8KhEOS_O{YN`C`a*sM&qqyMVE@m|R zImr)-(mQ`rbb+Xv94<>G$H>xU83LyH69QHUSO#@&kywDMV6jWpVN;d0LH7jQTRpUM zTSizbTci{AKBg>3mJ87f79*r3ezEroy%up3i>+-vT+I8|`v2W2<;x0SN?-DyJ#?@CR!Ij{dh0l+T`;iOz}5z3n#3A# zQ!S14ZH>}Esqd9@ch*B?^+3=M{FMjIxVRoeB(uY=%xeTHNa;ujvMS? zt<*bof;Uyh1H2pjFAs+|L!$q22fW_^-meyO{aCB9eQ-Pcc>s~~Wb*;&U;H2EWKZ6& z-{_2Nq0G*hB@*CekO)|8wq{FHE3b7Y+(EPLoVp2^{v2$88b$@1ggRTnPZ$kD+B#dr zQ}&*V(?p(?tp=QT_`e@Mkqr{QO%Cw?0QlR(Vc$?2>;!5dI)Lk~HLYMN&g|YH+sR)P zkW4`6-*CI;@qz?*j~%XnNFFxq;E}KwsUEiJSP2#ETmp}3G=tGOGpw-PiTs1ImqkP_ z0;2zoD9*vK*Cj-6b|F%Th~%&bWSp^OPz$Ww|65&-%8rR(-2}uw2<&^3f_^B01#{>j zYN&u*MYuh?bo2x{1|JqM3%L|8<_`B5ib|}ajrjxGM~aL7&8uN>k4KPDhp?}6vyc4ExWmiN@z5?=k&?K)q zIfiQj^6v5s0`j@*8m@yS{wn)TKxai;JSU*jwbIIhN_6_*5*x&22G}eF*4Raev-obx z{t`(D5|ICcNRWJ!?2gE13fX;=fC9xC2LMYeni{S5IUwW6z9Zr6-APh%N+Dth6;Q8- zVxW3T7~HxrgoqeafI*CG_hT4S3+pta#T{eLXuK$I5ly6k!vBSa^0hlz$3%kNVdEsx zg-e=E#6W2-eL6-$fdG;d=OBG?@~uv6qr#|g5nHT)qW^^r0-=*jr{eCqbOFWmH-o~7 z5e<-Zwuorp_#sG=DYb|sNkH)rKtiS7RSzmlKnZu%Bhg_3R1P_Y$`jC^qH6p;SV}j| zt=4*Rr`TZFQP$e^#YtR+RFQ}@RY2VJ31!}dJ00J zfU*UY{vZqz?`?FL>X z0xyKdXoqpUrJ>WwT~m)zlSO#I(b5OOn<|Q$dQ5^hT|i}ao>YkN%DZ?n6L>O9KtGE- z`Dut${fV+@hK}tBWA2a!u^jCB?lhD6)B+K+PC!);!tAWcOB^$SH9bIFT_f(Q>ag|` z_hH^+iYuvAB1n^f`aBdQwN{$U`flbJMVN-ZhI**BjALtB#lKEuZl$(~F#8F}@*tRY z2JMz$KHtrt8WCpS76@n~VWaFg2xw+0QE7(FvtsBR0l_Ut3~peP<**srzBuTF^(AV* zh;@*F20RF>T~%L^u)fwklYt`ES_`zxZN`axVXvCa3F2YuhzN0*fQFo-j{Ymhkjvtz zW0J7nm!N(K8xbt^BLq}u7kRx1duW%)KLU}1w7(HW{gh|1wkB=j75?4v2 z+|RzZ#EF!%)H#t90N(hZ$=S*HOd{ipZUTmj1i+qFPTM)URf=`eiUq9F7-8WkNDMQu zCewAUvc<6iDyOW|3jYSeV1l0Bb5}b=8+U0HyB%pRnt<5%ikV9VLu@g{N+D!yH zQ9xt=1(fooIZ;<=Pmxo!w}8gkwPb?Gsqqdip?%3Qw7-BcXbC0;N%2QaTZh%R8KIo= zuuso%M!eeMgkD95i0G#X=+S?nm&Mu9+u2G-JJ8$NI@zXlhfVLD(ynhCY*lZ9C(6W> z(gK!f1N$2WNoJcW5;lH9V(h?f?@cvLl-lnG*m2R}>;vcoI#DDB93cO1ViwZL5-(CE zUZe|1u=8S?$cx9ic##RbfWY&&Xfb~clz1U^58I8f`s{VLbdpZqS2EH0G!%*g0w+83 z-}vv*F}nO79ecc6$6y28Xz0nQ`ZaZo?Do!(3fP6Ujcs;vsH>?sL~| z&=vvBadH@QyQW_Q)9){!-^A(vB6hfd7T6pHfip>RywLczQzBikFTmQpypv80riX~M zEELd!2hc)119~CRLN`dFuy)h(lqiZP2icJtJ8d1-b|V;Ah#jT4CwMeSzCpSITfO0_ zfR0Xa{nrWiD7sn1y;MMp9)KHV%N9CtkCAYLzq${#c%cM> znY38yT*1>5i1DN}?d8x9*-#j$Ti!qBj!H z(3`}^8|bZ2=|XEm+~Enj+O_oP*e2z8c;NvT>~{zVg8T+}JOjPJ!!sezL#4P;K+o}g z1+>XM-0_qFr}B{&U0~;6yecg%O=?+`a6yNsZo1@1tMpULz6Eb^&b@&<=jBxJn|ed#J?+98x62;J(kwOZi|bok6B=v{ zwt7`lyQ&fD!DdjMM%Azhs=}5I8!Vt+e%Tjmo5RL}kb$j<{>BrC|+$*Zl zUeMCwK~f=U@3P)A>2{gy)2&oQ5H>OSpj`rW|Z}j z{Y8aS3i=QFPx>bP7k!KVo4!qX(|2U=$&Se}Wuz8R_0)d3oU&1?s6KL*`c~ePIwp6c z&dE8sJ9R|vNlm40P?M=`bb;KTN~P3Pkvy30L+j`vbhA86)*$0$J7ue7^|F`cv9hbO zE3)~rc6pNQf?O?6p*h-(4v}Zj$?_~Zkr)pam`>(^#wEeZ+z9B+iyeBgQ-4_M(jS$& z^w7NrPArF~H{fv(;xvkao#%UDGvz*X9lrq!?{Tmx${$|>+ZWIw0h9bW0n7QbkYDhh z3FtMbE5C-a9ZFCrtp)U`jC6OQA678BON(<7fDn3%;i)j`@QC zyBN`}66y!4*@qy&hI`ZuN~llx@9t5q6P7ZlU+!Z<*F?{YD)q9gULFgst6g$w;K0C@ ztpRNr8dFofqlS@tLz=f zhYR|d&-05V8Gy(!4HEs2G5)>IcK}O z244-%8C)^=+Zzv^l)Y}gyNWAXh1A#LrG?x7`o0HpBSY*|bYT>ogV>1xFIU%%Q$+tY z=weIbL%31IXKsYR>n?YbbJRI0+CaY2XVUJ zg95{&zOd{gK9mP(oC;P2RU%xY^?^2|XaJB??_uLC0bP?~u0wPp+@D~%ud8<_J!tEw z6d%G^8=tv>+6KAI4H^{5BE{|&h}{n+p;Ii_oJkN%#9yVr?nJ^bgPlvV`+cm#y(k3O z324uly0d}@Bb^EJPIX2q_No7nG7Bf9zt_O5tqmg|GS7vO^;1QZT1rLYAB<=T%r4p4 zWs3FxEh*`6vf96D;89bkJ|BW;9Uu}DJA0z?fGFu`K1hui#rE#zgVc!mr&j7Sh)=q; zKbXc{KqGe#jnJ<_Qj&C+Mod`5?XM4^@E}kqrl9t;>cMDU1%Dmyj7D5;ry#3z@?Th1 zW8Z!D5IpaKYC+14#pGMeLffR2^r5b$tLx?Do*k?IqI(_!&fbnq+M@7as?P(}?>SSA zVNs8flG<+O@ccu_{YH!|#~}S32&nGK_()oDRVpV4Z^GMNP{`uN4;+gH#eE<8mUsrP zK|w)Zl?nMj)&eW0kgDistBP*g}Csi5fo23N&` z0yIJ_DClH~LaCsDq9Td#hJxZD9~fybD7HgU0R;sV7klA%AK~pNDB^G&Y(c;vajBkw zHY9w+Z&EpN3GykY57ZIjS81?|o#9e}^20ugcXe8}o6_o@S`2V%4^Z&uOnSgq(?$XfzzvBJhsd)e2{~{QN zSuw$qSuwpB6%)dQGGRQA{)w!^ARiOgxjoBr-`%GNWcvm{cZ>NoO*cOeTxT zW^$NZCXeaOXqbGafGK2(m|~`cDP_u-a;Ac*WVB2bQ_biYJ=2FVFh<72m>CPxm#Ja; zG5whVOf55z8N>``hA?%^P^O+4#xyXEjFlPAj9^AGP0S;+pG1HkD%uMESW)?G>d4ie4%w^^=^O*(A zlgv}hLgr~^5wnzNJAMrISUnc2c@WwtTf znH|hdW*4)Yd5(FWd4YM6*~9E*_AxIp`3hu$O?n1?(eWUjh3G z7*dV^0S5{=NWj4Y?j>NAfI|cvD&Q~yLnA3dz>xxu5^%JDV+0&4;5Y%t3phc*i2_a% zaI%2a0!|Tds({l3oGxI;7jPc|8w6|=ut~sX0b2yzSHLv_?kC{>0v;gXS^*Cf z@E`#X7Vr=O*9my2fa?W3Ou!8SZWORpz{3SRLck*h+$7*f1UyQ>%>o`R;1&Vf1l%g% zF#?8+rd_}t0`3&>SOJd{@OS}F5b#6+PZIE>0-h}3DFU7=@T)-;? zyi&lc1pJJEpB3*B;fr5J|N(O0)AP*hXnkJfL|5xYXW{Qn8Q6e?8;#`4l6m#aoC;19vt@Muos8DIqbt>Uk>|m*q_4z91i4g5Ql>~+>661 z4u^0!l*3^h4(D(Lha)*0#o=fU$8b27!*Lvr=Wqgt6FHp3;bac0Ih?}bR1T+cIGw{8 z9M0r$7KgJroWtQ<4(D;WH-|MG&gXCehYLAe#NlENmvFe0!(|*U=WqpwD>2o8_ra1)0g;qWL9H*Iat^QH@JbG^;_x#ZewM?lIlP9$ zYdO4*!|OS`fx{a)yotk`IlP6#TRFUq!`nH$gTp&Hyo z$UZH;DW#~7^vXH$$>w$JLdS!nupj_WR<_w+KKe1cgk3tgvdHnaHE{znkKmyuKO&Tf zgTy0;$cMK%UZ555p2ir+fP2#=kTVaaZS)*^BmD;b7Q9pOD7;hgL;7R-6Z$lLj=o5L zPG6yaqkpIWl+(~p@P|Hbiab+ZAg`2Le6cgc1i@ai*Vy0rYVlKREaUr~GahYNzyl-)> zVuNBYyk+q{#Yx3!c*o*-#YM$8@Q%gr6o0r7E-o%AmnfGEmvWa%mns*XOCOi%E>F3v zc6rU^n9FIGA6@=pdNAG)CzB!8l|h`-LW~n5oDrg1Ux;agAf63{$n+FMm=_=}9D_GC zehcqk{0-i{coW{bcpKihsDSq?a_~k)FL;|`1-#vG0KB!Z9o|GZmtDrLU{|wi+4by3 zb~C$;-NEi+-(cTj53?V#AF*fHbL<87(;jpWWe@)z;XNXIME8j85#J-RM{QU08yhmk^Ej`}uakLjJx}($<|=cg zT@|j3YY$gfSEZ}FYk+IGYl3T%tJ*cyHQhDCHQ%++wb-@PwcNGB)$BUnRd9X6b&=~5 z*JZ9NTvxenblvRwoa+m&dt8sXzUTUZ>v7kQU9Y%acfI4LaPxKxa*J_GaZ7W{bjx-d z<~GLdQMXxci`~|^ZFf89_Kw?ew~yRTxSe!6?RM7fOSh|TKe+wm_J`YTrN1&#nX1$% zwMvU}fO3#>h;pcMn6gnhT-mIgtemc#qgp0S>po&}y&o;98=o^w1GdOq#B*mJ4p za?e$s&w8%$JmC4J=W)-op4YroUg=)NUIV;Fc}@13>ownNsn;5>jb59*wt8*%+Ud31 z>v^v|Ui-Wbd41q@-0Nen^IjLdKJ~in^{dz4-Y(usZ$Ix)?*wnHca^u!yN|cg+w9%f zyV?60@73OGz1Mqh^xo{f)qA)1LGQP`-}V05hxT#v3H6EcN%bl5Df6lD(fU;T^!I7< z8RawD$L2G}XPwU;pErEo^Ev5r+UKm#d7q0upZR>@^OesxKHvI$=kvYKkG{daQN9}A z0^cIv65lf43SX^nwXfdS;A`?794HI)4GalP3``9y2rLS$46F*&1@;N73G5$O8#pM?8aO6! zN+2Kjc;KSIwSn6McLwebd_M3%;G2Q(1%4EGF7T_sn}PoXc?CrUB?n~(l?3$(stu|S zY6+SeBm_+hni2GP(4nALgI*7MGwAK0BSG&39SeFd=%b($K_`Q*1^pIuJJ>%sFgQ3^ z6&xBI9vm5*6s!(T3(g2`2(|`465Jfz65JZx7Tgg$Hh6sS#NcVcGlJ&^&kuewcwz9$ z;Aeu@1g{G|5d3EF@!&JT=YlT;e;Rx#_(t&Gy+y?XX?@8#Jms8_FEp}oR;CG<+_ zmDVexS5~jWUj2L3_8O#`qIz7lLbX=4NA;TOsOkgNdDTVLm#V9(UsQjD1cn5Ms6s+R z;zANal0wuWIU%Ny(IGQKo(kC(@V%a;>n1e5xXOvk9aX+Z^TOx2O^F}oQk*{aV6qv z#19caMf?$QGtx8CJJL7OKQb^fI8qfE8W|oL85tcJ8yO#&7-^2Ik8FsvMvjPViX0W$ z9637D7P%;LN#wG~6_KkVpN(7{xh8U5O|DZs8dm=qs~U%i25VyX4I{y+fjF-Q8XRx7VRA!5FHtv z8J!)S8{IoPKUy0-FnVxwU37hPLv(9&TXaYC*yyFv+oPY0ej$2K^uFl*(FdasMSl?e zQS^!EQ_*Lme~i8pqli((M8#yp6vvdtl*d%YJQC9!(-PAf(-zYaGd5;wj1aRlW=qVr zm>n^@VxEinAm(_?$1$J8oQgRUb1vp;%#ShGVt$Fa5!)j+J~lfxH@0_de(ccLVX=*| z!(&IrJ`&p;J0bSb*eS6>?A+M-v8!UY#%_<@8M{07qu3L%Cu2{?o{c>pdolL2*dJnV z#@>p(9eXEE6&D&89v2xG9TyuHAE%B>jVp}P#~I>GahA9Vans^v#61x=H*S91lW_~< z7R4=z+Yq-YZg1S1ac{>Ri8~tiUEKF^KgL~)yB_yz+>Lk)%}h4lH{L%!C|(s`7+)M; z8ebl-jjxXH6F)S5SbRsk5I-$`X8i2A@x+f4PbQvDJePPa@p|IlNiIoj zl4}x|l#-O0l%15D)H|slsVJ#5$(Zy=(zv7vNslH?O)Q_sCs@JI3t2e4QtGB6lsCTPhRPR+ERKKG> zrhZ?2T>Z29SM?3`AL_rnU%hyq)q+%CVI9Q%fF@%sZXUoow_7-W$H7j>ri*PEQ@>8VoO&hoYU+=v*HV8;y_1I1WNGp=_cYJ6#I)SB-f0DC#c7RcBhs4EMy0i+ zwWhVFJ)Sl@ZEM=TwEbx>r@fl?dD>TLm(nh$eV6uq+D~b}rrk)pm99u<(tD;W)79x| z=^5!+={f0n>G|n{)2F1*NuQVgWct(Td(!u%?@vFNeklFb^f%Ivq<@nBMfz9i-=ts3 zaLMSA;hLe$@W}AW@Xd(Gh|Y-3NXW>^$jdNg)MeCXG-iy*n3XXnV_wFBjHfc5&RCN1 zO2+3IKV0K?an%s^=j5vS=X|zXZ@D-M|NO#uk4WQuPsv`8{Z#g%>?PUDvNvVFlzkxkQ1+|YuV;Ul{dxA6*_X1v z&HgU?m+arN|Hz?oymNeW0&;?LR5=YfqjP5Ftj<}NvoU9L&bFK#IlFV7%Xu+pU(WuV zmvdgvc{AtjoOg1*%DIyBOU~c9RIWU?N3L5gmz$ECnwycEotu}d$t}n&%B{_vl*{MN z$eootCwE@%g4~6%GfZREjMR+Mv}nd?IyB=n6E%}Hyk?qare?Ngu4caG zNzK!m#hRs>6`E%>Yc%UM8#S9X+cY~h&uL!N?9&|39MZg|c~f&(b5!%L<^#=f%?ZsZ z%^A%(%>~V;n$I;~YQENdqxn|zo#uPZkD6zZFRH#C1}Zfb66Zfox3qkJ--%9rQ6 zS{($^J`E~ij@~!zJ^GD^kX@;}Z0E&uoYoB4m|-zmTaRDq&^EpRR13OoyX z7vvWd78Dnh7L*rM6jT;e6*L#L6tot!6?7JiE0|dDbiv|+R|{S*c(dT`f+Gb-3yu}M zTkw9tjeqUxePMW!N4QBBc+qCrJ#nr|7;y%TOVpH*?;wi;K z@$}-E#j}c^D4tuqpmXOa5?x{}F_+Yo^e?F`8B{X3WJt--lG!D5OBR$YELl{tq-0si zijrqa)|EV8a(qUdohumS&gcm1;^0N{dTN zODjriN+*?0F6B!fE1h2Yckh1WysIu5Hb6HK`d9YvWsP3m;F+9tL%0;E~m;B#r5 z6cs%ylocKoc@_B;g%u?gWfc__+KTFmJ{2_;){2&j)`|%glPacE2o=*Rc2w-Dc&_4w ziaizkDqgDCUvaSFSj8_DH!A+DxK(kx;!Y*1BrB;(&&r_6UX`Jh5tZu7oXR|Hl2)xv z)n;h3wYl2f+I(%HwnSU5t<+X&b=p2!qt>kLtL>*9pdF+gq8+Mj&<@u&X`8h+ZJV}J zJ6=0UJ4GvKr)wYAKB1kbeNy|hc8PYmc9nLucAa*kc8hkqc9-^f?H=t*+Jo9xw6AO5 z(jL(s)4s1gu05eWsXeVdt39v1sQpa)rS_8cvi6Ghs`dx%PulC+-?V>d|I*&BBC5zL zx=K;SRQ0TKt8%aMtn#k%t@5u5tO~ADRfSfCS4CDuSH)JvS0z>@SEW>?Rb^CVRpnIW zRcWdUs*0*gs>-S=sYu8wSN~T1NA+LTw{?V$)X_Q@T@Rg`&RyrF^VJ3Df^{Lfa9xxxR+pel)}`t) zblJK*UB0eJSE{SfRq6CPqt2r1r>oTs)(zD)=!WZ>bj>=Ou1(je8?T$Bo1)`&kLhOU z9@ov*&DAZ?Ez~X6E!8d8t z=|0dM*L|$}M0ZMeMt4qkLHDWdbKRG^uXW$(zSVuF`(F2>?wanp?pNIn-5J*W53d+B}je)<4?kiM5bL?5P)&`0TG^l|zGeUe_SPt~XE zv-G)ojlNJ{qA%BL^*X%)p4+d{56}1&@a?4)-Thq)IY0VtKXpCtly^Jso$sHZ-_F)8WIf2hEzj_A={8=$Tt)jN(~i; zDudo&G*}G%47G;AhM|TA!*D~Bq1j+Fv>7@L;|-GxQw)M(y5Vud6NY()Ck;;b{U>G>@mD#IB0mq@VenG!x6(V!~2Hgh7*QUhO>qXhR+ON8ZH^W zHC#3PX!zOitKoOUO~c=YJ4Otf0~AKq=xXGQo<<*|zcI+DGKLu=jWNb}W0En&m~PB6 z<{CA|LSu=s+^99`j0U6GSYsSu9AvCB4l`PfBaNesEygj%4&ylEMB`*5Z=7bFX`F4G zYg}MlXk2VuW?X4}*0|QV!MNGD&A8L}obg5DKH~x7A>(VtH;splM~&|pKQw-9JZU^* zJa7Ee_=WLn<7MM_#vhE=jK3If82>chGX7&iCYecYVoW_vN|T4l+vH~oH1#rtnj%cm zrZ`igNo`6qWtwtKy-fwCVpEx^(o}8gV=|fgn);gtnueI_O^v1zrbkSpO|7PO(^%64 z)1#)TrpHV(OtVaLO!G}onHHIrnpT*eF|9GJH*GR)HSI9%HoailYuaym+4QRE4b$7E zcTDe^J}`Y``owhFbk20q^ttIP(>JCorteKZnXa3DGyP%u%XHgJm`O8jb}{!byP4h1 zUS?l&fH~M4Vh%S)nPbff=45lKIm4W7&NJtmi_E3)GX5&F-fT2m%>B%@=E3Hn<_7a{ zbCbE*Y%{l+JI&+Glgv}hf_b|6aq|=AdFCh0Pn(yRmz!6aSDV+FH=4JYx0`pFpEvI@ zzhpjWe#QK{`7QGi^D*=L=HuoQ=2Pag<_qS}%wL)>nZGq(HUDV-+5D^dck@m2-{w0O zY@sX)3u|$;a28LCkHy~-WKmhdERmKNOS~n?l441>WLa`88cU(2#8Ph2T67kJ1zrVe z8DJS?sk02TSS=$hqbwbkv6gWb-tw4bnq{tKrDcuf1kUP#2*&^KLXA_ HmUsRKVg9$A literal 27102 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. + */ + +#ifndef xcodecapp_cocoa_FSEventCallback_h +#define xcodecapp_cocoa_FSEventCallback_h + +#import "TNXCodeCapp.h" + +void fsevents_callback(ConstFSEventStreamRef, void*, size_t, void*, const FSEventStreamEventFlags*, const FSEventStreamEventId*); + +#endif diff --git a/Tools/xcodecapp-cocoa/FSEventCallback.m b/Tools/xcodecapp-cocoa/FSEventCallback.m new file mode 100644 index 000000000..aef270e3f --- /dev/null +++ b/Tools/xcodecapp-cocoa/FSEventCallback.m @@ -0,0 +1,57 @@ +/* + * This file is a part of program xcodecapp-cocoa + * Copyright (C) 2011 Antoine Mercadal (primalmotion@archipelproject.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "FSEventCallback.h" + +/*! + This is the FSEvent callback + */ +void fsevents_callback(ConstFSEventStreamRef streamRef, + void *userData, + size_t numEvents, + void *eventPaths, + const FSEventStreamEventFlags eventFlags[], + const FSEventStreamEventId eventIds[]) +{ + TNXCodeCapp *xcc = (TNXCodeCapp *)userData; + size_t i; + + for(i = 0; i < numEvents; i++) + { + NSString *path = [(NSArray *)eventPaths objectAtIndex:i]; + + if (!(eventFlags[i] & 0x00010000) + || [xcc isPathMatchingIgnoredPaths:path] + || (![xcc isXIBFile:path] && ![xcc isObjJFile:path] && ![xcc isXCCIgnoreFile:path])) + continue; + + // 0x00000200 should be kFSEventStreamEventFlagItemRemoved but for some reason + // xCode mark this as not recognized. + if (eventFlags[i] & 0x00000200) + { + [xcc handleFileRemoval:path]; + } + + else + { + NSLog(@"this file has been modified or created"); + [xcc handleFileModification:path notify:YES]; + } + [xcc updateLastEventId:eventIds[i]]; + } +} \ No newline at end of file diff --git a/Tools/xcodecapp-cocoa/Info.plist b/Tools/xcodecapp-cocoa/Info.plist index ef8ec489f..36e05c47e 100644 --- a/Tools/xcodecapp-cocoa/Info.plist +++ b/Tools/xcodecapp-cocoa/Info.plist @@ -19,7 +19,7 @@ CFBundleSignature ???? CFBundleVersion - 1.0 + 2.0 NSMainNibFile MainMenu NSPrincipalClass diff --git a/Tools/xcodecapp-cocoa/TNXCodeCapp.h b/Tools/xcodecapp-cocoa/TNXCodeCapp.h new file mode 100644 index 000000000..74e584017 --- /dev/null +++ b/Tools/xcodecapp-cocoa/TNXCodeCapp.h @@ -0,0 +1,73 @@ +/* + * This file is a part of program xcodecapp-cocoa + * Copyright (C) 2011 Antoine Mercadal (primalmotion@archipelproject.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import +#import "PRHEmptyGrowlDelegate.h" +#import "FSEventCallback.h" + +extern NSString * const XCCDidPopulateProjectNotification; +extern NSString * const XCCConversionStartNotification; +extern NSString * const XCCConversionStopNotification; +extern NSString * const XCCListeningStartNotification; + + +@interface TNXCodeCapp : NSObject +{ + FSEventStreamRef stream; + NSFileManager *fm; + NSMutableArray *errorList; + NSMutableArray *ignoredFilePaths; + NSNumber *lastEventId; + NSString *currentProjectName; + NSString *parserPath; + NSString *XCodeSupportPBXPath; + NSString *XCodeSupportProjectName; + NSString *XCodeTemplatePBXPath; + NSString *profilePath; + NSURL *currentProjectURL; + NSURL *XCodeSupportFolder; + NSURL *XCodeSupportProject; + NSURL *XCodeSupportProjectSources; + PRHEmptyGrowlDelegate *growlDelegateRef; + NSObject *delegate; +} + +@property (retain) NSObject* delegate; +@property (retain) NSMutableArray* errorList; +@property (retain) NSURL* XCodeSupportProject; +@property (retain) NSURL* currentProjectURL; +@property (retain) NSString* currentProjectName; + +- (BOOL)isObjJFile:(NSString*)path; +- (void)computeIgnoredPaths; +- (BOOL)isPathMatchingIgnoredPaths:(NSString*)aPath; +- (BOOL)isXIBFile:(NSString *)path; +- (BOOL)isXCCIgnoreFile:(NSString *)path; +- (BOOL)prepareXCodeSupportProject; +- (NSURL*)shadowURLForSourceURL:(NSURL*)aSourceURL; +- (void)handleFileModification:(NSString*)fullPath notify:(BOOL)shouldNotify; +- (void)handleFileRemoval:(NSString*)fullPath; +- (void)initializeEventStreamWithPath:(NSString*)aPath; +- (void)stopEventStream; +- (void)updateLastEventId:(uint64_t)eventId; +- (void)listenProjectAtPath:(NSString *)path; +- (void)clear; +- (void)start; + + +@end diff --git a/Tools/xcodecapp-cocoa/TNXCodeCapp.m b/Tools/xcodecapp-cocoa/TNXCodeCapp.m new file mode 100644 index 000000000..bfd59d01a --- /dev/null +++ b/Tools/xcodecapp-cocoa/TNXCodeCapp.m @@ -0,0 +1,515 @@ +/* + * This file is a part of program xcodecapp-cocoa + * Copyright (C) 2011 Antoine Mercadal (primalmotion@archipelproject.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "TNXCodeCapp.h" + +NSString * const XCCDidPopulateProjectNotification = @"XCCDidPopulateProjectNotification"; +NSString * const XCCConversionStartNotification = @"XCCConversionStartNotification"; +NSString * const XCCConversionStopNotification = @"XCCConversionStopNotification"; +NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification"; + + +@implementation TNXCodeCapp + +@synthesize delegate; +@synthesize errorList; +@synthesize XCodeSupportProject; +@synthesize currentProjectURL; +@synthesize currentProjectName; + +/*! + Initialize the AppController + */ +- (id)init +{ + self = [super init]; + + if (self) + { + errorList = [NSMutableArray arrayWithCapacity:10]; + fm = [NSFileManager defaultManager]; + ignoredFilePaths = [NSMutableArray new]; + parserPath = [[NSBundle mainBundle] pathForResource:@"parser" ofType:@"j"]; + lastEventId = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastEventId"]; + + if([fm fileExistsAtPath:[@"~/.bash_profile" stringByExpandingTildeInPath]]) + profilePath = [@"source ~/.bash_profile" stringByExpandingTildeInPath]; + else if([fm fileExistsAtPath:[@"~/.profile" stringByExpandingTildeInPath]]) + profilePath = [@"source ~/.profile" stringByExpandingTildeInPath]; + else if([fm fileExistsAtPath:[@"~/.bashrc" stringByExpandingTildeInPath]]) + profilePath = [@"source ~/.bashrc" stringByExpandingTildeInPath]; + else if([fm fileExistsAtPath:[@"~/.zshrc" stringByExpandingTildeInPath]]) + profilePath = [@"source ~/.zshrc" stringByExpandingTildeInPath]; + else + { + NSAlert *alert = [NSAlert alertWithMessageText:@"Cannot find any valid profile file" + defaultButton:@"Ok" + alternateButton:nil + otherButton:nil + informativeTextWithFormat:@"We have checked for ~/.bash_profile, ~/.profile, ~/.bashrc and ~/.zshrc without luck.\n\nYou need to have on of this file to tell XCodeCapp-cocoa where is located nib2cib. Now we gonna try to without sourcing one this file and it may fail.\n\nIf you notice any error or weird behaviour, please look at Mac OS' Console.app for log message and open a ticket."]; + [alert runModal]; + profilePath = @""; + } + } + + return self; +} + +- (void)start +{ + NSString *lastOpenedPath = [[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenedPath"]; + if (lastOpenedPath) + { + if ([fm fileExistsAtPath:lastOpenedPath]) + { + NSString *message = [NSString stringWithFormat:@"Resuming project %@", [lastOpenedPath lastPathComponent], nil]; + + [delegate performSelector:@selector(growlWithTitle:message:) withObject:@"Resume project" withObject:message]; + [self listenProjectAtPath:[NSString stringWithFormat:@"%@/", lastOpenedPath]]; + } + else + { + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"LastOpenedPath"]; + } + } +} + +/*! + Initializes the FSEvent stream + @param aPath the path of the folder to listen + */ +- (void)initializeEventStreamWithPath:(NSString*)aPath +{ + NSArray *pathsToWatch = [NSArray arrayWithObject:aPath]; + void *appPointer = (void *)self; + FSEventStreamContext context = {0, appPointer, NULL, NULL, NULL}; + NSTimeInterval latency = 2.0; + + stream = FSEventStreamCreate(NULL, &fsevents_callback, &context, (CFArrayRef) pathsToWatch, + [lastEventId unsignedLongLongValue], (CFAbsoluteTime) latency, kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagNoDefer | 0x00000010 ); + + FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + FSEventStreamStart(stream); +} + +/*! + Stop listening the FSEvent stream if active + */ +- (void)stopEventStream +{ + if (stream) + { + FSEventStreamStop(stream); + FSEventStreamInvalidate(stream); + stream = nil; + } +} + +/*! + Stops and clear the worker + */ +- (void)clear +{ + currentProjectURL = nil; + currentProjectName = nil; + [ignoredFilePaths removeAllObjects]; + [self stopEventStream]; +} + + +#pragma mark - +#pragma mark Utilities + +/*! + Update the last event ID. We use a method because + This is called from outside the class, in the FSEvent callback + @param eventId the current event ID value + */ +- (void)updateLastEventId:(uint64_t)eventId +{ + lastEventId = [NSNumber numberWithUnsignedLongLong:eventId]; + [[NSUserDefaults standardUserDefaults] setObject:lastEventId forKey:@"lastEventId"]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +/*! + Run a NSTask with the given arguments + @param arguments NSArray containing the NSTask arguments + @return NSarray containing the return code (int) and the eventual response (string) + */ +- (NSArray *)runTask:(NSArray *)arguments +{ + NSTask *task; + NSData *stdOut; + NSString *response; + NSNumber *status; + + task = [[NSTask alloc] init]; + + [task setLaunchPath: @"/bin/bash"]; + [task setArguments: arguments]; + [task setStandardOutput:[NSPipe pipe]]; + [task launch]; + [task waitUntilExit]; + + stdOut = [[[task standardOutput] fileHandleForReading] availableData]; + response = [[NSString alloc] initWithData:stdOut encoding:NSUTF8StringEncoding]; + status = [NSNumber numberWithInt:[task terminationStatus]]; + + return [NSArray arrayWithObjects:status, response, nil]; +} + +/*! + Handle a file modification. If it's a .J or XIB or NIB, it will + perform the according conversion. If it's .xcodecapp-ignore, it will + update the list of ignored files. + @param fullPath the full path of the modified file + @param shouldNotify if YES, Growl notifications will be displayed + */ +- (void)handleFileModification:(NSString*)fullPath notify:(BOOL)shouldNotify +{ + if ([self isPathMatchingIgnoredPaths:fullPath] || ![fm fileExistsAtPath:fullPath]) + return; + + NSLog(@"Starting to parse file modification %@", fullPath); + + NSArray *arguments; + NSString *successMsg; + NSNumber *status; + NSString *response; + NSString *errorTitle; + NSString *errorMsg; + NSString *splitedPath = [NSString stringWithFormat:@"%@/%@", [[fullPath pathComponents] objectAtIndex:[[fullPath pathComponents] count] - 2], [fullPath lastPathComponent]]; + NSString *shadowPath = [[self shadowURLForSourceURL:[NSURL URLWithString:[fullPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]] path]; + + NSLog(@"Shadow path is: %@", shadowPath); + + + if ([self isXIBFile:fullPath] || [self isObjJFile:fullPath] || [self isXCCIgnoreFile:fullPath]) + { + [[NSNotificationCenter defaultCenter] postNotificationName:XCCConversionStartNotification object:self]; + + if ([self isXIBFile:fullPath]) + { + NSLog(@"File is XIB file"); + arguments = [NSArray arrayWithObjects: @"-c", [NSString stringWithFormat:@"(%@; nib2cib '%@';) 2>&1", profilePath, fullPath],@"",nil]; + successMsg = @"The XIB file has been converted"; + } + else if ([self isObjJFile:fullPath]) + { + NSLog(@"File is J file"); + arguments = [NSArray arrayWithObjects: @"-c", [NSString stringWithFormat:@"(%@; objj '%@' '%@' '%@';) 2>&1", profilePath, parserPath, fullPath, shadowPath],@"",nil]; + successMsg = @"The Objective-J file has been converted"; + } + else if ([self isXCCIgnoreFile:fullPath]) + { + NSLog(@"File is .xcodecapp-ignore"); + [self computeIgnoredPaths]; + successMsg = @"Ignored files list updated"; + arguments = nil; + status = [NSNumber numberWithInt:0]; + } + + //Run the task and get the response if needed + if (arguments) + { + NSLog(@"Running task..."); + NSArray *statusInfo = [self runTask:arguments]; + + status = [statusInfo objectAtIndex:0]; + response = [statusInfo objectAtIndex:1]; + + NSLog(@"Task result is : %@", status); + NSLog(@"Task response is : %@", response); + } + + + if ([status intValue] == 0 && shouldNotify) + { + [delegate performSelector:@selector(growlWithTitle:message:) withObject:splitedPath withObject:successMsg]; + } + else if (![status intValue] == 0) + { + [errorList addObject:response]; + + errorTitle = [NSString stringWithFormat:@"ERROR: %@", splitedPath]; + errorMsg = [NSString stringWithFormat:@"Error was: %@.\n\n You may want to check in error list.", response]; + [delegate performSelector:@selector(growlWithTitle:message:) withObject:splitedPath withObject:errorMsg]; + } + + [[NSNotificationCenter defaultCenter] postNotificationName:XCCConversionStopNotification object:self]; + } + + NSLog(@"Computing done for file %@", fullPath); +} + +/*! + Handle a file deletion. If it's a .J, it will + remove the shadowed .h file. If it's .xcodecapp-ignore + it will reset the list of ignored files. + @param fullPath the full path of the modified file + @param shouldNotify if YES, Growl notifications will be displayed + */ +- (void)handleFileRemoval:(NSString*)fullPath +{ + if ([self isPathMatchingIgnoredPaths:fullPath] || [fm fileExistsAtPath:fullPath]) + return; + + if ([self isObjJFile:fullPath]) + { + NSString *shadowPath = [[self shadowURLForSourceURL:[NSURL URLWithString:[fullPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]] path]; + [fm removeItemAtPath:shadowPath error:nil]; + NSLog(@"Removing shadow file %@", shadowPath); + } + else if ([self isXCCIgnoreFile:fullPath]) + { + [self computeIgnoredPaths]; + } +} + +/*! + Check if given full path is Objective-J file + @param path the path to check + @return YES or NO + */ +- (BOOL)isObjJFile:(NSString *)path +{ + return [[[path pathExtension] uppercaseString] isEqual:@"J"]; +} + +/*! + Check if given full path is XIB or NIB file + @param path the path to check + @return YES or NO + */ +- (BOOL)isXIBFile:(NSString *)path +{ + path = [[path pathExtension] uppercaseString]; + return [path isEqual:@"XIB"] || [path isEqual:@"NIB"]; +} + +/*! + Check if given full path is the .xcodecapp-ignore file + @param path the path to check + @return YES or NO + */ +- (BOOL)isXCCIgnoreFile:(NSString *)path +{ + path = [path lastPathComponent]; + return [path isEqual:@".xcodecapp-ignore"]; +} + + +/*! + Check if .xCodeSupport needs to be initialized. + If not needed, check that all J files are mirrored. If no, + then launch conversion for missing mirrored h files + @return YES or NO + */ +- (BOOL)prepareXCodeSupportProject +{ + XCodeSupportProjectName = [NSString stringWithFormat:@"%@.xcodeproj/", currentProjectName]; + XCodeTemplatePBXPath = [[NSBundle mainBundle] pathForResource:@"project" ofType:@"pbxproj"]; + XCodeSupportFolder = [NSURL URLWithString:@".xCodeSupport/" relativeToURL:currentProjectURL]; + XCodeSupportProject = [NSURL URLWithString:XCodeSupportProjectName relativeToURL:XCodeSupportFolder]; + XCodeSupportProjectSources = [NSURL URLWithString:@"Sources/" relativeToURL:XCodeSupportFolder]; + XCodeSupportPBXPath = [NSString stringWithFormat:@"%@/project.pbxproj", [XCodeSupportProject path]]; + + //[fm removeItemAtURL:XCodeSupportFolder error:nil]; + + // create the template project if it doesn't exist + if (![fm fileExistsAtPath:[XCodeSupportFolder path]]) + { + NSLog(@"Xcode support folder created at: %@", [XCodeSupportProject path]); + [fm createDirectoryAtPath:[XCodeSupportProject path] withIntermediateDirectories:YES attributes:nil error:nil]; + + NSLog(@"Copying project.pbxproj from %@ to %@", XCodeTemplatePBXPath, [XCodeSupportProject path]); + [fm copyItemAtPath:XCodeTemplatePBXPath toPath:XCodeSupportPBXPath error:nil]; + + NSLog(@"Reading the content of the project.pbxproj"); + NSMutableString *PBXContent = [NSMutableString stringWithContentsOfFile:XCodeSupportPBXPath encoding:NSUTF8StringEncoding error:nil]; + [PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectName}" + withString:currentProjectName + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [PBXContent length])]; + [PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectRelativePath}" + withString:@".." + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [PBXContent length])]; + + [PBXContent writeToFile:XCodeSupportPBXPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + NSLog(@"PBX file adapted to the project"); + + NSLog(@"Creating source folder"); + [fm createDirectoryAtPath:[XCodeSupportProjectSources path] withIntermediateDirectories:YES attributes:nil error:nil]; + + + [NSThread detachNewThreadSelector:@selector(populateXCodeProject:)toTarget:self withObject:nil]; + return NO; + } + else + { + NSArray *subdirs = [fm subpathsAtPath:[currentProjectURL path]]; + for (NSString *p in subdirs) + { + NSString *path = [NSString stringWithFormat:@"%@/%@", [currentProjectURL path], p]; + NSString *shadow = [[self shadowURLForSourceURL:[NSURL URLWithString:path]] path]; + if ([self isObjJFile:path] && ![fm fileExistsAtPath:shadow] && ![[path lastPathComponent] isEqualToString:@"main.j"]) + { + NSLog(@"File %@ seems to be new. Computing it.", path); + [self handleFileModification:path notify:YES]; + } + } + return YES; + } +} + +/*! + Initialize the creation of the .xCodeSupport project. This + Operation is threaded + @param arguments Thread arguments (not used) + */ +- (void)populateXCodeProject:(id)arguments +{ + [delegate performSelector:@selector(growlWithTitle:message:) withObject:[[currentProjectURL path] lastPathComponent] withObject:@"Loading of project..."]; + + [self handleFileModification:[NSString stringWithFormat:@"%@", [currentProjectURL path]] notify:NO]; + NSArray *subdirs = [fm subpathsAtPath:[currentProjectURL path]]; + for (NSString *p in subdirs) + [self handleFileModification:[NSString stringWithFormat:@"%@/%@", [currentProjectURL path], p] notify:NO]; + + NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:currentProjectURL, @"URL", nil]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCDidPopulateProjectNotification object:self userInfo:info]; +} + +/*! + Compute the mirorred (shadow) name for a given path + @param aSourceURL the origin path + @return NSURL representing the shadow path + */ +- (NSURL*)shadowURLForSourceURL:(NSURL*)aSourceURL +{ + NSMutableString *flattenedPath = [NSMutableString stringWithString:[aSourceURL path]]; + NSLog(@"Flattened path is : %@", flattenedPath); + [flattenedPath replaceOccurrencesOfString:@"/" + withString:@"_" + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [[aSourceURL path] length])]; + + NSString *basename = [NSString stringWithFormat:@"%@.h", [[flattenedPath stringByDeletingPathExtension] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + + return [NSURL URLWithString:basename relativeToURL:XCodeSupportProjectSources]; +} + +/*! + Compute the ignored paths according to any existing + .xcodecapp-ignore file + */ +- (void)computeIgnoredPaths +{ + NSString *ignorePath = [NSString stringWithFormat:@"%@/.xcodecapp-ignore", [currentProjectURL path]]; + + if ([fm fileExistsAtPath:ignorePath]) + { + NSString *ignoreFileContent = [NSString stringWithContentsOfFile:ignorePath encoding:NSUTF8StringEncoding error:nil]; + ignoredFilePaths = [NSMutableArray arrayWithArray:[ignoreFileContent componentsSeparatedByString:@"\n"]]; + } + else + { + [ignoredFilePaths removeAllObjects]; + } + + [ignoredFilePaths addObject:@"*.git*"]; + [ignoredFilePaths addObject:@"*.svn*"]; + [ignoredFilePaths addObject:@"*Frameworks*"]; + [ignoredFilePaths addObject:@"*.xCodeSupport*"]; + + NSLog(@"ignored file paths are: %@", ignoredFilePaths); +} + +/*! + Check is given path should be ignored + @param aPath the path to check + @return YES if it should be ignored, NO otherwise + */ +- (BOOL)isPathMatchingIgnoredPaths:(NSString*)aPath +{ + BOOL isMatching = NO; + + for (NSString *ignoredPath in ignoredFilePaths) + { + if ([ignoredPath isEqual:@""]) + continue; + + NSMutableString *regexp = [NSMutableString stringWithFormat:@"%@/%@", [currentProjectURL path], ignoredPath]; + [regexp replaceOccurrencesOfString:@"/" + withString:@"\\/" + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [regexp length])]; + + [regexp replaceOccurrencesOfString:@"." + withString:@"\\." + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [regexp length])]; + + [regexp replaceOccurrencesOfString:@"*" + withString:@".*" + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [regexp length])]; + + NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexp]; + if ([regextest evaluateWithObject:aPath]) + { + isMatching = YES; + + break; + } + } + + return isMatching; +} + +/*! + Start all needed processes for listening to a given path + @param path The folder path to listen to + */ +- (void)listenProjectAtPath:(NSString *)path +{ + NSMutableString *tempName = [NSMutableString stringWithString:[path lastPathComponent]]; + + currentProjectURL = [NSURL URLWithString:path]; + + [tempName replaceOccurrencesOfString:@" " + withString:@"_" + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [tempName length])]; + currentProjectName = [NSString stringWithString:tempName]; + + [self computeIgnoredPaths]; + + BOOL isProjectReady = [self prepareXCodeSupportProject]; + + [self initializeEventStreamWithPath:[currentProjectURL path]]; + + NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:path, @"path", [NSNumber numberWithInt:(isProjectReady) ? 1 : 0], @"ready", nil]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCListeningStartNotification object:self userInfo:info]; + + [[NSUserDefaults standardUserDefaults] setObject:[currentProjectURL path] forKey:@"LastOpenedPath"]; +} + +@end diff --git a/Tools/xcodecapp-cocoa/help.rtfd/1.PNG b/Tools/xcodecapp-cocoa/help.rtfd/1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f5919a5d2aeaa133cb0c57be088061d191ea30c7 GIT binary patch literal 35727 zcmV(-K-|BHP)4Tx0C)kdS$RB^-}k@IGaF+DW02k0_dWZ*ui5tsW5&KVc12mD5G|5W)<}v{ zNs=N;ObW z#xk5OO(>pT-W1$RfCoh6RRY3PT1>RDqoW=8pU<};0IgR(R#?~dKiU583KBgah6VuS zh*bO2V`vcwz61c=LW^d^0)SrEC!P=+y^aqen3I7Rh~S!a9P}Hvu4Dh-xPODk)!7u` z83lleK&3K*03ggDbV@ue2+>0%0D$F)q=!TTK&BwrfEG-p1HkKt@W@9*M6KgI1WWt> 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 Xv%00000NkvXXu0mjf31&|m literal 0 HcmV?d00001 diff --git a/Tools/xcodecapp-cocoa/help.rtfd/2.PNG b/Tools/xcodecapp-cocoa/help.rtfd/2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..640fae1d4d9222fc004eefa30eac8f2faceabeea GIT binary patch literal 81193 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

+x?eURWUK-hsyADN}UmQINfEb1!UW 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 literal 0 HcmV?d00001 diff --git a/Tools/xcodecapp-cocoa/help.rtfd/3.PNG b/Tools/xcodecapp-cocoa/help.rtfd/3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..88ae34c2fcf4c042a29784787049d13e77cc7a3a GIT binary patch literal 34310 zcmV)8K*qm`P)4Tx0C)kdS$RB^-}k@IGaF+DW02k0_dWZ*ui5tsW5&KVc12mD5G|5W)<}v{ zNs=N;ObW z#xk5OO(>pT-W1$RfCoh6RRY3PT1>RDqoW=8pU<};0IgR(R#?~dKiU583KBgah6VuS zh*bO2V`vcwz61c=LW^d^0)SrEC!P=+y^aqen3I7Rh~S!a9P}Hvu4Dh-xPODk)!7u` z83lleK&3K*03ggDbV@ue2+>0%0D$F)q=!TTK&BwrfEG-p1HkKt@W@9*M6KgI1WWt> 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 z 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