Обзор поддержки какао приложений Scriptable

Эта глава обеспечивает обзор сценариев Какао и как Ваше приложение использует в своих интересах его и обеспечивает ссылки к более подробной информации в других главах и документах.

scriptable приложение является тем, которым сценаристы могут управлять со сценариями AppleScript. Для создавания scriptable приложения Вы указываете словарь терминов, которые сценаристы могут использовать с Вашим приложением, классами реализации и методами, чтобы поддерживать scriptable функции и обеспечить план действий scriptability информации что AppleScript и использование Какао, чтобы позволить сценариям управлять приложением.

Сценарии какао относятся к поддержке, предоставленной средой разработки приложения Какао для того, чтобы создать scriptable приложения. Это включает классы, категории и scriptability информацию, указывающую поддерживаемую терминологию AppleScript, и информация о классе должна была работать с ним.

Сценарии какао используют стандартные механизмы и шаблоны разработки, используемые всюду по Какао, включая кодирование значения ключа (KVC) и Model-View-Controller (MVC). Когда команда AppleScript предназначается для Вашего приложения, цель поддержки сценариев состоит в том, чтобы отправить команду непосредственно в объекты модели приложения для выполнения работы. Чтобы сделать это, это полагается на механизм KVC, чтобы получить и установить значения в scriptable объектах модели Вашего приложения, на основе ряда ключей, которые Вы определяете для них.

С помощью этих механизмов можно подать заявку, scriptable с минимумом дополнительного кода.

AppleScript и приложения Scriptable

AppleScript является языком сценариев, делающим возможное прямое управление scriptable приложениями и scriptable частями Mac OS (такими как Средство поиска). Язык AppleScript не предоставляет исчерпывающее или специфичную для задачи терминологию. Вместо этого это определяет общие команды, такой как get, set, make, и delete, который может быть применен к большому разнообразию объектов или их свойств в scriptable приложении. Приложения Scriptable определяют дополнительные условия по мере необходимости для их уникальных операций.

scriptable приложение является тем, делающим его операции и доступные данные в ответ на сообщения AppleScript, названные событиями Apple. Событие Apple является своего рода межпроцессным сообщением, которое может указать сложные операции и данные. События Apple позволяют инкапсулировать высокоуровневую задачу в единственном пакете, который может быть передан через границы процесса, выполнил и ответил на с событием ответа.

scriptable приложение указывает набор сценариев условий, это понимает и предоставляет информацию, что использование AppleScript для компиляции сценариев, использующих те термины. Когда пользователь выполняет сценарий, предназначающийся для приложения, события Apple отправляются в приложение. События Apple могут также быть отправлены другими приложениями и Mac OS.

Приложения обрабатывают события Apple путем регистрации в менеджере по корпоративным мероприятиям Apple для событий, которые они ожидают получать и поставляющими подпрограммами обработчика для обработки событий. Сценарии какао упрощают этот процесс путем автоматической регистрации и ответа на события Apple, которые приложение может обработать, на основе scriptability информации, которую Вы предоставляете. Это означает, что Вы не должны писать низкоуровневый код для взаимодействия с событиями Apple и менеджером по корпоративным мероприятиям Apple.

События AppleScript и Apple основаны на Open Scripting Architecture (OSA), описанной в, Открывают Scripting Architecture in AppleScript Overview.

Объектная модель AppleScript

Каждое scriptable приложение определяет объектную модель AppleScript для указания классов объектов, с которыми может работать сценарист в сценариях, доступных свойствах тех объектов, и наследовании и отношениях включения для тех классов. Наследование позволяет классу получать доступ к свойствам своих наследователей. Включение указывает, где объект находится в иерархии объектов в запущенном приложении.

Объекты в объектной модели часто соответствуют близко классам объектов в приложении, реализующим поддержку сценариев, но нет никакого требования, чтобы они сделали так. Например, текстовое приложение могло бы обеспечить доступ сценария к словам в документе, но не будет эффективно для приложения поддержать соответствующий объект для каждого слова.

