Markus Lang
Постоялец
- Регистрация
- 8 Июл 2008
- Сообщения
- 267
- Реакции
- 170
- Автор темы
- #1
В этой части я расскажу про еще одно интересное средство разработки приложений для Mac OS X - скриптового языка Apple Script.
Apple Script разрабатывался чтобы применяться конечными пользователями, а не программистами, и позволить им контролировать приложения и документы, с которыми они работают. Например, с помощью Apple Script можно открыть фотографию в редакторе изображений, обрезать до нужного размера, записать ссылку на фото в текстовый файл и т.п.
В отличии от того, как пользователь через GUI взаимодействует с приложением, например впечатывает информацию в текстовые поля приложения для работы с базами данных, AppleScript работает совсем иначе, скрипт использует внутреннюю объектную модель приложения, тем самым внося значения в саму базу данных. Это означает, что во время работы скрипта приложение даже не обязательно показывать. Естественно такая модель работы требует того, чтобы ваше приложение было написано с поддержкой Apple Script.
Каждое приложение, которое понимает Apple Script, публикует поддерживаемые комманды в Apple Event словаре, который используется, чтобы определить допустимые комманды.
Язык, очень похожий на натуральный
Движок Apple Script комбинирует глаголы и существительные, чтобы выполнить действия. Например, чтобы напечатать документ, страницу из документа или опеределенный фрагмент, вместо вызова функций printPage, printDocument, printRange, мы берем глагол print и добавляем нужное существительное:
Чтобы работать с определенным приложением, используется слово "tell"
Предыдущее выражение можно записать и в одну строку
Использовать иерархичность можно следующим образом:
при исполнии покажет диалоговое окно с запросом ввода кол-ва дюймов, потом это значение конвертируется в пиксели и результат показывается в следующем окне.
Также скрипт можно сохранить чтобы в дальнейшем использовать как полноценное приложение. Обработчик события запуска должен находиться внутри следующей конструкции:
В принципе, его можно и не писать, тогда при запуске обработка скрипта начнется с первой строки в файле.
Если бросить на файл со скриптом пару других файлов, то при запуске будет использован следующий обработчик:
Средства для написания скриптов лежат в /Applications/AppleScript
В качестве редактора/интерпритатора исаользуется ScriptEditor.app
Чтобы открыть Apple Event словарь надо в меню Script Editor нажать File=> Open Dictionary, откроется окно со списком приложений
выбираем нужное(например iTunes) и клацаем OK. Открылось окно с описанием комманд для нужного нам приложения
А теперь напишем простенькое Cocoa приложение, с помощью которого можно контроллировать iTunes
Открываем XCode, File=>New Project, Cocoa Application => в Project Name пишем iTunes_Controller. Добавляем новый Objective-C class "controller". В файле controller.h пишем
В принципе, в этом коде ничего секретно-военного нету. Просто пишем класс, с помощью которого и будем контролировать iTunes. Функции *Click - это обработчики нажатия по соответствующим кнопочкам на форме. А executeAppleScript
NSString*)sctript - функция, которая будет исполнять скрипт в параметре script.
А теперь клацаем по MainMenu.nib и попадаем в InterfaceBuilder. Добавляем в окно MainMenu.nib новый NSObject и назначем ему класс controller:
Затем разместим на форме четыре кнопки с надписями "next","play","pause","previous" и соеденим их с соотв. обработчиками из класса controller:
Сохраняем все и возвращаемся в XCode. В файле controller.m пишем следующее:
- (void) executeAppleScript
NSString*)script {
@try {
NSAppleScript *ascript = [[NSAppleScript alloc] initWithSource:script];
[ascript executeAndReturnError:nil];
[ascript release];
}
@catch (NSException * e) {
NSLog(@"exception:%@",e);
}
}
- (void) nextClick
id)sender {
[self executeAppleScript
"tell application \"iTunes\" \n next track \n end tell"];
}
- (void) prevClick
id)sender {
[self executeAppleScript
"tell application \"iTunes\" \n previous track \n end tell"];
}
- (void) playClick
id)sender {
[self executeAppleScript
"tell application \"iTunes\" \n play \n end tell"];
}
- (void) pauseClick
id)sender {
[self executeAppleScript
"tell application \"iTunes\" \n pause \n end tell"];
}
В принципе, я думаю, что этого достаточно чтобы получить общее представление о Apple Script и попробавть что-нибудь на нем написать
Apple Script разрабатывался чтобы применяться конечными пользователями, а не программистами, и позволить им контролировать приложения и документы, с которыми они работают. Например, с помощью Apple Script можно открыть фотографию в редакторе изображений, обрезать до нужного размера, записать ссылку на фото в текстовый файл и т.п.
В отличии от того, как пользователь через GUI взаимодействует с приложением, например впечатывает информацию в текстовые поля приложения для работы с базами данных, AppleScript работает совсем иначе, скрипт использует внутреннюю объектную модель приложения, тем самым внося значения в саму базу данных. Это означает, что во время работы скрипта приложение даже не обязательно показывать. Естественно такая модель работы требует того, чтобы ваше приложение было написано с поддержкой Apple Script.
Каждое приложение, которое понимает Apple Script, публикует поддерживаемые комманды в Apple Event словаре, который используется, чтобы определить допустимые комманды.
Язык, очень похожий на натуральный
Движок Apple Script комбинирует глаголы и существительные, чтобы выполнить действия. Например, чтобы напечатать документ, страницу из документа или опеределенный фрагмент, вместо вызова функций printPage, printDocument, printRange, мы берем глагол print и добавляем нужное существительное:
print page 1
print document 2
print pages 1 thru 5 of document 2
Чтобы работать с определенным приложением, используется слово "tell"
tell application "iTunes"
playpause
end tell
Предыдущее выражение можно записать и в одну строку
Для событий из "Core Suite" (активировать, открыть, открыть заново, закрыть, напечатать, выйти) можно использовать следующии инструкции:tell application "Microsoft Word" to quit
Конструкции могут быть вложенными:quit application "iPhoto"
tell application "QuarkXPress"
tell document 1
tell page 2
tell text box 1
set word 5 to "Apple"
end tell
end tell
end tell
end tell
Использовать иерархичность можно следующим образом:
Но возможности Apple не ограничиваются управлением других приложений. С его помощью можно создать нормальное Cocoa приложение с графическим интерфейсом и т.п. Например следующий код:pixel 7 of row 3 of TIFF image "my bitmap"
set pix to 72
set answer to text returned of (display dialog "Enter in the number of inches" default answer "1")
display dialog answer & "in = " & (answer * pix) & "px"
при исполнии покажет диалоговое окно с запросом ввода кол-ва дюймов, потом это значение конвертируется в пиксели и результат показывается в следующем окне.
Также скрипт можно сохранить чтобы в дальнейшем использовать как полноценное приложение. Обработчик события запуска должен находиться внутри следующей конструкции:
on run
— код обработчика
end run
В принципе, его можно и не писать, тогда при запуске обработка скрипта начнется с первой строки в файле.
Если бросить на файл со скриптом пару других файлов, то при запуске будет использован следующий обработчик:
on open theItems
— что-нибудь делаем с этими самыми theItems
end open
Средства для написания скриптов лежат в /Applications/AppleScript

