"рдореБрдЭреЗ рдЦрд╛рдУ" ... рдирд╣реАрдВ, рдРрд╕рд╛ рдирд╣реАрдВ ... "рдореЗрд░реЗ рдкреАрдЫреЗ рдЖрдУ!"

рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдореЗрдВ рдЫреЛрдЯреА рджрдмрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЫреЛрдЯреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдирд┐рдЬреА рддреМрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ "рдмрдВрдж" рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛ, рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд░рд┐рд▓реЗрдЯрд░" )ред рдЗрд╕ рдмрд╛рд░ рднреА рдРрд╕рд╛ рд╣реА рд╣реБрдЖ ...

рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдЬрдм рдбреЙрдХ рд╣рдореЗрд╢рд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЫрд┐рдкрд╛рдирд╛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рддрд╛рдХрд┐ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдлрд┐рдЯ рд╣реЛ рдЬрд╛рдПред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдерд╛ред рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк AppleScript рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: "рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ", "рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ", "рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ", "рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИ", рдЖрджрд┐ред




рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдмрд╛рдБрдЯреВрдБрдЧрд╛ред рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╛ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред рд╢реБрд░реБрдЖрддреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ - рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдпреЛрдВ рд╕реЗ рдХрдИ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓рд┐рдВрдХ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ 10.6+ рдХреЗ рд▓рд┐рдП) (18.51 рдкрд░ рдореИрдВрдиреЗ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рдмрдЧ рддрдп рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕рд╣рд╛рдпрдХ рдХреЛ рд╕реВрдЪреА рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдХрд╛рд░реАрдЧрд░реЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рд▓рд╛рдЧрдд ...) ред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ AppleScript рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреМрд╢рд▓ рд╣реИ)ред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди "рд╕рд┐рд╕реНрдЯрдо рд╡рд░реАрдпрддрд╛рдПрдБ" рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдирд▓ рд╣реИред рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдЙрд╕ рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рд╕рд┐рд╕реНрдЯрдо рд╡рд░реАрдпрддрд╛рдПрдБ" рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреИрдирд▓ "рдлреЙрд▓реЛ рдореА" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдмрд╛рдИрдВ рдУрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдФрд░ рдЪрдпрдирд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╕рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВред

рдЬрдм рдЖрдк "+" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА (рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ - рдмрдВрдбрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рдЦреБрд▓реЗрдЧреА, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред


рдЬреЛ рдХреБрдЫ рднреА рд╢реЗрд╖ рд╣реИ рд╡рд╣ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЙрдХ рдСрдЯреЛ-рдЫрд┐рдкрд╛рдиреЗ рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
tell application "System Events" to set the autohide of the dock preferences to true

рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдПрдВ:
tell application "iTunes" to activate

рдпрд╛ рдХреБрдЫ рдХрдВрд╕реЛрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
do shell script "тАж"

рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рд╣реИрдВ - AppleScript рдмрд╣реБрдд рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ред рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо - "рдореЗрд░рд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ (рд╕рд╣рд╛рдпрдХ)", рдЬреЛ рд╕реНрд╡рддрдГ рд╣реА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдПрдХреНрд╕рдХреНрдпреВрдЯ рдореА" рдкреИрдирд▓ рдХреЗ рдирд╛рдо рдкрд░ рдмрд╕ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ (рдпрд╛ Ctrl + рдХреНрд▓рд┐рдХ / рдЯрдЪрдкреИрдб рдкрд░) рдХрд░реЗрдВ рдФрд░ "рдбрд┐рд▓реАрдЯ рдкреИрдирд▓" рдЪреБрдиреЗрдВред


BEGINNERS рдХреЗ рд▓рд┐рдП

рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдЬреАрдердм рдкрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ - рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ рдФрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпрдХреНрд░рдоред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛)ред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рджреЛ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

"рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдирд▓ рдмрдирд╛рдирд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред Xcode рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдкреНрд▓рдЧ-рдЗрди> рд╡рд░реАрдпрддрд╛ рдлрд▓рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред рдЬрд┐рд╕рдореЗрдВ NSPreferencePane рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрдЧ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (xib) рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рд╣реА рдЬреЛрдбрд╝реА рдЬрд╛ рдЪреБрдХреА рд╣реИред рд╣рд░ рдХреЛрдИ рдЦреБрдж рдХреЛ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡рд░реАрдпрддрд╛ рдлрд▓рдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ "рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕" рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдмрдВрдбрд▓ рд╕реЗ рдмрдВрдзреЗ рд╕рднреА рддрд░реАрдХреЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ (рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рдмрдВрдбрд▓ "рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ" рд╣реИрдВ)ред

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
NSLocalizedString ( NSString * key, NSString * comment )

рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
NSLocalizedStringFromTableInBundle ( NSString * key, NSString * tableName, NSBundle * bundle, NSString * comment )

рдпрд╛ рд╣рдо NSImage рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+ ( id ) imageNamed : ( NSString * ) name

рдЖрдкрдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- ( id ) initWithContentsOfFile : ( NSString * ) filename

рдЖрджрд┐

рдХреНрд▓рд╛рд╕ NSPreferencePane рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ:
- ( NSBundle * ) bundle

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╡рд╢реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реВрдЪреА рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреЛ рдмрдЯрди "+" рдФрд░ "-" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╣рдЯрд╛рдПрдВ рдмрдЯрди рдХрд╛ рдкреНрд░рд╛рд░рдВрдн рд╕рд░рд▓ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ:
removeButton = [ [ NSButton alloc ] initWithFrame : NSMakeRect ( 43 , 19 , 22 , 22 ) ] ;<br/>
[ removeButton setButtonType : NSMomentaryChangeButton ] ;<br/>
[ removeButton setImage : buttonImage ] ;<br/>
[ removeButton setImagePosition : NSImageOnly ] ;<br/>
[ removeButton setBordered : NO ] ;<br/>
[ removeButton setTarget : self ] ;<br/>
[ removeButton setAction : @selector ( removeButtonAction : ) ] ;<br/>
[ [ self mainView ] addSubview : removeButton ] ;

рд▓реЗрдХрд┐рди рдРрдб рдмрдЯрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП NSPopUpButton рдФрд░ NSPopUpButtonCell рдХреЗ рджреЛ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, NSPopUpButton рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╡рд╛рд▓реЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдирдЧреНрди рд░реВрдк рдореЗрдВ, рдпрд╣ рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрдкрдХреЛ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рддрд╕реНрд╡реАрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдЯрди рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рд╕реНрдерд┐рд░ рдЪрд┐рддреНрд░ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рддрд░рдл рд╣реИрдВ) - рд╣рдо рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрд╛рдИрдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред NSPopUpButtonCellред рджреВрд╕рд░реЗ, NSPopUpButton рдЖрдкрдХреЛ рдЙрд╕ рд╕рдордп рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЧрдП рдореЗрдиреВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдмрдЯрди рдХреЛ рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд╕рдордп рд╣рдорд╛рд░рд╛ рдореЗрдиреВ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдП) - рд╣рдо NSPopUpButton рдЙрдкрд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдмрдЯрди рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ-рд╕реЗ-рдПрдХ рдЖрдХрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреЙрдкрдЕрдк рдкреЗрдкрд░ рдмрдирд╛рдПрдВ:
@interface PopUpCell : NSPopUpButtonCell <br/>
{ <br/>
NSButtonCell * buttonCell;<br/>
} <br/>
<br/>
- ( id ) initWithimage : ( NSImage * ) image;<br/>
<br/>
@end <br/>
<br/>
тАж<br/>
<br/>
@implementation PopUpCell<br/>
<br/>
- ( id ) initWithimage : ( NSImage * ) image<br/>
{ <br/>
self = [ super initTextCell : @ "" pullsDown : YES ] ;<br/>
<br/>
buttonCell = [ [ NSButtonCell alloc ] initImageCell : image ] ;<br/>
[ buttonCell setButtonType : NSPushOnPushOffButton ] ;<br/>
[ buttonCell setImagePosition : NSImageOnly ] ;<br/>
[ buttonCell setImageDimsWhenDisabled : YES ] ;<br/>
[ buttonCell setBordered : NO ] ;<br/>
<br/>
return self;<br/>
} <br/>
<br/>
...<br/>
<br/>
- ( void ) drawWithFrame : ( NSRect ) cellFrame inView : ( NSView * ) controlView<br/>
{ <br/>
[ buttonCell drawWithFrame : cellFrame inView : controlView ] ;<br/>
} <br/>
<br/>
- ( void ) highlight : ( BOOL ) flag withFrame : ( NSRect ) cellFrame inView : ( NSView * ) controlView<br/>
{ <br/>
[ buttonCell highlight : flag withFrame : cellFrame inView : controlView ] ;<br/>
} <br/>
<br/>
@end