Классы приложений имеют атрибуты, к - отношения, и к - много отношений. Классы AppleScript в объектной модели имеют свойства и элементы — свойства синонимичны с атрибутами и к - отношения, в то время как элементы синонимичны с к - много отношений. Для получения дополнительной информации об этих и связанных условиях см. Глоссарий.

Рисунок 1-1 показывает иерархию вместимости объектной модели для определенного документа (показанный на рисунке 1-2) в приложении Эскиза. Слева объекты сценарист использование для работы с приложением. Справа объекты что использование Эскиза для представления его объектной модели.

  Иерархия вместимости Объектной модели рисунка 1-1 для приложения Эскиза
Object-model containment hierarchy for Sketch application

В этой объектной модели документы являются элементами объекта приложения, и графика является элементами объектов документа, в то время как имя документа является свойством документа. Для сценария для доступа к объекту в иерархии это должно определить местоположение объекта в своей иерархии вместимости. (В приложении, orderedDocuments массив к - многие отношение NSApplication объект.)

Рассмотрите, например, следующий демонстрационный сценарий:

tell app "Sketch" to set the x position of rectangle 1 of document "SketchDocOne" to 25

Этот сценарий указывает прямоугольник, в документе, в приложении. Если бы применено к следующий документ Эскиза, это установило бы горизонталь (x) позиция для того, какой бы ни из этих двух прямоугольных фигур является первым в упорядоченном списке документа графики.

  Окно Sketch рисунка 1-2 с графикой
Sketch window with graphics

Сценарий может попросить rectangle 1 of document "SketchDocOne" не имея необходимость указывать также graphics или documents (хотя они - часть иерархии, показанной выше), потому что определение класса AppleScript неявно указывает отношения своих содержавших элементов.

Объектная модель эскиза использует наследование для своих графических объектов. Все такие объекты (rectangle, circle, image, line, и text area) наследуйтесь от общего предка (graphic). Таким образом срок graphic 1 of document "SketchDocOne" мог бы указать тот же объект как rectangle 1 of document "SketchDocOne", В зависимости от упорядочивания объектов в графическом массиве.

Информация о Scriptability

scriptable приложение предоставляет scriptability информацию, формально размечающую объектную модель AppleScript для приложения и отображающую его на объекты приложения. Эта scriptability информация делает две вещи:

Для однозначного определения условий в его scriptability информации приложение использует вызванные четыре кодов символов констант (или коды события Apple). Четыре кода символа - всего четыре байта данных, которые могут быть выражены как строка четырех символов в римском кодировании Mac OS. Эти коды описаны в Кодовых константах, Используемых в информации Scriptability.

В scriptability информации приложения терминология, связанная со связанной функциональностью (например, операции, включающие текст, графику или базы данных), обычно собирается в комплекты. Какао обеспечивает предопределенные комплекты, описанные во Встроенной Поддержке текстовых Комплектов и Стандарта.

AppleScript использует scriptability информацию приложения, включая четыре кодов символов, чтобы скомпилировать сценарии и отправить события Apple в приложение. Какао использует информацию, чтобы интерпретировать полученные события Apple и создать объекты команды сценария для выполнения указанных операций.

Информационные форматы Scriptability

Вы определяете scriptability информацию своего приложения с помощью одного из двух форматов. Первым является определение сценариев или формат sdef. Это - основанный на XML формат, описывающий ряд scriptability условия и команды, классы, константы и другая информация, которые описывают scriptability приложения. Формат sdef был представлен в версии 10.2 OS X и используется исходно Какао, запускающимся в версии 10.4 OS X. В формате sdef scriptability информация приложения содержится в единственном определении сценариев (или sdef) файл с расширением .sdef. Слово sdef может использоваться для описания или формата или файла в том формате.

Второй, более старый формат использует файлы списка свойств и упоминается как формат комплекта сценария. Это предоставляет Какао и AppleScript с примерно той же информацией в форме файла комплекта сценария и соответствующего файла с терминологией сценария:

  • Файл комплекта сценария описывает scriptable объекты с точки зрения их атрибутов, отношений и поддерживаемых команд, и имеет расширение .scriptSuite.

  • Файл с терминологией сценария обеспечивает терминологию AppleScript — подобные английскому языку слова и формулирует сценариста, может использовать в сценарии — для класса и описаний команды в соответствующем файле комплекта сценария. Файлы с терминологией сценария имеют расширение .scriptTerminology.