В качестве редактора/интерпритатора исаользуется ScriptEditor.app

Чтобы открыть Apple Event словарь надо в меню Script Editor нажать File=> Open Dictionary, откроется окно со списком приложений

выбираем нужное(например iTunes) и клацаем OK. Открылось окно с описанием комманд для нужного нам приложения

А теперь напишем простенькое Cocoa приложение, с помощью которого можно контроллировать iTunes
Открываем XCode, File=>New Project, Cocoa Application => в Project Name пишем iTunes_Controller. Добавляем новый Objective-C class "controller". В файле controller.h пишем
#import
@interface controller : NSObject {
}
- (IBAction) nextClickid)sender;
- (IBAction) prevClickid)sender;
- (IBAction) pauseClickid)sender;
- (IBAction) playClickid)sender;
- (void) executeAppleScriptNSString*)sctript;
@end
В принципе, в этом коде ничего секретно-военного нету. Просто пишем класс, с помощью которого и будем контролировать iTunes. Функции *Click - это обработчики нажатия по соответствующим кнопочкам на форме. А executeAppleScript

А теперь клацаем по MainMenu.nib и попадаем в InterfaceBuilder. Добавляем в окно MainMenu.nib новый NSObject и назначем ему класс controller:

Затем разместим на форме четыре кнопки с надписями "next","play","pause","previous" и соеденим их с соотв. обработчиками из класса controller:

Сохраняем все и возвращаемся в XCode. В файле controller.m пишем следующее:
- (void) executeAppleScript

@try {
NSAppleScript *ascript = [[NSAppleScript alloc] initWithSource:script];
[ascript executeAndReturnError:nil];
[ascript release];
}
@catch (NSException * e) {
NSLog(@"exception:%@",e);
}
}
- (void) nextClick

[self executeAppleScript

}
- (void) prevClick

[self executeAppleScript

}
- (void) playClick

[self executeAppleScript

}
- (void) pauseClick

[self executeAppleScript

}
В принципе, я думаю, что этого достаточно чтобы получить общее представление о Apple Script и попробавть что-нибудь на нем написать