diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index ab6fcd38c..079c89b55 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -111,7 +111,7 @@ AppController *SharedAppControllerInstance = nil; [[NSApplication sharedApplication] terminate:self]; return; } - + // If we were opened from the command line, self.pathToOpenAtLaunch will be set. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -144,15 +144,15 @@ AppController *SharedAppControllerInstance = nil; kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], kDefaultXCCReactToInodeMod: @YES, kDefaultXCCReopenLastProject: @YES, - kDefaultXCCAutoOpenErrorsPanelOnWarnings: @YES, kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, + kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, + kDefaultXCCAutoShowNotificationOnErrors: @YES, + kDefaultXCCAutoShowNotificationOnCappLint: @NO, kDefaultXCCProjectHistory: [NSArray new], kDefaultMaxRecentProjects: @20, kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], kDefaultAutoOpenXcodeProject: @YES, - kDefaultShowProcessingNotices: @YES, - kDefaultUseSymlinkWhenCreatingProject: @YES, - KDefaultUsesCappLintForEveryNotifications: @NO + kDefaultUseSymlinkWhenCreatingProject: @YES }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index e40530853..81e9b7cf6 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -152,12 +152,24 @@ [self postErrorNotificationForPath:self.sourcePath line:0 message:response status:status]; } } - - [self notifyUserWithTitle:notificationTitle message:notificationMessage]; + + if ([self.xcc shouldShowErrorNotification]) + [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } else if (!self.xcc.isLoadingProject) { - [self notifyUserWithTitle:notificationTitle message:notificationMessage]; + BOOL showFinalNotification = YES; + + if ([self.xcc shouldProcessWithCappLint]) + { + showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]]; + + if (!showFinalNotification) + [self.xcc showCappLintErrors]; + } + + if (showFinalNotification) + [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } } @@ -178,7 +190,7 @@ nil]; info[@"projectId"] = self.projectId; - info[@"message"] = [NSString stringWithFormat:@"%@, line %d\n%@", [self.sourcePath lastPathComponent], 0, message]; + info[@"message"] = [NSString stringWithFormat:@"Compilation issue: %@, line %d\n%@", [self.sourcePath lastPathComponent], 0, message]; if (self.isCancelled) return; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index be194584b..11f71d303 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -17,16 +17,16 @@ extern NSString * const kDefaultFirstLaunchVersion; extern NSString * const kDefaultXCCAPIMode; extern NSString * const kDefaultXCCReactToInodeMod; extern NSString * const kDefaultXCCReopenLastProject; -extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnWarnings; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; +extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; +extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; +extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; extern NSString * const kDefaultXCCProjectHistory; extern NSString * const kDefaultLastOpenedPath; extern NSString * const kDefaultPathModificationDates; extern NSString * const kDefaultMaxRecentProjects; extern NSString * const kDefaultLogLevel; extern NSString * const kDefaultAutoOpenXcodeProject; -extern NSString * const kDefaultShowProcessingNotices; extern NSString * const kDefaultUseSymlinkWhenCreatingProject; -extern NSString * const KDefaultUsesCappLintForEveryNotifications; #endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index 2be6fcf22..6a388b8ae 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -15,14 +15,14 @@ NSString * const kDefaultFirstLaunchVersion = @"firstLaunchVersion"; NSString * const kDefaultXCCAPIMode = @"XCCAPIMode"; NSString * const kDefaultXCCReactToInodeMod = @"XCCReactMode"; NSString * const kDefaultXCCReopenLastProject = @"XCCReopenLastProject"; -NSString * const kDefaultXCCAutoOpenErrorsPanelOnWarnings = @"XCCAutoOpenErrorsPanelOnWarnings"; NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors = @"XCCAutoOpenErrorsPanelOnErrors"; +NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint = @"XCCAutoOpenErrorsPanelOnCappLint"; +NSString * const kDefaultXCCAutoShowNotificationOnErrors = @"XCCAutoOpenShowNotificationErrors"; +NSString * const kDefaultXCCAutoShowNotificationOnCappLint = @"XCCAutoShowNotificationOnCappLint"; NSString * const kDefaultXCCProjectHistory = @"XCCProjectHistory"; NSString * const kDefaultLastOpenedPath = @"LastOpenedPath"; NSString * const kDefaultPathModificationDates = @"pathModificationDates"; NSString * const kDefaultMaxRecentProjects = @"maxRecentProjects"; NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; -NSString * const kDefaultShowProcessingNotices = @"showProcessingNotices"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; -NSString * const KDefaultUsesCappLintForEveryNotifications = @"usesCappLintForEveryNotifications"; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index a7b2039aa..88fbac78a 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -45,7 +45,8 @@ enum { extern NSString * const XCCConversionDidStartNotification; extern NSString * const XCCConversionDidEndNotification; extern NSString * const XCCProjectDidFinishLoadingNotification; - +extern NSString * const XCCCappLintDidStartNotification; +extern NSString * const XCCCappLintDidEndNotification; @interface XcodeCapp : NSObject @@ -109,6 +110,9 @@ extern NSString * const XCCProjectDidFinishLoadingNotification; // A list of errors generated from the current batch of source processing @property NSMutableArray *errorList; +// A list of files name who can be processed, based on xcapp-ignore and path pf the project +@property NSMutableArray *xCodeCappTargetedFiles; + // Panel, table and controller used to display errors @property (strong) IBOutlet NSPanel *errorsPanel; @property (unsafe_unretained) IBOutlet NSTableView *errorTable; @@ -132,6 +136,8 @@ extern NSString * const XCCProjectDidFinishLoadingNotification; - (BOOL)isXibFile:(NSString *)path; - (BOOL)isXCCIgnoreFile:(NSString *)path; +- (BOOL)shouldShowErrorNotification; + - (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path; - (BOOL)hasErrors; @@ -143,6 +149,10 @@ extern NSString * const XCCProjectDidFinishLoadingNotification; - (NSDictionary*)createProject:(NSString*)aPath; +- (BOOL)shouldProcessWithCappLint; +- (BOOL)checkCappLintForPath:(NSArray*)paths; +- (void)showCappLintErrors; + @end @interface XcodeCapp (SnowLeopard) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 3263b1f47..3fe93840e 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -74,6 +74,8 @@ static NSPredicate * XCCDirectoriesToIgnorePredicate = nil; // An array of the default predicates used to ignore paths. static NSArray *XCCDefaultIgnoredPathPredicates = nil; +NSString * const XCCCappLintDidStartNotification = @"XCCCappLintDidStartNotification"; +NSString * const XCCCappLintDidEndNotification = @"XCCCappLintDidEndNotification"; @interface XcodeCapp () @@ -317,9 +319,10 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self clearErrors:self]; [self computeIgnoredPaths]; - + [self prepareXcodeSupport]; [self populateXcodeProject]; + [self populatexCodeCappTargetedFiles]; [self waitForOperationQueueToFinishWithSelector:@selector(projectDidFinishLoading)]; } @@ -372,6 +375,25 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return projectCompatibilityVersion.doubleValue >= appCompatibilityVersion; } +- (void)populatexCodeCappTargetedFiles +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSDirectoryEnumerator *filesOfProject = [fm enumeratorAtPath:self.projectPath]; + NSString *filename; + + self.xCodeCappTargetedFiles = [NSMutableArray array]; + + while ((filename = [filesOfProject nextObject] )) { + + NSString *fullPath = [self.projectPath stringByAppendingPathComponent:filename]; + + if (![self isSourceFile:fullPath]) + continue; + + [self.xCodeCappTargetedFiles addObject:fullPath]; + } +} + - (void)createXcodeProject { if ([self.fm fileExistsAtPath:self.xcodeProjectPath]) @@ -730,11 +752,6 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - if ([defaults boolForKey:KDefaultUsesCappLintForEveryNotifications]) - [self checkCappLintForPath:path]; - DDLogVerbose(@"%@ %@", NSStringFromSelector(_cmd), path); } @@ -1364,6 +1381,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return [path substringFromIndex:self.projectPath.length + 1]; } + #pragma mark - Shadow Files Management - (NSString *)shadowBasePathForProjectSourcePath:(NSString *)path @@ -1641,17 +1659,56 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, [self runTaskWithLaunchPath:executablePath arguments:args returnType:kTaskReturnTypeNone]; } +- (BOOL)shouldShowErrorNotification +{ + return [[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCAutoShowNotificationOnErrors]; +} + +- (BOOL)shouldProcessWithCappLint +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + return [defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] + || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]; +} + - (void)showErrors { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if (([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && self.hasErrors) || - ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnWarnings] && self.errorList.count)) + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && self.errorList.count) { [self openErrorsPanel:self]; } } +- (void)showCappLintErrors +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && self.errorList.count) + [self openErrorsPanel:self]; + + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]) + { + NSUInteger numberError = [self.errorList count]; + + if (numberError) + { + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Code Style Issues", @"title", + filename.lastPathComponent , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } + } +} + - (void)pruneProcessingErrorsForProjectPath:(NSString *)path { // Remove all errors for the path being processed @@ -1679,6 +1736,113 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return index != NSNotFound; } + +#pragma mark - capp_lint + +- (IBAction)checkProjectWithCappLint:(id)aSender +{ + [self clearErrors:self]; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self selector:@selector(cappLintDidEndNotification:) name:XCCCappLintDidEndNotification object:nil]; + + [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.xCodeCappTargetedFiles]; +} + +- (void)cappLintDidEndNotification:(NSNotification*)aNotification +{ + [self showCappLintErrors]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCCappLintDidEndNotification object:nil]; +} + +- (BOOL)checkCappLintForPath:(NSArray*)paths +{ + DDLogVerbose(@"Checking path %@ with capp_lint", paths); + + NSUInteger numberOfFiles = [paths count]; + + if (!numberOfFiles) + return YES; + + self.isProcessing = YES; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidStartNotification object:self]; + + NSString *baseDirectory = [NSString stringWithFormat:@"--basedir='%@'", self.projectPath]; + NSMutableArray *arguments = [NSMutableArray arrayWithObjects:baseDirectory, nil]; + [arguments addObjectsFromArray:paths]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp_lint"] + arguments:arguments + returnType:kTaskReturnTypeStdOut]; + + NSInteger status = [taskResult[@"status"] intValue]; + + if (status == 0) + { + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidEndNotification object:self]; + return YES; + } + + NSString *response = taskResult[@"response"]; + NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; + + // We need to remove the first object who is the number of errors and the last object who is an empty line + [errors removeLastObject]; + [errors removeObjectAtIndex:0]; + + NSInteger numberOfErrors = [errors count]; + NSInteger i = 0; + NSString *path; + NSMutableArray *dicts = [NSMutableArray array]; + + if (numberOfFiles == 1) + path = [paths objectAtIndex:0]; + + for (i = 0; i < numberOfErrors; i++) + { + NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; + NSString *line; + NSString *firstCaract = [NSString stringWithFormat:@"%c" ,[error characterAtIndex:0]]; + + if ([[NSScanner scannerWithString:firstCaract] scanInt:nil]) + error = (NSMutableString*)[NSString stringWithFormat:@"%@:%@", path, error]; + + NSInteger positionOfFirstColon = [error rangeOfString:@":"].location; + + if (numberOfFiles > 1) + path = [error substringToIndex:positionOfFirstColon]; + + NSString *errorWithoutPath = [error substringFromIndex:(positionOfFirstColon + 1)]; + NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; + line = [errorWithoutPath substringToIndex:positionOfSecondColon]; + + NSString *messageError = [NSString stringWithFormat:@"Code style issue: %@ \n%@", path.lastPathComponent, errorWithoutPath]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:[line intValue]], @"line", + messageError , @"message", + path, @"path", + nil]; + + [dicts addObject:dict]; + } + + [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:NO]; + + self.isProcessing = NO; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCCappLintDidEndNotification object:self]; + + return NO; +} + +- (void)cappLintConversionDidGenerateError:(NSArray*)errors +{ + [self.errorListController addObjects:errors]; +} + #pragma mark - User notifications - (NSString *)applicationNameForGrowl @@ -1718,8 +1882,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, if ([info[@"projectId"] intValue] != self.projectId) return; - if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultShowProcessingNotices]) - [self notifyUserWithTitle:info[@"title"] message:info[@"message"]]; + [self notifyUserWithTitle:info[@"title"] message:info[@"message"]]; } - (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification @@ -1728,71 +1891,12 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return YES; } -- (IBAction)checkProjectWithCappLint:(id)aSender +- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { - [self clearErrors:self]; - [self performSelectorInBackground:@selector(checkCappLintForPath:) withObject:self.projectPath]; -} - -- (void)checkCappLintForPath:(NSString*)aPath -{ - DDLogVerbose(@"Checking path %@ with capp_lint", aPath); + if ([self.errorList count]) + [self openErrorsPanel:self]; - self.isProcessing = YES; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; - - NSString *baseDirectory = [NSString stringWithFormat:@"--basedir='%@'", self.projectPath]; - NSArray *arguments = [NSArray arrayWithObjects:baseDirectory, aPath, nil]; - - NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"capp_lint"] - arguments:arguments - returnType:kTaskReturnTypeStdOut]; - - NSInteger status = [taskResult[@"status"] intValue]; - NSString *response = taskResult[@"response"]; - - if (status == 0) - return; - - NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; - - // We need to remove the first object who is the number of errors and the last object who is an empty line - [errors removeLastObject]; - [errors removeObjectAtIndex:0]; - - NSInteger i = 0; - NSInteger numberOfErrors = [errors count]; - - for (i = 0; i < numberOfErrors; i++) - { - NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; - NSString *firstCaract = [NSString stringWithFormat:@"%c" ,[error characterAtIndex:0]]; - NSString *path; - NSString *line; - - if ([[NSScanner scannerWithString:firstCaract] scanInt:nil]) - error = (NSMutableString*)[NSString stringWithFormat:@"%@:%@",aPath,error]; - - NSInteger positionOfFirstColon = [error rangeOfString:@":"].location; - path = [error substringToIndex:positionOfFirstColon]; - - NSString *errorWithoutPath = [error substringFromIndex:(positionOfFirstColon + 1)]; - NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; - line = [errorWithoutPath substringToIndex:positionOfSecondColon]; - - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInt:[line intValue]], @"line", - [NSString stringWithFormat:@"capp_lint error in %@ \n%@", path, errorWithoutPath], @"message", - path, @"path", - nil]; - - [self.errorListController addObject:dict]; - } - - [self showErrors]; - - self.isProcessing = NO; - [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + [center removeDeliveredNotification:notification]; } @end diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index d5d832d90..6a0ad009d 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,10 +2,10 @@ 1060 - 13C64 + 13D43 5056 - 1265.19 - 697.40 + 1265.20 + 698.00 5056 5056 @@ -106,6 +106,14 @@ + + + Verify Project Code Style + + 2147483647 + + + Synchronize Project @@ -140,14 +148,6 @@ - - - Check project with capp_lint - - 2147483647 - - - YES @@ -216,7 +216,7 @@ - + 256 @@ -224,8 +224,6 @@ 268 {{164, 20}, {203, 98}} - - YES 68157504 @@ -261,7 +259,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 266 {{164, 126}, {221, 74}} - YES @@ -309,7 +306,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{17, 63}, {128, 128}} - YES @@ -329,11 +325,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {402, 202} - - - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} NO @@ -342,13 +336,13 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 2 {{1826, 825}, {550, 237}} 1618478080 - Errors & Warnings + Reporting NSPanel {315, 77} - + 256 @@ -364,7 +358,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 256 {550, 201} - YES NO @@ -441,7 +434,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{1, 1}, {550, 201}} - @@ -452,7 +444,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2147483392 {{1, 273}, {512, 16}} - NO 1 @@ -464,7 +455,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2147483392 {{535, 1}, {16, 45}} - NO @@ -473,7 +463,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{-1, 35}, {552, 203}} - 133682 @@ -489,7 +478,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 289 {{352, 8}, {85, 19}} - {250, 750} YES @@ -497,15 +485,15 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -2080374784 134217728 Clear - + .LucidaGrandeUI 12 - 4883 + 787 -2038284288 164 - + 400 @@ -518,7 +506,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 292 {{20, 8}, {85, 19}} - {250, 750} YES @@ -526,11 +513,11 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA -1543503872 134217728 Open - + -2038284288 164 - + 400 @@ -543,19 +530,17 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 289 {{445, 8}, {85, 19}} - - {250, 750} YES -2080374784 134217728 Close - + -2038284288 164 - + 400 @@ -565,11 +550,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {550, 237} - - - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 878}} {315, 99} {10000000000000, 10000000000000} errorPanel @@ -578,14 +561,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 3 2 - {{1964, 505}, {431, 348}} + {{1964, 505}, {393, 357}} 1618478080 Preferences NSWindow - + 256 @@ -601,7 +584,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 81}, {271, 18}} - YES @@ -635,7 +617,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 51}, {241, 18}} - YES @@ -660,7 +641,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{16, 109}, {298, 18}} - YES @@ -685,7 +665,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{15, 20}, {106, 17}} - YES @@ -705,7 +684,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 {{124, 14}, {56, 26}} - YES @@ -778,15 +756,13 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO - {{1, 1}, {395, 139}} + {{1, 1}, {357, 139}} - - {{17, 178}, {397, 155}} + {{17, 187}, {359, 155}} - {0, 0} @@ -818,93 +794,17 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 274 - - - 268 - {{16, 100}, {363, 18}} - - - - YES - - -2080374784 - 0 - Show notifications when individual files are processed - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{16, 72}, {363, 18}} - - - - YES - - -2080374784 - 0 - Check with capp_lint when files are processed - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - - - - 268 - {{35, 17}, {81, 18}} - - - - YES - - -2080374784 - 0 - Warnings - - - 1211912448 - 2 - - - - - 400 - 75 - - NO - 268 - {{137, 17}, {60, 18}} + {{146, 12}, {171, 18}} - - + YES -2080374784 0 - Errors + Open reporting window 1211912448 @@ -921,15 +821,14 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 268 - {{16, 43}, {306, 17}} + {{16, 39}, {126, 17}} - - + YES 68157504 272630784 - Automatically open Errors & Warnings panel on: + Compilation issues: @@ -938,16 +837,38 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA NO 1 + + + 268 + {{146, 38}, {171, 18}} + + + YES + + -2080374784 + 0 + Show notification + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + - {{1, 1}, {395, 131}} + {{1, 1}, {357, 66}} - - + - {{17, 16}, {397, 147}} + {{17, 101}, {359, 82}} - {0, 0} @@ -967,13 +888,114 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 2 NO + + + 12 + + + + 274 + + + + 268 + {{146, 12}, {171, 18}} + + YES + + -2080374784 + 0 + Open reporting window + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{146, 37}, {171, 18}} + + + YES + + -2080374784 + 0 + Show notification + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 38}, {126, 17}} + + + YES + + 68157504 + 272630784 + Code style issues: + + + + + + NO + 1 + + + {{1, 1}, {357, 65}} + + + _NS:11 + + + {{17, 16}, {359, 81}} + + + _NS:9 + {0, 0} + + 67108864 + 0 + Code style + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + - {431, 348} - - + {393, 357} - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} xcc-prefs YES @@ -988,7 +1010,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - + 256 @@ -1000,7 +1022,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {{0, 8}, {716, 654}} - YES 1 @@ -1010,11 +1031,9 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA {716, 662} - - - {{0, 0}, {2560, 1418}} + {{0, 0}, {1440, 878}} {10000000000000, 10000000000000} YES @@ -1239,30 +1258,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 849 - - - save: - - - - 854 - - - - save: - - - - 3Np-aC-Jh1 - - - - save: - - - - 792 - save: @@ -1271,6 +1266,30 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 821 + + + save: + + + + Buu-6t-pce + + + + save: + + + + XTE-kN-O4x + + + + save: + + + + 6Xe-Bt-eXK + openXcodeProject: @@ -1537,26 +1556,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 762 - - - values.XCCAutoOpenErrorsPanelOnWarnings - - - - - - value: values.XCCAutoOpenErrorsPanelOnWarnings - value - values.XCCAutoOpenErrorsPanelOnWarnings - - NSValidatesImmediately - - - 2 - - - 823 - values.maxRecentProjects @@ -1629,26 +1628,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 851 - - - values.showProcessingNotices - - - - - - value: values.showProcessingNotices - value - values.showProcessingNotices - - NSValidatesImmediately - - - 2 - - - 856 - projectPath.length @@ -1717,6 +1696,42 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA aRN-Fd-MPN + + + value: values.XCCAutoOpenErrorsPanelOnCappLint + + + + + + value: values.XCCAutoOpenErrorsPanelOnCappLint + value + values.XCCAutoOpenErrorsPanelOnCappLint + + NSValidatesImmediately + + + 2 + + + du5-hg-MfC + + + + enabled: values.usesCappLintForEveryNotifications + + + + + + enabled: values.usesCappLintForEveryNotifications + enabled + values.usesCappLintForEveryNotifications + 2 + + + J8w-G4-Pzy + projectPath.length @@ -1735,15 +1750,15 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - values.usesCappLintForEveryNotifications - + value: values.XCCAutoShowNotificationOnCappLint + - + - value: values.usesCappLintForEveryNotifications + value: values.XCCAutoShowNotificationOnCappLint value - values.usesCappLintForEveryNotifications + values.XCCAutoShowNotificationOnCappLint NSValidatesImmediately @@ -1751,7 +1766,43 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 2 - JL3-wG-7ik + uwx-aq-p86 + + + + enabled: values.usesCappLintForEveryNotifications + + + + + + enabled: values.usesCappLintForEveryNotifications + enabled + values.usesCappLintForEveryNotifications + 2 + + + 5nL-79-ZXW + + + + value: values.XCCAutoOpenShowNotificationErrors + + + + + + value: values.XCCAutoOpenShowNotificationErrors + value + values.XCCAutoOpenShowNotificationErrors + + NSValidatesImmediately + + + 2 + + + j0c-o6-KBW @@ -1798,12 +1849,12 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - + @@ -2042,6 +2093,7 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + @@ -2154,53 +2206,12 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA 848 - - - - + + - - 843 - - - - - - - - 844 - - - - - RPS-9d-lvV - - - - - - - - TXI-VH-VwH - - - - - 789 - - - - - - - - 790 - - - 819 @@ -2227,27 +2238,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA - - 543 - - - - - - - - 553 - - - - - - - - 857 - - - 544 @@ -2286,6 +2276,89 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA + + 543 + + + + + + + + 553 + + + + + + + + 857 + + + + + iiD-Nj-M6o + + + + + + + + BYW-Rk-rZ4 + + + + + qFm-3c-NH7 + + + + + + + + + + 2M5-3o-Zwl + + + + + + + + sZm-jR-Tet + + + + + QAd-SJ-XIV + + + + + + + + ptR-WM-qet + + + + + cwr-C6-dkY + + + + + + + + dTw-kK-6IJ + + + @@ -2301,6 +2374,18 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2418,20 +2503,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - When an error or warning occurs, automatically open the Errors & Warnings panel - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -2494,20 +2565,6 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin @@ -2521,191 +2578,54 @@ dG9pbmUgTWVyY2FkYWwKICAgIGFudG9pbmUubWVyY2FkYWxAZ21haWwuY29tA com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + ToolTip ToolTip - - If this is checked, when a Cappuccino project is opened, the file who is currently processing will be checked with capp_lint + + When an error or warning occurs, automatically open the Errors & Warnings panel - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + - - - - AppController - NSObject - - id - id - id - id - id - id - - - - createProject: - id - - - loadProject: - id - - - openAbout: - id - - - openHelp: - id - - - openPreferences: - id - - - showInFinder: - id - - - - NSPanel - PDFView - NSWindow - NSMenuItem - NSMenuItem - NSMenuItem - NSUserDefaultsController - NSWindow - NSMenu - XcodeCapp - - - - aboutWindow - NSPanel - - - helpView - PDFView - - - helpWindow - NSWindow - - - menuItemHistory - NSMenuItem - - - menuItemOpenProject - NSMenuItem - - - menuItemShowInFinder - NSMenuItem - - - preferencesController - NSUserDefaultsController - - - preferencesWindow - NSWindow - - - statusMenu - NSMenu - - - xcc - XcodeCapp - - - - IBProjectSource - ./Classes/AppController.h - - - - XcodeCapp - NSObject - - id - id - id - id - id - id - - - - checkProjectWithCappLint: - id - - - clearErrors: - id - - - openErrorInEditor: - id - - - openErrorsPanel: - id - - - openXcodeProject: - id - - - synchronizeProject: - id - - - - NSArrayController - NSTableView - NSPanel - - - - errorListController - NSArrayController - - - errorTable - NSTableView - - - errorsPanel - NSPanel - - - - IBProjectSource - ./Classes/XcodeCapp.h - - - - + 0 IBCocoaFramework YES