Определение scriptability информация с любым из этих форматов немного походит на определение Вашего интерфейса приложения с файлами пера, хотя Вы работаете с текстом, а не графическим редактором. В обоих случаях Вы предоставляете информацию передняя сторона, которую Какао использует в определенные времена, чтобы создать объекты и предоставить поддержку для задачи под рукой. Информация от sdef (или более старая форма списка свойств) загружается только один раз на запуск приложения, как описано в Загрузке информации о Scriptability. Загруженная информация тогда используется по мере необходимости для создания объектов команды сценария для выполнения scriptable операций.

Файл определения сценариев следует за форматом XML, определенным в sdef странице справочника, и описал более подробно в Подготовке Файла Определения Сценариев. Рисунок 1-3 показывает основные элементы XML в sdef файле.

  Структура рисунка 1-3 sdef файла
Structure of an sdef file

Как пример определенных sdef элементов, Перечисление 1-1 показывает graphic и rectangle определения от sdef файла Эскиза. graphic класс определяет несколько свойств (такой как x position и y position) это наследовано другими классами формы. rectangle класс добавляет orientation свойство и указывает, что объект отвечает на rotate команда, которая является определенной для прямоугольников.

  Графическое перечисление 1-1 и прямоугольные элементы от sdef файла Эскиза

... (from the Sketch suite)
<class name="graphic" code="grph"
    description="A graphic. This abstract class represents the
        individual shapes in a Sketch document.
        There are subclasses for each specific type of graphic.">
    <cocoa class="SKTGraphic"/>
    <property name="x position" code="xpos" type="real"
        description="The x coordinate of the graphic's bounding rectangle."/>
    <property name="y position" code="ypos" type="real"
        description="The y coordinate of the graphic's bounding rectangle."/>
    <property name="width" code="widt" type="real"
        description="The width of the graphic's bounding rectangle."/>
... (some properties omitted)
</class>
<class name="rectangle" code="d2rc" inherits="graphic"
        description="A rectangle graphic.">
    <cocoa class="SKTRectangle"/>
    <property name="orientation" code="orin" type="orientation"/>
    <responds-to name="rotate">
        <cocoa method="rotate:"/>
    </responds-to>
</class>

Просмотр терминологии сценариев

Пользователи обычно исследуют терминологию сценариев в средстве просмотра словаря для обнаружения, какие функции scriptable и как написать сценарий приложения. Можно просмотреть терминологию сценариев для scriptable приложения с Редактором сценариев или XCode. Рисунок 1-4 показывает sdef файл из приложения Эскиза в средстве просмотра словаря с графическими классами и прямоугольными видимыми классами.

Рисунок 1-4  sdef выведен на экран в средстве просмотра словаря
An sdef displayed in a dictionary viewer

Двойной щелчок по sdef файлу в Средстве поиска открывает его в средстве просмотра словаря как один показанный выше. Двойной щелчок по sdef файлу в проекте XCode так же открывает его в окне средства просмотра словаря. Чтобы просмотреть или отредактировать XML для файла, откройте sdef файл с любым редактором простого текста; в XCode выберите sdef файл и выберите File> Open As> Plain Text File.

Для соответствующей информации посмотрите Редактирование информация о Scriptability.

Встроенная поддержка стандарта и текстовых комплектов

scriptable приложение обычно поддерживает определенный стандарт условия AppleScript, такой как count и make команды и application класс. Какао предоставляет встроенную поддержку для этих условий в Стандартном комплекте. Это также обеспечивает классы команды, включая NSCountCommand и NSCreateCommand, реализовать стандартные команды. Кроме того, классы такой как NSApplication и NSDocument реализуйте определенные аспекты стандартной поддержки сценариев.

Какао, пишущее сценарий также, предоставляет поддержку для get и set команды, включая реализацию классов команды NSGetCommand и NSSetCommand. Эти команды не являются частью Стандартного комплекта, но считаются встроенными командами AppleScript. Разрешение сценаристам добраться и установить значения свойств и элементы scriptable объектов является ключевой ролью подавания scriptable заявки.