рдЗрд╕ рд╕рд╛рд░реЗ рдХреЛрдб рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдпрд╣ рд╕рд░рд▓ рд╣реИ - рд╣рдо NSButtonCell рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ NSPopUpButtonCell рдХреЗ рдмрдЬрд╛рдп рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА рдХрд╛рд░реНрдпрдХреНрд░рдо NSPopUpButtonCell рдХреЗ рдмрдЬрд╛рдп рдПрдХ NSButtonCell (рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗ рдПрдХ рд╕реЗ рдореЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рдЦреАрдВрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдпрд╣ NSPopUpButton рд╣реИред

рдЕрдм рдореЗрдиреВ ... рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдиреВ рдХреЗ рд╕рд╛рде, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ - NSPopUpButton рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╣рдореЗрдВ рдЙрд╕ рд╕рдордп рдПрдХ рдореЗрдиреВ рджреЗрдЧрд╛ рдЬрдм рдмрд╛рдИрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

NSPopUpButton рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдмрдирд╛рдПрдБ:
@protocol PopUpDelegate <NSObject><br/>
@optional<br/>
- ( NSMenu * ) menuForPopUp;<br/>
@end <br/>
<br/>
<br/>
@interface PopUpButton : NSPopUpButton <br/>
{ <br/>
id<PopUpDelegate> delegate; <br/>
} <br/>
<br/>
@property ( assign ) id delegate;<br/>
<br/>
@end <br/>

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХреА, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ:
- ( NSMenu * ) menuForPopUp<br/>

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
@implementation PopUpButton<br/>
<br/>
@synthesize delegate;<br/>
<br/>
- ( void ) mouseDown : ( NSEvent * ) event<br/>
{ <br/>
if ( [ delegate respondsToSelector : @selector ( menuForPopUp ) ] ) <br/>
{ <br/>
[ self setMenu : [ delegate menuForPopUp ] ] ;<br/>
} <br/>
<br/>
[ super mouseDown : event ] ;<br/>
} <br/>
<br/>
@end <br/>


рдЬрдм рд╣рдо NSPopUpButton рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдиреВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкреИрдирд▓ рдореЗрдВ рдЕрдкрдирд╛ "+" рдмрдЯрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
addButton = [ [ PopUpButton alloc ] initWithFrame : NSMakeRect ( 20 , 19 , 23 , 22 ) pullsDown : YES ] ;<br/>
addButton.delegate = self;<br/>
[ addButton setCell : [ [ [ PopUpCell alloc ] initWithimage : buttonImage ] autorelease ] ] ;<br/>
[ addButton setMenu : [ self menuForPopUp ] ] ;<br/>
[ [ self mainView ] addSubview : addButton ] ;

"AddButton.delegate = self" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╣рдордиреЗ рдЕрдкрдиреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЛ AddButton рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд┐рдпреБрдХреНрдд рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
- ( NSMenu * ) menuForPopUp<br/>
{ <br/>
...<br/>
}

рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВред

рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

NSWorkspace рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ:
- ( NSArray * ) runningApplications

рдЬреЛ рд╣рдореЗрдВ рд╕рднреА рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрдЧрд╛ (рдЙрди рдкрд░ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде: рдирд╛рдо, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдЖрдЗрдХрди, рдЖрджрд┐)ред
NSArray * apps = [ [ NSWorkspace sharedWorkspace ] runningApplications ] ;

рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ, рдРрдб рдмрдЯрди рдХреЗ рд▓рд┐рдП рдРрдкреНрд╕ рдмрдиреЗрдВрдЧреЗ (рд╕реЛрд░реНрд╕ рдХреЛрдб рджреЗрдЦреЗрдВ)ред

рд╣рдорд╛рд░реА NSTableView рд╡рд╕реНрддреБ рдПрдХ рддрд╕реНрд╡реАрд░, рд╢реАрд░реНрд╖рдХ рдФрд░ рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рдорд╛рдирдХ рд╕реЗрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

AppCell рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
@interface AppCell : NSTextFieldCell <br/>
{ <br/>
NSImage * image;<br/>
NSString * title;<br/>
NSString * subtitle;<br/>
} <br/>
...<br/>
@end <br/>

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╕реЗрд▓ рдкреНрд░рддрд┐рдкрд╛рджрди рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реИ:
- ( void ) drawInteriorWithFrame : ( NSRect ) inCellFrame inView : ( NSView * ) inView<br/>
{ <br/>
// image <br/>
// title <br/>
// subtitle <br/>
тАж<br/>
} <br/>

рд╕реЗрд▓ рдХреНрд▓рд╛рд╕ рддреИрдпрд╛рд░ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ NSTableView рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдЗрд╕рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред

1)ред рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЫреЛрдЯреА рд╣реИ, рддреЛ рдЖрдк NSTableView рдореЗрдВ рдбреЗрд▓рд┐рдЧреЗрдЯ рд╡рд┐рдзрд┐ (рдЬреЛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рд╡рд░реНрдЧ NSPreferencePane рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- ( NSCell * ) tableView : ( NSTableView * ) tableView dataCellForTableColumn : ( NSTableColumn * ) tableColumn row : ( NSInteger ) row<br/>
{ <br/>
AppCell * cell = [ [ [ AppCell alloc ] init ] autorelease ] ;<br/>
[ cell setEditable : NO ] ;<br/>
cell.title = [ [ tableDataSource objectAtIndex : row ] objectForKey : @ "name" ] ;<br/>
cell.subtitle = [ [ tableDataSource objectAtIndex : row ] objectForKey : @ "ID" ] ;<br/>
cell.image = [ [ tableDataSource objectAtIndex : row ] objectForKey : @ "icon" ] ;<br/>
<br/>
return cell;<br/>
}

2)ред рдпрджрд┐ рдХрдИ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрдкреВрд░реНрдг рд╕реНрддрдВрдн рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕реЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
NSTableColumn * рдХреЙрд▓рдо = [ [ appTable tableColumns ] objectAtIndex : 0 ] ;
[ рдХреЙрд▓рдо рд╕реЗрдЯрдбреЗрдЯрд╛рд╕реЗрд▓ : [ [ [ рдПрдкреЗрд▓ рдЖрд╡рдВрдЯрди ] init ] рдСрдЯреЛрд░реЗрд▓рд┐рдЬ ] ] ;

