Реализация действия AppleScript
Шаблон Xcode для проекта Действия AppleScript включает нескомпилированный названный файл сценария main.applescript
. Находящееся в AppleScript действие, в минимуме, должно добавить к main.applescript
код сценариев, получающий доступ к службам одного или более приложений и завершающий формулируемую цель действия. Находящееся в AppleScript действие может также полагаться на другие компоненты для своей реализации, такие как:
Другие файлы сценария AppleScript, особенно для обработки событий пользовательского интерфейса
Классы Objective C, особенно для доступа к системным ресурсам
Инструменты командной строки или сценарии оболочки
Независимо от возможных компонентов реализации находящееся в AppleScript действие всегда имеет a main.applescript
файл и невидимый экземпляр AMAppleScriptAction. Этому экземпляру принадлежит файл пера пакета действия, имеет доступ к main.applescript
, и обеспечивает, реализация по умолчанию метода раньше выполняла действие негласно, runWithInput:fromAction:error:
. (AMBundleAction, суперкласс AMAppleScriptAction, объявляет этот метод.)
Структура на Обработчике команды выполнения
Шаблон main.applescript
содержит только следующую скелетную структуру on run
обработчик команды:
on run {input, parameters} |
-- your code goes here |
return input |
end run |
Это on run
обработчик команды имеет два позиционных параметра, input
, и parameters
, input
параметр содержит (в большинстве экземпляров) вывод предыдущего действия в потоке операций; это находится почти всегда в форме списка. parameters
параметр содержит настройки, установленные в пользовательском интерфейсе действия; значения в parameters
(рекордный объект), обычно устанавливаются через механизм привязки Какао, но может также быть вручную обновлен. Шаблон кода наконец возвращается input
как его вывод; Ваше действие должно всегда возвращать что-то, как выведено, даже если это, чему дают его как ввод.
Можно использовать любую допустимую команду AppleScript, объект, ссылку, выражение и оператор в main.applescript
. Однако следующие шаги предлагаются для действия run
обработчик (не все шаги применимы к каждому виду действия).
Установите локальные переменные в значения текущих параметров. Извлечь значения из
parameters
параметр, используйте ключи, указанные для привязки. Например:set multiple_selection to |multipleSelection| of parameters
set prompt_message to |promptMessage| of parameters
set default_location to |defaultLocation| of parameters
Вы используете эти параметры для управления логикой сценария.
Установите локальную переменную для вывода к пустому списку. Например:
set output to {}
В a
repeat
цикл, выполните любые трансформации, необходимы на элементах во вводе, перечисляют и добавляют каждый преобразованный элемент к выходному списку. Например:repeat with i in input
copy (POSIX path of i) to end of filesToCopy
end repeat
Как последний шаг, возвратите выходной список.
Некоторые действия указывают в их AMAccepts
свойство, что их ввод является дополнительным (т.е. Optional
подсвойство установлено в <true/>
). Эта установка позволяет пользователям выбирать «Ignore Result From Previous Action» раскрывающийся элемент в представлении действия. Если Ваше действие сделало ввод дополнительным в AMAccepts
свойство, необходимо определить, сделал ли пользователь этот выбор путем тестирования ignoresInput
поле parameters
; если это установлено в true
. тогда Вы ничего не должны делать с входным объектом.
Можно включать подпрограммы в main.applescript
. Например, Вы могли бы хотеть записать подпрограмму для возврата локализованных строк (описанный в Локализованных строках).
Можно выполнить инструменты командной строки или сценарии оболочки для сценария. Следующий фрагмент сценария работает screencapture
инструмент:
set screencapture to "/usr/sbin/screencapture " |
-- here set up arguments of screencapture |
do shell script screencapture |
Протест об использовании do shell script
команда состоит в том, что из-за архитектуры поточной обработки это делает пользовательский интерфейс безразличным, пока сценарий оболочки не завершается, или пользователь нажимает Command-. (период).
Сценарии действия могут также вызвать методы Objective-C, которые Вы реализовали в пользовательском классе; например, следующее утверждение вызывает названный метод класса isDVDPlayerRunning
:
set dvdRunning to call method "isDVDPlayerRunning" of class "TakeScreenshot" |
Гибридные Действия обсуждают действия, содержащие соединение кода Objective C и AppleScript.
Другие сценарии AppleScript
Действие AppleScript может содержать сценарии кроме main.applescript
. Эти дополнительные сценарии обычно содержат два типа обработчиков:
AppleScript указанные Studio обработчики событий для управления пользовательским интерфейсом действия. Например, в обработчике событий можно изменить представление пользовательского интерфейса на основе выбора пользователя.
Обработчики для Automator-определенных команд
update parameters
иparameters updated
, которые присоединены к представлению действия. Эти обработчики являются альтернативой привязке Какао: можно использовать их, чтобы сохранить пользовательские настройки, установленные в параметрах действия и обновить те настройки от существующих параметров. Для больше на этих обработчиках, посмотрите Обновление Несвязанные Параметры.Обработчики для Automator-определенных команд
activated
иopened
, которые присоединены к представлению действия.on activated
когда поток операций действия активируется, и, обработчик вызываютon opened
когда пользователь добавляет действие к потоку операций, вызывается. Необходимо использоватьon opened
обработчик, когда необходимо заполнить действие с данными, которые занимают время для получения и следовательно должны вывести на экран индикатор хода выполнения.
AppleScript Studio позволяет Вам запрашивать обработчики на update parameters
, parameters updated
, activated
, и opened
команды в группе Представления Действия Automator в области AppleScript Интерфейсного инспектора Разработчика.
Как пример обработчиков событий AppleScript Studio, рассмотрите всплывающее меню для различных форматов даты. Когда пользователь выбирает элемент из этого всплывающего меню, действие изменяет пример, показывающий эффект этого изменения формата. Перечисление 1 показывает обработчик событий, вызывающийся, когда пользователь выбирает раскрывающийся элемент для сохранения снимка экрана к “Определенному Файлу”.
Перечисление 1 обработчик событий для отображения панели Save
on clicked theObject |
if name of theObject is "choose output" then |
-- Setup the properties in the 'save panel' |
tell save panel |
set title to "Choose an output file to save the screenshot to" |
set prompt to "Save" |
set required file type to "pdf" |
set treat packages as directories to false |
end tell |
if (display save panel in directory "" with file name "") is equal to 1 then |
set contents of text field "output file" of super view of theObject to path |
name of save panel |
set contents of popup button "output choice" of super view of theObject to 1 |
set enabled of button "choose output" of super view of theObject to true |
set enabled of text field "output file" of super view of theObject to true |
end if |
end if |
end clicked |
Гибридные действия
Реализация действия может содержать соединение кода Objective C и AppleScript. Обычно такие гибридные действия являются находящимися в AppleScript — другими словами, у них есть a main.applescript
файл, содержащий run
обработчик команды. Однако возможно иметь действия Objective C, использующие классы сценариев Какао загрузки (или создающие), и выполните сценарии. Посмотрите Реализацию Действия Objective C для обсуждения последнего типа гибридного действия.
Почему Вы хотели бы создать гибридное действие? Одна причина состоит в том, чтобы иметь больший контроль над пользовательским интерфейсом. Класс Objective C, соединяющийся с Набором Приложения, имеет доступ к полному спектру программируемых ресурсов для управления появлением и поведением объектов пользовательского интерфейса.
Но возможно наиболее распространенная причина гибридных действий состоит в том, чтобы получить доступ к системным ресурсам, которые сценарий не мог получить самостоятельно. Сценарии могут вызвать методы экземпляра Objective C с call method
команда, но только если целевой объект - что-то, что может адресовать сценарий (например, call method “title” of window 1
). Иногда, сценарий AppleScript Studio не имеет доступа к доступному объекту для a call method
команда. Для обхождения этого ограничения можно создать простой пользовательский класс, реализующий один или несколько методов класса. Первым параметром этих методов является цель (получатель) метода экземпляра, который обертывает метод класса. Перечисление 2 иллюстрирует этот подход.
Перечисление 2 Реализовывая пользовательский метод Objective C, который вызовет сценарий
#import "CreatePackageAction.h" |
@implementation CreatePackageAction |
+ (BOOL)writeDictionary:(NSDictionary *)dictionary withName:(NSString *)name |
{ |
return [dictionary writeToFile:name atomically:YES]; |
} |
@end |
В сценарии можно тогда использовать a call method “
m” of class “
c“ with parameters
{y,
z}
оператор для вызова этого метода (Перечисление 3).
Перечисление 3 сценарий, вызывая метод Objective C
set descriptionRecord to |
{|IFPkgDescriptionTitle|:packageTitle,|IFPkgDescriptionVersion|:packageVersion, |
|IFPkgDescriptionDescription|:description, |
|IFPkgDescriptionDeleteWarning|:deleteWarning} |
set rootName to call method "lastPathComponent" of rootFilePath |
set descriptionFilePath to temporaryItemsPath & rootName & "description.plist" |
call method "writeDictionary:withName:" of class "CreatePackageAction" with parameters |
{descriptionRecord, descriptionFilePath} |
Обновление несвязанных параметров
Свойство всех действий, включая находящиеся в AppleScript, является записью (эквивалентный в Objective C к словарю) содержащий значения, отражающие, что пользователи настроек сделали в пользовательском интерфейсе действия. Когда Automator выполняет действие AppleScript путем вызова run
обработчик команды, это передает в этих значениях в parameters
параметр. Большинство действий использует механизм привязки Какао для установки свойства параметров. Однако можно принять решение воздержаться от привязки в пользу более прямого подхода.
Приложение Automator определяет несколько команд для AppleScript Studio. Среди них update parameters
и parameters updated
, который может быть присоединен к представлению действия. update parameters
когда запись параметров действия должна быть обновлена от значений в пользовательском интерфейсе, команда отправляется. parameters updated
когда запись параметров изменяет любое из своих значений, команда отправляется.
Для указания обработчиков для этих команд в Интерфейсном Разработчике следуйте обычной процедуре AppleScript Studio:
Выберите представление действия.
В области AppleScript окна Info представьте команды при Представлении Действия Automator (см. рисунок 1).
Щелкните по флажкам для
update parameters
иparameters updated
.Укажите файл сценария для обработчиков команды.
Automator вызывает обработчик для update parameters
непосредственно перед тем, как это выполняет действие. В этом обработчике действие должно получить настройки от пользовательского интерфейса и обновить запись параметров с ними. Перечисление 4 обеспечивает пример update parameters
обработчик.
Перечисление 4 “обработчик команды” параметров обновления
on update parameters theObject parameters theParameters |
set |destinationPath| of theParameters to (the content of text field "folder path" of the destination_folder_box) as string |
set |textInput| of theParameters to (the content of text field "text input" of the text_source_box) as string |
set |fileName| of theParameters to (the content of text field "file name" of the file_name_box) as string |
set |chosenVoice| of theParameters to the title of popup button "voice popup" of voice_box |
set |textSource| of theParameters to ((the current row of matrix "source matrix" of the text_source_box) as integer) - 1 |
return theParameters |
end update parameters |
Всегда возвращайте обновленный объект параметров как последний шаг в этом обработчике (theParameters
в вышеупомянутом примере).