Стандартный комплект определяет следующие команды AppleScript: (для всех классов) copy, count, create, delete, exists, и move; (для документов и окон) print, save, close. Обратите внимание на то, что нет никакой реализации по умолчанию для print команда — видит Печать для получения информации о том, как поддерживать печать.

Поддерживать связанные с текстом классы такой как rich text, word, и paragraph, Какао реализует текстовый комплект.

Встроенная поддержка какао Стандарта и текстовых комплектов описана более подробно в Использовании Архитектура Документа, и Получите доступ к текстовому Комплекту. Для включения его в приложение Вы выполняете шаги, описанные поочередно При Сценариях Поддержки в Вашем Приложении.

Встроенная поддержка основных типов AppleScript

Сценарии какао предоставляют встроенную поддержку для основных типов AppleScript и автоматически связывают их с надлежащими типами данных Какао, как показано в Таблице 1-1. Можно использовать эти типы, не объявляя их в sdef файле.

Табличная 1-1  Поддержка основных типов AppleScript

Тип AppleScript

Тип какао

Код

any

NSAppleEventDescriptor

"****"

boolean

NSNumber

"bool"

date

NSDate

"ldt "

file

NSURL

"file"

integer

NSNumber

"long"

location specifier

NSPositionalSpecifier

"insl"

number

NSNumber

"nmbr"

point

NSData содержа QuickDraw Point

"QDpt"

real

NSNumber

"doub"

record

NSDictionary

Этот тип используется в качестве типа properties свойство для item класс и тип with properties параметры duplicate и make команды. Объявление, что что-то имеет тип record не предоставляет достаточно информации для преобразования дескрипторов записи события Apple в NSDictionary объекты, таким образом, различные классы команды сценариев Какао имеют специальный код для обработки той ситуации. В Вашем коде, вместо того, чтобы использовать record введите, необходимо объявить определенные типы записи (см. Элементы Типа записи), и используйте тех для class свойства и command параметры.

"reco"

rectangle

NSData содержа QuickDraw Rect

"qdrt"

specifier

NSScriptObjectSpecifier

"obj "

text

NSString

  • Внутренне, Какао, пишущее сценарий всегда, использует текст Unicode при преобразовании, чтобы получить информацию от или добавить его к событию Apple.

"ctxt"

type

NSNumber

"type"

Загрузка информация о Scriptability

Когда приложение сначала должно работать с scriptability информацией, сценарии Какао используют глобальный экземпляр NSScriptSuiteRegistry загрузить информацию из sdef файла приложения:

  • Для каждого класса, описанного в sdef файле, это инстанцирует объекта описания класса (NSScriptClassDescription) это хранит информацию об объектах того типа.

    Эта информация включает ключи KVC, которые сценарии Какао используют для значений доступа scriptable объектов приложения.

  • Для каждой команды сценария, описанной в sdef файле, это регистрирует подпрограмму обработчика для событий Apple, указывающих ту команду.

    Это также инстанцирует объекта описания команды (NSScriptCommandDescription) это хранит информацию, такую как имя класса команды сценариев для инстанцирования для выполнения команды, а также параметров команды и типа возврата (если таковые имеются).

Рисунок 1-5 показывает загруженный класс и описания команды для приложения. Какао использует информацию для создания экземпляров классов команды и описаний объектов приложения, что это должно обработать события Apple, полученные приложением.

Рисунок 1-5  приложение загрузил scriptability информацию
An application's loaded scriptability information

Приложение scriptability информация автоматически включает информацию, чтобы поддерживать основные типы AppleScript, перечисленные в Таблице 1-1 и сделать get и set команды, доступные всем приложениям.

Уверенность в кодировании значения ключа

Кодирование значения ключа (KVC) является механизмом для доступа к свойствам объектов косвенно ключом. Ключ является просто строкой, идентифицирующей свойство, такой как "xPosition" для горизонтальной координаты графического объекта (показанный в Перечислении 1-1). API KVC обеспечивает универсальный способ запросить объект для значений его ключей и установить новые значения для тех ключей.