рдФрд░ NSTableView рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рдиреАрдЪреЗ рд░рдЦреЗрдВ:
- ( void ) tableView : ( NSTableView * ) aTableView willDisplayCell : ( id ) aCell forTableColumn : ( NSTableColumn * ) aTableColumn row : ( NSInteger ) rowIndex<br/>
{ <br/>
AppCell * cell = ( AppCell * ) aCell;<br/>
[ cell setEditable : NO ] ;<br/>
cell.title = [ [ tableDataSource objectAtIndex : row ] objectForKey : @ "name" ] ;<br/>
cell.subtitle = [ [ tableDataSource objectAtIndex : row ] objectForKey : @ "ID" ] ;<br/>
cell.image = [ [ tableDataSource objectAtIndex : row ] objectForKey : @ "icon" ] ;<br/>
}


рдбреЗрдЯрд╛ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЖрдЗрдХрди рдХреА рд╕реВрдЪреА рд╡рд╛рд▓реА рдПрдХ рдлрд╝рд╛рдЗрд▓) рд╕рдВрдмрдВрдзрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдорд░реНрдерди рдлрд╝реЛрд▓реНрдбрд░ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ (рдФрд░) рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ:
NSArray * paths = NSSearchPathForDirectoriesInDomains ( NSApplicationSupportDirectory, NSUserDomainMask, YES ) ; <br/>
NSString * appSupportPath = [ paths objectAtIndex : 0 ] ;<br/>
NSString * prefDir = [ appSupportPath stringByAppendingPathComponent : @ "info.yuriev.OnAppBehaviour" ] ;

