О сценариях моста
Сценарии Моста являются технологией, упрощающей для программы, записанной в Objective C связываться с scriptable приложениями. Следующие разделы объясняют, что Сценарии Моста, и укажите на его значение разработчикам Какао.
Преимущества сценариев моста
Много приложений на OS X scriptable. scriptable приложение является тем, с которым можно связаться из сценария или другого приложения, позволив Вам управлять приложением и обмениваться данными с ним. Для сценария приложение должно определить интерфейс для ответа на команды. Этот интерфейс и его реализация должны соответствовать объектной модели (предписанный Архитектурой открытых систем или OSA), который указывает классы сценариев объектов, доступных свойств тех объектов, наследования и отношений включения сценариев объектов и команд, на которые отвечает scriptable приложение. Команды пакетов OSA к scriptable приложениям как события Apple и использование менеджер по корпоративным мероприятиям Apple, чтобы диспетчеризировать те события и получить данные в ответ. События Apple являются распространяющейся функцией OS X; например, операционная система использует их, чтобы управлять жизненными циклами приложений и скоординировать их взаимодействия.
Сценарии AppleScript долго были основным способом связаться с scriptable приложениями. Но приложение может также отправить команды в scriptable приложение и получить ответы назад на него. «Традиционный» способ сделать это требует, чтобы Вы использовали структуры данных и функции платформы OSA, чтобы создать и отправить события Apple, но это может быть задачей комплекса dauntingly. Типичные приложения Какао — до Сценариев Моста, который является — полагались на один из двух других методов. Они включали сценарий AppleScript в комплект приложений и использовали Какао NSAppleScript
класс для выполнения сценария. Или они использовали NSAppleEventDescriptor
класс для создания событий Apple, которые они тогда отправляют с подпрограммами менеджера по корпоративным мероприятиям Apple. Однако оба из этих подходов не являются прямыми для разработчиков Какао и могут быть неэффективными.
Платформа Моста Сценариев позволяет отправить и получить события Apple с помощью сообщений Objective C вместо команд AppleScript или дескрипторов события Apple. Для программистов Какао, Пишущий сценарий Моста обеспечивает простую и ясную модель для управления scriptable приложениями. Это делает программы Какао, отправляющие и получающие более эффективные события Apple, и это не требует, чтобы у Вас было детальное знание модели событий Apple целевого приложения. Сценарии Моста интегрируются хорошо с существующим кодом Objective C и работами со стандартными проектами Какао, такими как кодирование значения ключа, целевое действие и объявленные свойства. Это имеет другие преимущества также.
Это дает Ваш доступ к приложениям к любой scriptable функции любого доступного scriptable приложения.
Это использует собственные типы данных Какао —
NSString
,NSArray
,NSURL
, и т.д. — таким образом, Вы никогда не должны будете иметь дело с менее знакомыми типами Углерода.Это управляет структурами данных о событии Apple для Вас, с помощью стандартного управления памятью Какао, чтобы выделить и освободить события Apple.
Это требует, чтобы намного меньше кода, чем необходимый использовало
NSAppleEventDescriptor
и прямые вызовы менеджера по корпоративным мероприятиям Apple.Это проверяет на синтаксические ошибки во время компиляции в отличие от этого
NSAppleScript
.Это работает более двух раз с такой скоростью, как предварительно скомпилированный
NSAppleScript
, и до 100x с такой скоростью, как нескомпилированныйNSAppleScript
.
Поскольку Сценарии Моста динамично заполняют пространство имен приложения с объектами Objective C, представляющими элементы, определенные определением сценариев приложения, это позволяет другим языкам сценариев, соединенным мостом к Objective C — а именно, RubyCocoa и PyObjC — связаться с и управлять scriptable приложениями. Это таким образом дает тем языкам сценариев те же преимущества как сценарии AppleScript и Мост Сценариев использования программ Objective C. Для получения дополнительной информации об использовании Сценариев Моста в коде RubyCocoa и PyObjC посмотрите Ruby и Темы Программирования Python для OS X.
Как сценарии работ моста
Когда Вы запрашиваете экземпляр scriptable приложения от Сценариев Моста, это сначала определяет местоположение пакета приложения идентификатором пакета, URL или идентификатором процесса (в зависимости от того, что Вы указываете). Это тогда получает от пакета определение сценариев приложения, содержавшегося в sdef
файл (или, для более старых приложений, его терминологии комплекта и файлов определения комплекта) и синтаксические анализы это. От элементов в определении сценариев — классов, свойств, элементов, команд, и т.д. — это динамично объявляет и реализует классы Objective C, соответствующие классам сценариев приложения. Динамично сгенерированные классы наследовались от одного из классов, определенных платформой Моста Сценариев, SBObject
.
Классы сценариев приложения часто существуют в иерархических отношениях наследования, но существует также иерархия вместимости или граф объектов. Когда Вы просите у объекта объекты, он содержит, Писание сценарий Моста инстанцирует тех объектов от надлежащих классов сценариев и возвращает их. Если Вы запрашиваете, чтобы объекты, содержавшие одним из тех объектов, Пишущий сценарий Моста, инстанцировали новых объектов сценариев от надлежащего класса и возвратили тех. Обычно это продолжается, пока Вы не достигаете вершины графика, который обычно является свойством, содержащим фактические данные.
В корне графа объектов экземпляр динамично сгенерированного подкласса SBApplication
это представляет объект приложения; в случае iTunes, например, которым называют подкласс iTunesApplication
. Для других объектов сценариев в графе объектов (например, «документ» или «дорожка»), Пишущий сценарий Моста использует экземпляр динамично сгенерированный SBObject
подкласс; дорожка iTunes, например, представлена iTunesTrack
экземпляр. Элементы, указывающие к - много отношений с другими объектами сценариев, реализованы как методы тот возврат экземпляры SBElementArray
. SBElementArray
подкласс NSMutableArray
, и таким образом, можно отправить, это передает такой как addObject:
и objectAtIndex:
.
Сценарии Моста реализуют команды и свойства (прямо или косвенно) как методы SBApplication
подкласс или одного из классов сценариев приложения. Это реализует свойства класса, поскольку Objective C объявил свойства, который приводит к синтезу методов доступа для тех свойств. Многие из этих методов доступа возврат, и иногда набор, объекты надлежащего типа Набора Основы или Приложения, такой как NSString
, NSURL
, NSColor
, и NSNumber
. Эти свойства представляют конкретные данные scriptable приложения. (См. “О Приложениях Какао Scriptable “в Руководстве по созданию сценариев Какао для отображения типов Какао к типам AppleScript.) Для команд, Пишущий сценарий Моста оценивает прямой параметр для определения класса для присвоения реализации метода. Если это - определенный класс сценариев (такой как document
), команда становится методом того класса; если это имеет универсальный класс (такой как specifier
), это становится методом SBApplication
подкласс.
При сценариях объектов в Сценариях Моста — т.е. объекты произошли из SBObject
— чрезвычайно объектные спецификаторы. Т.е. они - ссылки на объекты в scriptable приложении. Чтобы получить или установить конкретные данные в приложении, объект сценариев должен быть оценен, который приводит к Сценариям Моста, отправляющего событие Apple в приложение. Для больше при сценариях объектов как объектные спецификаторы, посмотрите Объектные Спецификаторы и Оценку.
Пример: приложение эскиза
Лучший способ понять, как Сценарии Моста обрабатывают определение сценариев приложения, состоит в том, чтобы смотреть на «реальное» приложение, в этом случае приложение Эскиза. Проект Эскиза в качестве примера в <Xcode>/Examples/AppKit
создает простое, но функционально полное графическое приложение; с ним можно нарисовать и окрасить геометрические фигуры, строки и текст. Проект включает sdef
XML-файл, определяющий интерфейс сценариев приложения. Перечисление 1-1 показывает часть sdef
файл, определяющий Эскиз document
класс.
Перечисление 1-1 определение document
класс для Эскиза
<class name="document" code="docu" description="A Sketch document."> |
<cocoa class="SKTDrawDocument"/> |
<property name="name" code="pnam" type="text" access="r" description="Its name."> |
<cocoa key="displayName"/> |
</property> |
<property name="modified" code="imod" type="boolean" access="r" description="Has it been modified since the last save?"> |
<cocoa key="isDocumentEdited"/> |
</property> |
<property name="file" code="file" type="file" access="r" description="Its location on disk, if it has one."> |
<cocoa key="fileURL"/> |
</property> |
<!-- This is just here for compatibility with old scripts. New scripts should use the more user-friendly file property. --> |
<property name="path" code="ppth" type="text" access="r" description="Its location on disk, if it has one, as a POSIX path string." hidden="yes"> |
<cocoa key="fileName"/> |
</property> |
<element type="graphic"/> |
<element type="box"> |
<cocoa key="rectangles"/> |
</element> |
<element type="circle"/> |
<element type="image"/> |
<element type="line"/> |
<element type="text area"/> |
<responds-to name="close"> |
<cocoa method="handleCloseScriptCommand:"/> |
</responds-to> |
<responds-to name="print"> |
<cocoa method="handlePrintScriptCommand:"/> |
</responds-to> |
<responds-to name="save"> |
<cocoa method="handleSaveScriptCommand:"/> |
</responds-to> |
</class> |
Средство просмотра Словаря (доступный из приложения Редактора сценариев) выводит на экран это определение XML document
класс как показано на рисунке 1-1. Это показывает включение document
application
, и это включает обоих общая собственность класса (полученный из Стандартного Комплекта), а также специализированные элементы: графика, поля, круги, и т.д.
Сценарии Моста переводят определение Эскиза document
класс в следующие объявления Objective C:
@interface SketchDocument : SketchItem |
@property (readonly) BOOL modified; // Has the document been modified since the last save? |
@property (copy) NSString *name; // The document's name. |
@property (copy) NSString *path; // The document's path. |
@end |
// More class declarations here..... |
@interface SketchDocument (SketchSuite) |
- (SBElementArray *) circles; |
- (SBElementArray *) graphics; |
- (SBElementArray *) images; |
- (SBElementArray *) lines; |
- (SBElementArray *) rectangles; |
- (SBElementArray *) textAreas; |
@end |
Обратите внимание на то, что Сценарии Моста делают заявления для SketchDocument
класс в двух частях. Начальная буква объявила, что свойства для общей собственности document
сценарии класса, как определено Стандартным Комплектом. Категория добавляет объявления, определенные для Комплекта Эскиза; они объявляют методы (соответствующий элементам в определении сценариев) тот возврат SBElementArray
объекты.
Рисунок 1-2 изображает, как Сценарии Моста преобразовывают Эскиз, пишущий сценарий определения класса документа в неявный график объектов, составляющий иерархию вместимости приложения. В корне графика экземпляр SketchApplication
класс, наследовавшийся от SBApplication
класс. Этот объект приложения содержит один или несколько экземпляров SketchDocument
класс, наследовавшийся от SketchItem
класс, сам потомок SBObject
класс.. Каждый элемент, содержавший document
класс реализован как метод, возвратившись SBElementArray
объект, который является подклассом NSMutableArray
.
Таким образом graphics
метод возвращает нуль или больше SketchGraphic
объекты — каждый соответствует a graphic
объект в определении сценариев — использование SBElementArray
возразите как контейнер. graphic
сценарии класса Эскиза особенно интересны, потому что это - также суперкласс box
объекты, circle
объекты и другие объекты, возвращенные другими методами элемента. graphic
класс определяет свойства, характерные для всех графических объектов Эскиза, включая цвет заливки, цвет обводки, источник и размер; эти свойства реализованы, поскольку Objective C объявил свойства, синтезирующие методы доступа, получающие и устанавливающие значения свойств.
@interface SketchGraphic : SketchItem |
@property (copy) NSColor *fillColor; // The fill color. |
@property int height; // The height of the graphic's bounding rectangle. |
@property (copy) NSColor *strokeColor; // The stroke color. |
@property int strokeThickness; // The thickness of the stroke. |
@property int width; // The width of the graphic's bounding rectangle. |
@property int xPosition; // The x coordinate of the graphic's bounding rectangle. |
@property int yPosition; // The y coordinate of the graphic's bounding rectangle. |
@end |
Рисунок 1-3 показывает и это и отношение наследования SketchGraphic
класс, что Пишущий сценарий Моста реализует для graphic
класс.
При установке свойства в Сценариях Моста удостоверьтесь, что значение свойства имеет надлежащий тип. Таким образом, при попытке выбрать цвет обводки a SketchGraphic
объект, необходимо передать в NSColor
возразите как новое значение.
Объектные спецификаторы и оценка
Пишущие сценарий объекты в программе Моста Сценариев наследовались от SBObject
класс. SBObject
объекты представляют объектные спецификаторы в AppleScript. Объектные спецификаторы функционируют как прокси для удаленных объектов в целевом приложении. Они помогают определить местоположение scriptable объекта в иерархии вместимости того приложения. Например, ряд сообщений, отправленных в объекты в scriptable приложении, мог быть эквивалентен оператору AppleScript такой как get the first track of the third playlist of the source “Library”
. Каждый сегмент этого оператора, такой как third playlist
, был бы представлен объектным спецификатором.
В программе Моста Сценариев объектные спецификаторы находятся первоначально в форме ссылки, предоставленной определением сценариев. A currentTrack
сообщение отправило к iTunesApplication
экземпляр, например, был бы ссылкой, такой как “‘текущая дорожка’ свойство iTunes”. При оценке объектного спецификатора, однако, событие Apple отправляется в scriptable приложение, и более точная, каноническая форма ссылки получена для объекта сценариев. Каноническая форма ссылки обеспечивает точное расположение объекта в приложении, с помощью таких вещей в качестве уникальных числовых или идентификаторов строки. В случае currentTrack
, каноническая ссылка могла бы быть чем-то как “id 42 дорожки списка воспроизведения id 23 источника 1”.
Поскольку оценка объектного спецификатора приводит к отгрузке события Apple — который является дорогой работой — Пишущий сценарий Моста, ограничивает случаи та триггерная оценка. Отложенные вычисления происходят, когда данные бетона запросов сообщения, которые всегда являются значением свойства. Можно также вызвать оценку ссылки путем отправки a get
обменивайтесь сообщениями к объекту сценариев. В обоих случаях оцененному объекту или объектам дают каноническую форму ссылки, не варьирующейся в течение долгого времени. (Если конкретные данные запрашиваются, сообщение также приводит к событию Apple ответа, содержащему данные.)
Часто Вы вызываете оценку, когда Вы хотите сохранить ссылку на объект в scriptable приложении, когда неканоническая форма ссылки могла измениться в любое время. Например, frontmost документ в приложении является ссылочным объектом в индексном нуле приложения documents
массив элемента. Но упорядочивание документов в массиве может измениться, поскольку пользователь щелкает по различным документам. Таким образом, чтобы гарантировать, чтобы у Вас была ссылка на текущий frontmost документ, Вы могли сделать что-то подобное этому:
SketchDocument *frontmost_doc = [[[app documents] objectAtIndex:0] get]; |
Для больше на отложенных вычислениях и использовании get
метод, посмотрите Улучшение Производительности Сценариев Кода Моста.
Классы платформы моста сценариев
Платформа Моста Сценариев имеет три общедоступных класса:
SBApplication
— Класс для объектов, представляющих scriptable приложенияSBElementArray
— Класс для наборов объектов возвратился из элементов (реализованный как методы)SBObject
— Базовый класс для объектов сценариев приложения
Следующие методы фабрики классов SBApplication
возвратите объект, представляющий совместимое OSA приложение (автовыпущенный в управляемых средах памяти):
+ (id) applicationWithBundleIdentifier:(NSString *)bundleID;
Находит приложение с помощью его идентификатора пакета, например
@“com.apple.iTunes”
. Это - рекомендуемый подход для большинства ситуаций, особенно когда приложение локально, потому что это динамично определяет местоположение приложения.+ (id) applicationWithURL:(NSURL *)url;
Находит приложение с помощью объекта, представляющего URL с a
file:
илиeppc:
схема файла; последняя схема используется для определения местоположения удаленных приложений.+ (id) applicationWithProcessIdentifier:(pid_t)pid;
Находит приложение с помощью его идентификатора процесса BSD (
pid
).
Вызов одного из этих методов является первым шагом при использовании Сценариев Моста. Прежде чем это возвратит экземпляр приложения, Писание сценарий Моста анализирует определение сценариев определяемого приложения и динамично реализует требуемые классы. Создание Объекта приложения показывает, как Вы могли бы использовать эти методы в своих приложениях Какао.
Программы, использующие Мост Сценариев обычно, не должны вызывать многие методы, объявленные SBObject
, SBApplication
, и SBElementArray
. Методы, которые Вы вызываете, имеют тенденцию быть теми, что Сценарии Моста динамично объявляют и реализуют для приложения и его объектов сценариев. Однако несколько методов платформы (перечисленный в Таблице 1-1) полезны в общих ситуациях.
Методы | Цель |
---|---|
| Инициализирует объект сценариев со свойствами или данными; используемый в соединении |
| Оценка сил объекта сценариев, реализованного как объектный спецификатор. Оценка возвращает каноническую форму ссылки для объекта. Для получения дополнительной информации посмотрите Объектные Спецификаторы и Оценку и Перечисление 3-2. |
| Возвраты |
| Позвольте Вам контролировать и активировать приложение. Улучшение Производительности Сценариев Кода Моста обсуждает использование |
| Позволяет Вам получить объект сценариев в массиве элемента путем указания его имени, уникального идентификатора или расположения. Посмотрите Используя Массивы Элемента для примера. |
| Создает массив, заполненный с объектами, возвращенными из сообщения, отправленного в каждый объект в массиве элемента. Посмотрите Используя Массивы Элемента для примера. |
Платформа Моста Сценариев также включает SBApplicationDelegate
неофициальный протокол. Делегат может реализовать единственный метод этого протокола (eventDidFail:withError:
) обрабатывать ошибки события Apple возвратилось из целевого приложения.