Сценарии какао полагаются на KVC в следующих целях:

Поскольку Вы разрабатываете классы объектов для своего приложения, Вы также определяете ключи для их scriptable свойств. Ваше приложение обеспечивает эти ключи class определения в его sdef файле. Затем когда Вы реализуете методы доступа (или объявляете переменные экземпляра), которые соответствуют этим ключам, Вы позволяете сценариям Какао и KVC получить и установить соответствующие значения.

Именование значения по умолчанию для ключей описано в, Обеспечивают Ключи для Кодирования Значения ключа. Для получения информации об именовании методов доступа посмотрите, Поддерживают Соответствие KVC.

Взаимодействие с привязкой какао и базовыми данными

Сценарии какао, привязка Какао и Базовые Данные являются тремя технологиями разработки, доступными в OS X, которые полагаются на кодирование значения ключа:

Как отмечено, все три из этих технологий полагаются на KVC, таким образом, Вы получите путем подавания KVC-совместимой заявки. Привязка какао и Базовые Данные также используют наблюдение значения ключа, но сценарии Какао не делают.

В то время как эти технологии близко не связаны, вот некоторые эмпирические правила, которые могут помочь в объединении их использования:

Для соответствующей информации посмотрите Взаимодействие С Наблюдением Значения ключа.

Scriptability и Undo

Приложения Scriptable должны обычно поддерживать отмену операций в виде сценария, поскольку они были бы любая инициируемая пользователями работа. Т.е. после того, как сценарий заставляет приложение выполнять одну или более операций, пользователь должен быть в состоянии последовательно отменить операции нормальным способом.

Сценарии какао не предоставляют специальной поддержки для отмены, но, и при этом это не вмешивается в нормальные операции отмены. Приложения, использующие в своих интересах парадигму Контроллера представления Модели и механизм кодирования значения ключа Какао как scriptable приложения, разработаны, чтобы сделать, хорошо расположены для поддержки и scriptability и отмены.

Для получения дополнительной информации о поддержке отмены посмотрите Архитектуру Отмены.

Снимок сценариев какао

Работа, выполненная Вашим scriptable приложением, разделена между сценариями Какао и приложением. Ваше приложение реализует классы и методы, выполняющие его scriptable операции; это также предоставляет информацию, описывающую ее scriptability. Какао получает события Apple и использует Вашу scriptability информацию, чтобы интерпретировать их и выполнить указанные операции, обращаясь к Вашему коду с просьбой выполнить фактическую работу.

Вот сводка того, как работает этот процесс:

  1. Приложение определяет scriptability информацию (в sdef файле, или в более старом комплекте сценария стиля и файлах с терминологией сценария), который включает и термины, которые сценарист может использовать и информация приложений для поддержки тех условий. Эта информация обычно включает Стандартный комплект (реализованный сценариями Какао), который поддерживает стандартные команды AppleScript и классы.

    Приложение определяет классы для scriptable объектов, оно поддерживает и обеспечивает ключи для их scriptable свойств и элементов. Это также определяет дополнительные классы команды сценария, если это начинает scriptable операции, которые не могут быть выполнены одним из стандартных классов команды, предоставленных Какао.

    Scriptability обычно предоставлены через объекты модели приложения (с точки зрения парадигмы Контроллера представления Модели).

  2. Приложение является кодированием значения ключа (KVC), совместимым в именовании переменных экземпляра или методов доступа для scriptable свойств и элементов его scriptable классов.

  3. Для каждого scriptable класса приложение реализует объектный метод спецификатора, определяющий местоположение scriptable объекта того типа в иерархии вместимости приложения.

  4. Приложение Info.plist файл имеет записи, активирующие сценарии Какао и указывающие sdef файл, как показано поочередно При Сценариях Поддержки в Вашем Приложении.

  5. Когда это сначала необходимо, Какао загружает scriptability информацию приложения и автоматически регистрирует обработчики событий для поддерживаемых команд.

  6. То, когда приложение получает событие Apple для зарегистрированной команды, Какао инстанцирует объекта команды сценария, содержащего всю информацию, должно было идентифицировать объекты приложения, на которые должна воздействовать команда. Все объекты команды используют KVC для определения местоположения указанных scriptable объектов воздействовать на.

    Какао тогда выполняет команду, отправляющую сообщения в надлежащие объекты приложения для выполнения работы. Для многих команд Какао использует KVC, чтобы получить или установить значения указанных объектов.

  7. Когда команда должна возвратить значение, сценарии Какао упаковывают информацию в событии Apple ответа и возвращают ее.

    Если ошибка происходит при выполнении команды, Какао возвращает информацию об ошибке (включая любую информацию, добавленную приложением) в событии Apple ответа. Для получения дополнительной информации посмотрите Обработку ошибок.

  8. Если команда требует асинхронной обработки (такой как сбор информации через лист), приложение может приостановить его, так, чтобы приложение не получало дополнительные события Apple во время обработки. Для получения дополнительной информации посмотрите Приостановку и Возобновление Событий Apple и Команд Сценария.