рд╣рдо рдкреАрдПрдирдЬреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдЗрдХрди рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред NSImage рд╕реЗ PNG рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ (рд╕рдмрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред NSImage рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
@implementation NSImage ( PNGExport ) <br/>
<br/>
- ( NSData * ) PNGData<br/>
{ <br/>
[ self lockFocus ] ;<br/>
NSBitmapImageRep * rep = [ [ NSBitmapImageRep alloc ] initWithFocusedViewRect : NSMakeRect ( 0 , 0 , [ self size ] .width, [ self size ] .height ) ] ;<br/>
[ self unlockFocus ] ;<br/>
<br/>
NSData * PNGData = [ rep representationUsingType : NSPNGFileType properties : nil ] ;<br/>
[ rep release ] ;<br/>
<br/>
return PNGData;<br/>
} <br/>
<br/>
@end

рдЬрдм рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЛрдИ рдХрдХреНрд╖ рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдбреЗрдЯрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрджрд▓рдиреЗ рдХреЗ 3 рд╕реЗрдХрдВрдб рдмрд╛рджред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо NSTextView рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд░реЗрдВрдЧреЗ:
- ( void ) textDidChange : ( NSNotification * ) aNotification<br/>
{ <br/>
[ NSObject cancelPreviousPerformRequestsWithTarget : self ] ;<br/>
[ self performSelector : @selector ( saveCurrentData ) withObject : nil afterDelay : 3.0 ] ;<br/>
<br/>
saved = NO ;<br/>
}

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдИ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ 3 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЗрд╕ рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдкрд┐рдЫрд▓рд╛ рдмрдЪрд╛ рд╣реБрдЖ рдЕрдиреБрд░реЛрдз рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕рдорд╛рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЦреЛрдЬ (рддрд╛рдХрд┐ рдЦреЛрдЬ рд╕рдВрдкрд╛рджрди рдХреЗ рдЕрдВрдд рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╣реА рдХрд╛рдо рдХрд░реЗ)ред

рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рд╣рд╛рдпрдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
NSString * observedObject = @ "info.yuriev.OnAppBehaviourHelper" ;<br/>
NSDistributedNotificationCenter * center = [ NSDistributedNotificationCenter defaultCenter ] ;<br/>
[ center postNotificationName : @ "OABReloadScripts" object : observedObject userInfo : nil deliverImmediately : YES ] ;

рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ (рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ (рд╣рдорд╛рд░рд╛ рд╕рд╣рд╛рдпрдХ рдмрдВрдбрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реИ):
[ [ NSWorkspace sharedWorkspace ] launchApplicationAtURL : [ NSURL fileURLWithPath : helperPath ] options : NSWorkspaceLaunchDefault configuration : nil error : NULL ] ;

рд▓реЙрдиреНрдЪрд╕рд░реНрд╡рд┐рд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдСрдЯреЛрд╕реНрдЯрд╛рд░реНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ (рд▓реЙрдЧрд┐рди рдЖрдЗрдЯрдо) рдХреЗ рдЖрдЗрдЯрдо рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдЖрд╡рд░рдг рдмрдирд╛рдпреЗрдВрдЧреЗред LoginItems рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
@interface LoginItems : NSObject <br/>
{ <br/>
<br/>
} <br/>
<br/>
+ ( void ) addApplication : ( NSString * ) path;<br/>
+ ( void ) removeApplication : ( NSString * ) path;<br/>
+ ( BOOL ) findApplication : ( NSString * ) path;<br/>
<br/>
@end

рдпреЗ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рд╡реЗ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрд╕ [LoginItems addApplication: path] рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛрдбрд╝ рд╡рд┐рдзрд┐ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ:
+ ( void ) addApplication : ( NSString * ) path<br/>
{ <br/>
LSSharedFileListRef loginItemsRef = LSSharedFileListCreate ( NULL , kLSSharedFileListSessionLoginItems, NULL ) ;<br/>
<br/>
if ( loginItemsRef ) <br/>
{ <br/>
LSSharedFileListItemRef itemRef = LSSharedFileListInsertItemURL ( loginItemsRef, kLSSharedFileListItemLast, NULL , NULL , ( CFURLRef ) [ NSURL fileURLWithPath : path ] , NULL , NULL ) ;<br/>
if ( itemRef ) CFRelease ( itemRef ) ;<br/>
CFRelease ( loginItemsRef ) ; <br/>
} <br/>
}

рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░рд╛ рдкреВрд░рд╛ рдкреИрдирд▓ рд╣реИред

рдЕрдм рд╕рд╣рд╛рдпрдХ ... рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣рд╛рдпрдХ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рд╣рд╛рдВ рдореЗрдВ LSBackgroundOnly рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЧреЛрджреА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлреЛрд░реНрд╕ рдХреНрд╡рд┐рдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдпрд╣ рдореЗрдиреВ рдЖрджрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╕рд╣рд╛рдпрдХ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдкреИрдирд▓ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрдиреНрд╣реЗрдВ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ NSWorkspace рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛:
NSNotificationCenter * notificationCenter = [ [ NSWorkspace sharedWorkspace ] notificationCenter ] ;<br/>
<br/>
[ notificationCenter addObserver : self selector : @selector ( didLaunchApplication : ) name : NSWorkspaceDidLaunchApplicationNotification object : nil ] ;<br/>
[ notificationCenter addObserver : self selector : @selector ( didTerminateApplication : ) name : NSWorkspaceDidTerminateApplicationNotification object : nil ] ;<br/>
[ notificationCenter addObserver : self selector : @selector ( didHideApplication : ) name : NSWorkspaceDidHideApplicationNotification object : nil ] ;<br/>
[ notificationCenter addObserver : self selector : @selector ( didUnhideApplication : ) name : NSWorkspaceDidUnhideApplicationNotification object : nil ] ;<br/>
[ notificationCenter addObserver : self selector : @selector ( didActivateApplication : ) name : NSWorkspaceDidActivateApplicationNotification object : nil ] ;<br/>
[ notificationCenter addObserver : self selector : @selector ( didDeactivateApplication : ) name : NSWorkspaceDidDeactivateApplicationNotification object : nil ] ;<br/>
<br/>
NSString * observedObject = @ "info.yuriev.OnAppBehaviourHelper" ;<br/>
NSDistributedNotificationCenter * dNotificationCenter = [ NSDistributedNotificationCenter defaultCenter ] ;<br/>
<br/>
[ dNotificationCenter addObserver : self selector : @selector ( loadPreferences : ) name : @ "OABReloadScripts" object : observedObject ] ;

рдФрд░ рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдЬреЛ AppleScript рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдЙрд╕рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ:
- ( void ) preformScriptOnApp : ( NSRunningApplication * ) app forKey : ( NSString * ) key<br/>
{ <br/>
if ( ( ! app ) || ( ! [ app bundleIdentifier ] ) ) return ;<br/>
<br/>
NSString * bundleID = [ app bundleIdentifier ] ;<br/>
<br/>
for ( int i = 0 ; i < [ preferences count ] ; i ++ ) <br/>
{ <br/>
if ( [ [ [ preferences objectAtIndex : i ] objectForKey : @ "ID" ] isEqualToString : bundleID ] ) <br/>
{ <br/>
NSString * script = [ [ preferences objectAtIndex : i ] objectForKey : key ] ;<br/>
<br/>
if ( script && ( [ script length ] > 0 ) ) <br/>
{ <br/>
NSAppleScript * AScript = [ [ NSAppleScript alloc ] initWithSource : script ] ;<br/>
[ AScript executeAndReturnError : NULL ] ;<br/>
[ AScript release ] ;<br/>
} <br/>
<br/>
break ;<br/>
} <br/>
} <br/>
<br/>
}

рдпрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрджрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░рд╛ рд▓рд╛рдн рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ - рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдкрд░ рдбреЙрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ :)ред

Source: https://habr.com/ru/post/In117248/


All Articles