рдЕрдХреНрд╕рд░ рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдЖрдИрдбреАрдИ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИ рдЕрдЧрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЙрдкрдХрд░рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реА рдПрдХреНрд╕рдХреЛрдб рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред
Xcode 3.0 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдкреНрд▓рдЧрдЗрди рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдиреЛрдЯ:
ColorSense-for-Xcode рдкреНрд▓рдЧрдЗрди рдХреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░, Xcode рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ Xcode рдкреНрд▓рдЧрдЗрдиреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ (~ / рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдкреЛрд░реНрдЯ / рдбреЗрд╡рд▓рдкрд░ / рд╕рд╛рдЭрд╛ / Xcode / рдкреНрд▓рдЧ-рдЗрди) рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреЛ (.xcplugin) рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд▓рдЧ-рдЗрди рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
рдПрдХ рдирдпрд╛ Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
рдкреНрд▓рдЧрдЗрди рд╕рд┐рд░реНрдл рдПрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдмрдВрдбрд▓ рд╣реИ, рдЯрд╛рдЗрдк 'рдмрдВрдбрд▓' рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ ARC рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Xcode рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд╣реА рдкреНрд▓рдЧрдЗрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд▓рдЧрдЗрди рдХрд╛ рд▓рдХреНрд╖реНрдп рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВ:
- XC4Compatible = рд╣рд╛рдБ
- XCPluginHasUI = рд╕рдВ
- XCGCReady = YES
- рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╡рд░реНрдЧ = {рдкреНрд▓рдЧрдЗрди рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо}
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрдирд╛рдПрдБ
рд╣рдо рд╕реЗрдЯрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
- рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрдорд╛рдг рдЙрддреНрдкрд╛рдж рд╕реНрдерд╛рди = $ {HOME}
- рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ = / рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд░реНрдерди / рдбреЗрд╡рд▓рдкрд░ / рд╕рд╛рдЭрд╛ / Xcode / рдкреНрд▓рдЧ-рдЗрди
- рддреИрдирд╛рддреА рд╕реНрдерд╛рди = рд╣рд╛рдБ
- рдЖрд╡рд░рдг рд╡рд┐рд╕реНрддрд╛рд░ = xcplugin
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- GCC_ENABLE_OBJC_GC = рд╕рдорд░реНрдерд┐рдд
- GCC_MODEL_TUNING = G5
рд╣рдордиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░рд╛ рдкреНрд▓рдЧрдЗрди рдХрд╣рд╛рдБ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рджреБрдЦреА рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж Xcode рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓реЗрдЦрди
рдЪрд▓реЛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╣ рдирд╛рдо рдХрд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╡рд░реНрдЧ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдорд┐рд▓рд╛ рдерд╛ред рдЬрдм Xcode рдкреНрд▓рдЧрдЗрди рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ
+ (рд╢реВрдиреНрдп) pluginDidLoad: (NSBundle *) рдкреНрд▓рдЧрдЗрди рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкреНрд▓рдЧрдЗрди рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд▓рдЧрдЗрди рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИ) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+ (void) pluginDidLoad: (NSBundle*) plugin { static id sharedPlugin = nil; static dispatch_once_t once; dispatch_once(&once, ^{ sharedPlugin = [[self alloc] init]; }); } - (id)init { if (self = [super init]) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidFinishLaunching:) name:NSApplicationDidFinishLaunchingNotification object:nil]; } return self; }
ApplicationDidFinishLaunching рд╣реИрдВрдбрд▓рд░ рдореЗрдВ: рд╣рдо рд╕реАрдзреЗ рдкреНрд▓рдЧрдЗрди рд▓реЙрдЬрд┐рдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕реВрдЪрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВрдЧреЗ, рдФрд░ рд╕рдВрдкрд╛рджрди рдореЗрдиреВ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЖрдЗрдЯрдо рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
- (void)applicationDidFinishLaunching:(NSNotification*)notification { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(selectionDidChange:) name:NSTextViewDidChangeSelectionNotification object:nil]; NSMenuItem* editMenuItem = [[NSApp mainMenu] itemWithTitle:@"Edit"]; if (editMenuItem) { [[editMenuItem submenu] addItem:[NSMenuItem separatorItem]]; NSMenuItem* newMenuItem = [[NSMenuItem alloc] initWithTitle:@"Show autoresizing masks" action:@selector(toggleMasks:) keyEquivalent:@"m"]; [newMenuItem setTarget:self]; [newMenuItem setKeyEquivalentModifierMask:NSAlternateKeyMask]; [[editMenuItem submenu] addItem:newMenuItem]; [newMenuItem release]; } }
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдХрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ:
- (void)selectionDidChange:(NSNotification*)notification { if ([[notification object] isKindOfClass:[NSTextView class]]) { NSTextView* textView = (NSTextView *)[notification object]; if (![[NSUserDefaults standardUserDefaults] boolForKey:kDLShowSizingsPreferencesKey]) { return; } NSArray* selectedRanges = [textView selectedRanges]; if (selectedRanges.count >= 1) { NSRange selectedRange = [[selectedRanges objectAtIndex:0] rangeValue]; NSString *text = textView.textStorage.string; NSRange lineRange = [text lineRangeForRange:selectedRange]; NSString *line = [text substringWithRange:lineRange]; } NSAlert *alert = [[[NSAlert alloc] init] autorelease]; [alert setMessageText:line]; [alert runModal]; }
рд╕рдмрд╕реЗ рд╕рд░рд▓, рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдкреНрд▓рдЧрдЗрди рдирд╣реАрдВ рддреИрдпрд╛рд░ рд╣реИ!
рдЯрд┐рдкреНрдкрдгреА
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдПрдХ рдкреНрд▓рдЧрдЗрди рдбреАрдмрдЧ рдХрд░рдирд╛ рдХреЗрд╡рд▓ Xcode рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ (рдЬрдм рдореИрдВрдиреЗ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрд╛ рдерд╛, рдореИрдВрдиреЗ рд╣рд░ рдЬрдЧрд╣ NSAlert рдбрд╛рд▓ рджрд┐рдпрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА)ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рджреГрд╢реНрдп рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬреА рдЧрдИ рд╣реИрдВ, рдЙрд╕реА рдЪрд╛рд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд▓реЙрдЧ рдпрд╛ рдЕрд▓рд░реНрдЯ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдкреНрд▓рдЧрдЗрди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Xcode рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреЛ '~ / рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдкреЛрд░реНрдЯ / рдбреЗрд╡рд▓рдкрд░ / рд╕рд╛рдЭрд╛ / Xcode / рдкреНрд▓рдЧ-рдЗрди' рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рдЬреЛ рдореИрдВрдиреЗ рд▓рд┐рдЦреА рдереА, рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкреНрд▓рдЧрдЗрди рдерд╛, рдЬреЛ UIView рдХреЗ рд▓рд┐рдП рдСрдЯреЛ-рд╕рд╛рдЗрдЬрд╝ рдорд╛рд╕реНрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рдЧреАрдереВрдм рдкрд░ рд╕реНрд░реЛрдд
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!