Пример сценариев реального мира

Для отслеживания команды сценариев от выполнения сценария AppleScript к работе, это выполняет в целевом приложении, рассмотрите снова следующий короткий сценарий, пытающийся установить значение в документе приложения Эскиза:

tell app "Sketch" to set the x position of rectangle 1 of document "SketchDocOne" to 25

Когда этот сценарий компилируется против scriptability информации Эскиза и выполняется, это приводит к событию Apple, отправляемому в приложение Эскиза. Событие Apple инкапсулирует set команда и указывает работу на объекте в "SketchDocOne" документ, показанный на рисунке 1-2. Рисунок 1-6 иллюстрирует действия, заканчивающиеся, когда приложение получает set Событие Apple.

Рисунок 1-6  приложение Какао, отвечающее на событие Apple
A Cocoa application responding to an Apple event

Вот описание шагов, показанных в этом числе:

  1. Приложение получает событие Apple, указывающее a set команда.

  2. Переводчик события Apple, часть сценариев Какао, использует scriptability информацию, предоставленную приложением для оценки события Apple. Эта информация изображается более подробно на рисунке 1-5.

  3. Переводчик создает экземпляр NSSetCommand команда сценария и инициализирует, она с информацией должна выполнить команду:

    • Прямой параметр set команда указывает объект или возражает для установки значения для (в этом случае, первый прямоугольник), и становится спецификатором получателей в NSSetCommand объект.

    • to параметр обеспечивает значение для установки (в этом случае, 25) и становится параметром «Value» в NSSetCommand объект.

    Эти значения сохранены в объекте команды как словарь параметра. Для получения информации о как Ваши работы приложения с той информацией, посмотрите Компоненты Команды Сценария.

  4. Когда set команда выполняется, она использует KVC для определения местоположения указанного объекта или объектов. Это также полагается на KVC для установки указанного значения. Для дополнительной подробности посмотрите Получение и Установку Свойств и Элементов.

    Некоторые команды возвращают значение, но set команда не делает.

Поскольку этот пример и информация в Снимке Сценариев Какао показывают, приложение может поддерживать set команда с относительно умеренным усилием: это изменяет Info.plist файл для указания его scriptable и указать его sdef файл; это обеспечивает команду и информацию о классе в sdef файле; и это поддерживает соответствие KVC для scriptable свойств в его scriptable классах.

Если приложение также реализует objectSpecifier метод для каждого из его scriptable классов, это может поддерживать get команда также. Сценарии какао используют KVC, чтобы получить указанное значение из приложения и упаковать его в событии Apple возврата.

В результате приложение может скорее быстро предоставить много scriptability только путем поддержки get и set доступ к свойствам нескольких ключевых объектов.

Текущие ограничения поддержки сценариев какао

Существуют некоторые связанные со сценариями функции, для которых Какао, пишущее сценарий в настоящее время, предоставляет минимальную поддержку.

Сценарии какао в настоящее время не осуществляют read/write состояние, указанное в sdef, таким образом отмечая свойство как только для чтения, не гарантирует, что не может быть записано. (Доступ для чтения-записи описан в Элементах Свойства.)