stringtranslate.com

AppleScript

AppleScript — это язык сценариев, созданный Apple Inc. , который обеспечивает автоматизированный контроль над скриптовыми приложениями Mac . Впервые представленный в System 7 , в настоящее время он включен во все версии macOS как часть пакета инструментов автоматизации системы. [4] [5] Термин «AppleScript» может относиться к самому языку, к отдельному сценарию, написанному на этом языке, или, неформально, к архитектуре открытых сценариев macOS, которая лежит в основе языка. [4] [5]

Обзор

AppleScript — это в первую очередь скриптовый язык, разработанный Apple для межприкладного взаимодействия (IAC) с использованием событий Apple . [4] [5] AppleScript связан с событиями Apple, но отличается от них. События Apple предназначены для обмена данными между другими приложениями и управления ими с целью автоматизации повторяющихся задач.

AppleScript имеет некоторые собственные возможности обработки, в дополнение к отправке и получению событий Apple приложениями. AppleScript может выполнять базовые вычисления и обработку текста, и является расширяемым, что позволяет использовать дополнения к скриптам, которые добавляют новые функции к языку. Однако в основном AppleScript полагается на функциональность приложений и процессов для обработки сложных задач. Как структурированный командный язык AppleScript можно сравнить с оболочками Unix , Microsoft Windows Script Host или IBM REXX , но он отличается от всех трех. Существенным для его функциональности является тот факт, что приложения Macintosh публикуют «словари» адресуемых объектов и операций.

AppleScript имеет некоторые элементы процедурного программирования , объектно-ориентированного программирования (особенно при построении объектов скрипта) и тенденции программирования на естественном языке в своем синтаксисе, но не соответствует строго ни одной из этих парадигм программирования . [5] : xxvi 

История

В конце 1980-х годов Apple рассматривала возможность использования языка сценариев HyperTalk от HyperCard в качестве стандартного языка для разработки конечных пользователей в рамках всей компании и в рамках ее классической операционной системы Mac OS , а также для межпроцессного взаимодействия между продуктами Apple и других производителей. [6] HyperTalk мог использоваться новичками для программирования стека HyperCard. Инженеры Apple осознали, что можно разработать похожий, но более объектно-ориентированный язык сценариев для использования с любым приложением , и проект AppleScript родился как ответвление исследовательской работы по модернизации Macintosh в целом и в конечном итоге стал частью System 7. [ 1]

AppleScript был выпущен в октябре 1993 года как часть System 7.1.1 (System 7 Pro, первое крупное обновление System 7). [1] QuarkXPress (версия 3.2) был одним из первых крупных программных приложений, которые поддерживали AppleScript. Это, в свою очередь, привело к широкому использованию AppleScript в издательском и допечатном мире, часто связывая воедино сложные рабочие процессы. Это стало ключевым фактором в сохранении доминирующего положения Macintosh в издательском и допечатном мире, даже после того, как QuarkXpress и другие издательские приложения были портированы на Microsoft Windows.

После некоторой неопределенности относительно будущего AppleScript в ОС следующего поколения Apple, переход на Mac OS X (около 2002 г.) и ее фреймворки Cocoa значительно увеличили полезность и гибкость AppleScript. Приложения Cocoa позволяют разработчикам приложений реализовывать базовую возможность скриптования для своих приложений с минимальными усилиями, расширяя число приложений, которые можно напрямую скриптовать. В то же время, переход на основы Unix и способность AppleScript запускать команды Unix напрямую, с помощью do shell scriptкоманды, [7] позволили AppleScripts гораздо больше контролировать саму операционную систему. [5] : 863  AppleScript Studio, выпущенная с Mac OS X 10.2 как часть Xcode , и более поздняя фреймворк AppleScriptObjC, выпущенная в Mac OS X 10.6 , позволили пользователям создавать приложения Cocoa с использованием AppleScript. [5] : 969 

В статье 2006 года Macworld включил AppleScript в свой рейтинг 30 самых значимых продуктов Apple на сегодняшний день, поместив его на 17-е место. [8]

В статье для Macworld 2013 года ветеран-разработчик программного обеспечения для Mac и комментатор Джон Грубер завершил свои размышления о «маловероятной живучести AppleScript», отметив: «Теоретически AppleScript мог бы быть намного лучше; однако на практике это лучшее, что у нас есть и что работает. Это иллюстрирует преимущества Mac перед iOS для любителей и продвинутых пользователей». [9]

В октябре 2016 года давний менеджер по продукту AppleScript и евангелист автоматизации Сэл Согоян покинул Apple, когда его должность была ликвидирована «по деловым причинам». [10] Ветераны сообщества Mac, такие как Джон Грубер и Энди Игнатко, в целом отреагировали с беспокойством, поставив под сомнение приверженность Apple сообществу разработчиков и профессиональным пользователям. [11] Старший вице-президент Apple по разработке программного обеспечения Крейг Федериги ответил в электронном письме, заявив, что «Мы намерены продолжать нашу поддержку великолепных технологий автоматизации в macOS!», хотя Джефф Гамет из The Mac Observer высказал мнение, что это мало что сделало для того, чтобы развеять его сомнения относительно будущего автоматизации Apple в целом и AppleScript в частности. [12] На данный момент AppleScript остается одним из компонентов технологий автоматизации macOS, наряду с Automator , Shortcuts , Services и shell-скриптингом .

Основные понятия

AppleScript был разработан для использования в качестве доступного языка сценариев для конечного пользователя, предлагая пользователям интеллектуальный механизм для управления приложениями, а также для доступа и изменения данных и документов. AppleScript использует события Apple , набор стандартизированных форматов данных, которые операционная система Macintosh использует для отправки информации приложениям, что примерно аналогично отправке запросов XPath через XML-RPC в мире веб-сервисов . [5] : xxvi  События Apple позволяют сценарию работать с несколькими приложениями одновременно, передавая данные между ними, так что сложные задачи могут быть выполнены без участия человека. [4] Например, AppleScript для создания простой веб-галереи может делать следующее:

  1. Откройте фотографию в приложении для редактирования фотографий (отправив этому приложению событие Apple «Открыть файл» ).
  2. Дайте команду приложению для редактирования фотографий изменить изображение (например, уменьшить его разрешение, добавить рамку, добавить ссылку на фотографию)
  3. Сообщите приложению для редактирования фотографий о необходимости сохранить измененное изображение в файле в другой папке (отправив этому приложению событие Apple « Сохранить» и/или «Закрыть» ).
  4. Отправьте новый путь к файлу (через другое событие Apple) в текстовый редактор или веб-редактор.
  5. Дайте команду этому редактору записать ссылку на фотографию в HTML-файл.
  6. Повторите вышеуказанные шаги для всей папки изображений (сотни или даже тысячи фотографий).
  7. Загрузите HTML-файл и папку с измененными фотографиями на веб-сайт, отправив события Apple в графический FTP- клиент, используя встроенные команды AppleScript или отправив события Apple в FTP-утилиты Unix.

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

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

Все скриптовые приложения разделяют несколько базовых команд и объектов, обычно называемых стандартным набором — команды для открытия, закрытия или сохранения файла, для печати чего-либо, для выхода, для установки данных в переменные, а также базовый объект приложения , который дает скриптовые свойства самого приложения. Многие приложения имеют многочисленные наборы, способные выполнять любую задачу, которую может выполнять само приложение. В исключительных случаях приложения могут поддерживать плагины, которые включают их собственные скриптовые словари.

AppleScript был разработан с возможностью интуитивного создания скриптов путем записи действий пользователя. Такая возможность записи AppleScript должна быть встроена в приложение — приложение должно поддерживать события Apple и запись AppleScript; [13] поскольку Finder поддерживает запись AppleScript, это может быть полезно для справки. Когда открыт AppleScript Editor (Script Editor) и нажата кнопка Record, действия пользователя для записываемых приложений преобразуются в их эквивалентные команды AppleScript и выводятся в окно Script Editor. Полученный скрипт можно сохранить и повторно запустить, чтобы дублировать исходные действия, или изменить, чтобы он был более полезным в целом.

Комментарии

Комментарии можно делать несколькими способами. Однострочный комментарий может начинаться с 2 дефисов ( -- ). В AppleScript 2.0, впервые выпущенном в Mac OS X Leopard , он также может начинаться со знака номера (#). Это позволяет сохранять самостоятельный сценарий AppleScript как исполняемый текстовый файл, начинающийся со строки shebang. #!/usr/bin/osascript Пример:

--Это однострочный комментарий # Так же и это! (в Mac OS X Leopard или более поздней версии)

Для комментариев, занимающих несколько строк, AppleScript использует скобки со звездочками внутри. Пример:

(* Это многострочный комментарий * )

Привет, мир!

В AppleScript традиционная программа «Hello, World!» может быть написана во многих различных формах, включая:

отобразить диалоговое окно  «Привет, мир!»  — модальное окно с кнопками «ОК» и «Отмена» — или отобразить оповещение  «Привет, мир!»  — модальное окно с одной кнопкой «ОК» и значком, представляющим приложение, отображающее оповещение — или сказать  «Привет, мир!»  — звуковое сообщение с использованием синтезированного компьютерного голоса

AppleScript имеет несколько параметров пользовательского интерфейса, включая диалоги, оповещения и списки вариантов. (Символ ¬, получаемый при вводе ⌥ Option+ returnв редакторе скриптов, обозначает продолжение одного оператора на нескольких строках.)

-- Диалоговое окно установлено  dialogReply  для  отображения диалогового окна  "Текст диалогового окна"  ¬ ответ по умолчанию  "Текстовый ответ" ¬ скрытый ответ false ¬ кнопки { "Пропустить" , "Хорошо" , "Отмена" } ¬ кнопка по умолчанию " Хорошо" ¬ кнопка отмены "Пропустить" ¬ с заголовком "Заголовок окна диалогового окна" ¬ со значком примечание ¬ отказ после 15                        
-- Выберите из списка set  chosenListItem  для  выбора из списка  { "A" ,  "B" ,  "3" }  ¬ с  заголовком  "Заголовок списка"  ¬ с  подсказкой  "Текст подсказки"  ¬ элементы по умолчанию  "B" ¬ название кнопки ОК "Выглядит хорошо!" ¬ название кнопки отмены "Нет, попробуйте еще раз" ¬ допускается множественный выбор false ¬ допускается пустой выбор                 
 -- Оповещение установлено  resultAlertReply  для  отображения оповещения  "Текст оповещения"  ¬ как  предупреждение  ¬ кнопки  { "Пропустить" , "  ОК" ,  "Отмена" }  ¬ кнопка по умолчанию  2 ¬ кнопка отмены 1 ¬ отказ после 2        

Каждый метод взаимодействия с пользователем может возвращать значения нажатых кнопок, выбранных элементов или введенного текста для дальнейшей обработки. Например:

 вывести оповещение "Привет, мир!"  кнопки  { "Грубо отклонить" ,  "С радостью принять" } установить  кнопку "Ответить "  для  возвращаемого  результата  , если ответ " С радостью принять", то подать звуковой сигнал 5 , иначе сказать "Чушь!" конец if        

Метафора естественного языка

В то время как события Apple являются способом отправки сообщений в приложения, AppleScript является особым языком, разработанным для отправки событий Apple. В соответствии с целью простоты использования для новичков, язык AppleScript разработан на основе метафоры естественного языка , так же как графический пользовательский интерфейс разработан на основе метафоры рабочего стола . Хорошо написанный AppleScript должен быть достаточно понятным, чтобы его мог прочитать и понять любой, и легко редактировать. Язык в значительной степени основан на языке HyperTalk от HyperCard, расширенном для обозначения не только мира карт и стопок HyperCard, но и теоретически любого документа. С этой целью команда AppleScript представила объектную модель AppleEvent (AEOM), которая определяет объекты, которые «знает» любое конкретное приложение.

Сердце языка AppleScript — использование терминов, которые действуют как существительные и глаголы, которые можно комбинировать. Например, вместо другого глагола для печати страницы, документа или диапазона страниц (например, printPage, printDocument, printRange), AppleScript использует один глагол «print», который можно комбинировать с объектом, например, страницей, документом или диапазоном страниц.

распечатать  страницу  1распечатать  документ  2распечатать  страницы  1–5  документа 2    

В общем, AEOM определяет ряд объектов, например «документ» или «абзац», и соответствующие действия, например «вырезать» и «закрыть». Система также определяет способы ссылки на свойства объектов, поэтому можно ссылаться на «третий абзац документа «Добрый день»» или «цвет последнего слова переднего окна». AEOM использует словарь приложения для связывания событий Apple с понятными человеку терминами, позволяя осуществлять перевод между понятными человеку событиями AppleScript и байт-кода Apple. Чтобы узнать, какие элементы программы можно заскриптовать, можно просмотреть словари для поддерживаемых приложений. (В приложениях Xcode и Script Editor это находится в меню Файл → Открыть словарь .)

Чтобы указать, какое приложение должно быть целью такого сообщения, AppleScript использует конструкцию «tell»:

скажите  приложению  "Microsoft Word"  выйти конец  скажите

В качестве альтернативы, сказку можно выразить одной строкой, используя инфинитив :

сказать  приложению  "Microsoft Word  " закрыть 

Для событий в «Core Suite» (активация, открытие, повторное открытие, закрытие, печать и выход) приложение может быть указано как прямой объект для транзитивных команд:

закрыть  приложение  "Microsoft Word"

Концепцию иерархии объектов можно выразить с помощью вложенных блоков:

скажите  приложению  "QuarkXPress"  скажите  документу  1  скажите  странице  2  скажите  текстовому  полю  1  установите  слово  5  в  "Apple"  конец  скажите  конец  скажите  конец  скажите конец  скажите

Понятие иерархии объектов также может быть выражено с помощью вложенных предложных фраз или серии притяжательных местоимений:

пиксель  7  строки  3 изображения TIFF " моего битового массива" 7-й пиксель 3 - й строки изображения TIFF "моего битового массива "        

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

getTIFF ( "мое растровое изображение" ). getRow ( 3 ) .getPixel ( 7 );

AppleScript включает синтаксис для порядкового счета, "первый абзац", а также количественного, "абзац один". Аналогично, сами числа могут быть обозначены как текст или число, поддерживаются "пять", "пятый" и "5"; они являются синонимами в AppleScript. Кроме того, слово "the" может быть законно использовано в любом месте скрипта для улучшения читабельности: оно не влияет на функциональность скрипта.

Примеры скриптов

Надежный калькулятор:

скажите  приложению  "Finder" -- Установите переменные установите  the1  в  возвращаемый текст  ( отобразить диалоговое окно "1-й" ответ по умолчанию "Число здесь" кнопки { "Продолжить" } кнопка по умолчанию 1 ) установите the2 в возвращаемый текст ( отобразить диалоговое окно "2-й" ответ по умолчанию "Число здесь" кнопки { "Продолжить" } кнопка по умолчанию 1 ) попробуйте установите the1 в качестве целого числа установите the2 в качестве целого числа при ошибке отобразить диалоговое окно "В калькулятор можно вводить только числа." с заголовком "ОШИБКА" кнопки { "ОК" } кнопка по умолчанию 1 return end try                                             -- Сложить? если  кнопка  вернула  значение "Да"  ( display dialog  "Add?"  buttons  { "No" ,  "Yes" } default  button  2  ) ,  то ответ  устанавливается в значение ( the1 + the2 ), отобразить диалоговое окно с заголовком "Ответить" buttons { "OK" } default button 1 , то ответ -- Вычесть? иначе, если кнопка вернула значение "Да" ( display dialog "Subtract?" buttons { "No" , "Yes" } default button 2 ) , то ответ устанавливается в значение ( the1 - the2 ), отобразить диалоговое окно с заголовком "Ответить" buttons { "OK" } default button 1 , то ответ -- Умножить? иначе, если кнопка вернула значение "Да" ( display dialog "Multiply?" buttons { "No" , "Yes" } default button 2 ), то ответ устанавливается в значение ( the1 * the2 ) , отобразить диалоговое окно с заголовком " Ответить" buttons { "OK" } default button 1 , то ответ -- Разделить? в противном случае , если кнопка вернула ( отобразить диалоговое окно " Разделить?" кнопки { "Нет" ,"Да" } кнопка по умолчанию 2 ) - "Да" , затем установите ответ на ( the1 / the2 ) отобразите диалоговое окно с заголовком "Ответить" кнопки { "OK" } кнопка по умолчанию                                                                                                         1 say  ans else delay  1 say  "Вы не выбрали функцию. Операция отменена." end  ifконец  сказать

Простая последовательность диалогового окна имени пользователя и пароля . Здесь имя пользователя — John, а пароль — app123:

скажите  приложению  "Finder" установить  passAns  на  "app123" установить  userAns  на  "John" если  текст  , возвращенный  из  ( отобразить диалоговое окно  "Имя пользователя"  ответ по умолчанию  "" ) это userAns то отобразить диалоговое окно "Вернуть" кнопки { "Продолжить" } кнопка по умолчанию 1 если текст , возвращенный из ( отобразить диалоговое окно "Имя пользователя : John" & return & "Пароль" ответ по умолчанию "" кнопки { "Продолжить" } кнопка по умолчанию 1 со скрытым ответом ) это passAns то отобразить диалоговое окно "Доступ предоставлен" кнопки { "OK" } кнопка по умолчанию 1 иначе отобразить диалоговое окно "Неверный пароль" кнопки { "OK" } кнопка по умолчанию 1 конец если иначе отобразить диалоговое окно "Неверное имя пользователя" кнопки { "OK" } кнопка по умолчанию 1 конец если конец сказать                                                      

Инструменты разработки

Редакторы сценариев

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

Из Apple

Редактор AppleScript (редактор скриптов)
Редактор для AppleScript, поставляемый с macOS, называется AppleScript Editor в Mac OS X Snow Leopard (10.6) через OS X Mavericks (10.9) и Script Editor во всех более ранних и более поздних версиях macOS. Скрипты пишутся в окнах редактирования документов, где их можно компилировать и запускать, и эти окна содержат различные панели, в которых доступна зарегистрированная информация, результаты выполнения и другая информация для целей отладки. Доступ к словарям скриптов и предварительно написанным фрагментам кода возможен через меню приложений. Начиная с OS X Yosemite (10.10), Script Editor включает возможность писать как на AppleScript, так и на JavaScript . [14]
Xкод
Набор инструментов для разработки приложений с функциями редактирования AppleScript или создания полноценных приложений, написанных с использованием AppleScript.

От третьих лиц

Отладчик скриптов от Late Night Software
Сторонняя коммерческая IDE для AppleScript. Script Debugger — это более продвинутая среда AppleScript, которая позволяет автору скриптов отлаживать AppleScripts с помощью пошагового выполнения , точек останова , входа и выхода из функций/подпрограмм, отслеживания переменных и т. д. Script Debugger также содержит расширенный браузер словаря, который позволяет пользователю видеть словарь в действии в реальных ситуациях. То есть, вместо простого перечисления того, что охватывает словарь, можно открыть документ в Pages , например, и увидеть, как термины словаря применяются к этому документу, что упрощает определение того, какие части словаря использовать. Script Debugger не предназначен для создания скриптов с графическим интерфейсом, за исключением базовых оповещений и диалогов, а больше ориентирован на кодирование и отладку скриптов.
Улыбнись и SmileLab
Сторонняя бесплатная/коммерческая IDE для AppleScript, сама полностью написанная на AppleScript. [15] Smile бесплатна и в первую очередь разработана для разработки на AppleScript. SmileLab — коммерческое программное обеспечение с обширными дополнениями для численного анализа, построения графиков, автоматизации машин и веб-производства. Smile и SmileLab используют набор различных окон — окна AppleScript для запуска и сохранения полных скриптов, терминалы AppleScript для построчного тестирования кода, окна unicode для работы с текстом и XML. Пользователи могут создавать сложные интерфейсы, называемые диалогами, для ситуаций, когда встроенных диалогов в AppleScript недостаточно.
ASObjC Explorer 4 от Шейна Стэнли
Прекращенная сторонняя коммерческая IDE для AppleScript, особенно для AppleScriptObjC. [16] Основная функция — регистрация объектов/событий Cocoa , отладка и автодополнение кода. Пользователи могут читать события и объекты Cocoa, как и другие приложения с поддержкой скриптов. Этот инструмент изначально был создан для библиотек AppleScript (доступных в OS X Mavericks ). Библиотеки AppleScript нацелены на повторно используемые компоненты AppleScript и поддерживают встроенный словарь AppleScript (sdef). ASObjC Explorer 4 также может быть внешним редактором скриптов Xcode.
FaceSpan от Late Night Software
Прекращенная сторонняя коммерческая среда разработки (IDE) для создания приложений AppleScript с графическими пользовательскими интерфейсами. [17]

Запуск скриптов

AppleScripts можно запускать из редактора скриптов, но обычно удобнее запускать скрипты напрямую, не открывая приложение редактора скриптов. Для этого есть несколько вариантов:

Апплеты
AppleScripts можно сохранять из редактора скриптов как приложения (называемые апплетами или дроплетами , когда они принимают ввод посредством перетаскивания ). [5] : 69  Апплеты можно запускать из Dock , с панели инструментов окон Finder , из Spotlight , из сторонних программ запуска приложений или из любого другого места, где могут запускаться приложения.
Действия с папками
Используя действия папок AppleScript, скрипты могут запускаться при возникновении определенных изменений в папках (например, добавление или удаление файлов). [18] Действия папок можно назначать, нажав на папку и выбрав «Настройка действий папки...» в контекстном меню; расположение этой команды немного отличается в Mac OS X 10.6.x от более ранних версий. Это же действие можно выполнить с помощью сторонних утилит, таких как Hazel. [19]
Горячие клавиши запуска
Сочетания клавиш можно назначать для AppleScripts в меню сценариев с помощью панели настроек клавиатуры и мыши в системных настройках . Кроме того, доступны различные сторонние утилиты — Alfred , [20] FastScripts, [21] Keyboard Maestro , [22] QuicKeys, [23] Quicksilver , [24] TextExpander [25] — которые могут запускать AppleScripts по требованию с помощью комбинаций клавиш.
Меню скрипта
Это системное меню обеспечивает доступ к AppleScripts из строки меню macOS, видимой независимо от того, какое приложение запущено. [26] (Кроме того, многие приложения Apple, некоторые сторонние приложения и некоторые надстройки предоставляют свои собственные меню сценариев. Они могут быть активированы разными способами, но все функционируют по сути одинаково.) Выбор сценария в меню сценариев запускает его. Начиная с Mac OS X 10.6.x, системное меню сценариев можно включить из настроек Script Editor ; в предыдущих версиях Mac OS X его можно было включить из приложения AppleScript Utility. При первом включении меню сценариев отображает библиотеку по умолчанию довольно общих функциональных AppleScripts, которые также можно открыть в Script Editor и использовать в качестве примеров для изучения AppleScript. Скрипты можно организовать так, чтобы они появлялись в меню только тогда, когда определенные приложения находятся на переднем плане.
Командная строка Unix и launchd
AppleScripts можно запускать из командной строки Unix или из launchd для запланированных задач, [5] : 716  с помощью инструмента командной строки osascript. [27] Инструмент osascript может запускать скомпилированные скрипты (файлы .scpt) и простые текстовые файлы (файлы .applescript — они компилируются инструментом во время выполнения). Приложения скриптов можно запускать с помощью команды Unix open.

Ресурсы AppleScript

Библиотеки AppleScript

Повторно используемые модули AppleScript (доступны с OS X Mavericks ), написанные на AppleScript или AppleScriptObjC и сохраненные как файлы скриптов или пакеты в определенных местах, [28] которые могут быть вызваны из других скриптов. При сохранении в виде пакета библиотека может включать файл словаря AppleScript (sdef), [29] таким образом функционируя как дополнение к скрипту, но написанное на AppleScript или AppleScriptObjC.

AppleScript Studio

Фреймворк для присоединения интерфейсов Cocoa к приложениям AppleScript, часть пакета Xcode в Mac OS X 10.4 и 10.5, теперь устарел в пользу AppleScriptObjC. [30] : 438 

AppleScriptObjC

Фреймворк разработки программного обеспечения Cocoa , также называемый AppleScript/Objective-C или ASOC, [31] часть пакета Xcode со времен Mac OS X Snow Leopard . [32] AppleScriptObjC позволяет AppleScripts напрямую использовать классы и методы Cocoa. [33] В следующей таблице показана доступность AppleScriptObjC в различных версиях macOS: [34]

AppleScriptObjC можно использовать во всех последующих версиях Mac OS X.

Автоматизатор

Графическая, модульная среда редактирования, в которой рабочие процессы строятся из действий . Она предназначена для дублирования многих функций AppleScript без необходимости знания программирования. В Automator есть действие, специально разработанное для хранения и запуска AppleScripts, для задач, которые слишком сложны для упрощенной структуры Automator. [35]

Скриптовые основные системные приложения

Эти фоновые приложения, упакованные с macOS, используются для того, чтобы позволить AppleScript получить доступ к функциям, которые обычно не могут быть заскриптованы. Начиная с Mac OS X 10.6.3 они включают в себя заскриптованные приложения для:

  • VoiceOver (пакет для голосового управления и чтения с экрана Брайля с возможностью записи сценариев)
  • Системные события (управление несценарными приложениями и доступ к определенным системным функциям и базовым файловым операциям)
  • Утилита настройки принтера (программируемая утилита для обработки заданий печати)
  • События изображения (основная манипуляция изображениями)
  • HelpViewer (программируемая утилита для отображения справочной информации)
  • События базы данных (минимальный интерфейс базы данных SQLite3)
  • Утилита AppleScript (для написания сценариев некоторых настроек, связанных с AppleScript)

Скриптовые дополнения (OSAX)

Плагины для AppleScript, разработанные Apple или третьими лицами. [36] Они предназначены для расширения встроенного набора команд, расширяя возможности AppleScript и делая его несколько менее зависимым от функциональности, предоставляемой приложениями. macOS включает в себя набор дополнений к скриптам, называемых стандартными дополнениями ( StandardAdditions.osax ), которые добавляют набор команд и классов, не являющихся частью основных функций AppleScript, включая диалоги взаимодействия с пользователем, чтение и запись файлов, команды файловой системы, функции даты, а также текстовые и математические операции; без этого OSAX AppleScript не имел бы возможности выполнять многие основные действия, напрямую не предоставляемые приложением.

Основы языка

Классы (типы данных)

Хотя приложения могут определять специализированные классы (или типы данных), AppleScript также имеет ряд встроенных классов. Эти базовые классы данных напрямую поддерживаются языком и, как правило, универсально распознаются скриптовыми приложениями. Наиболее распространенными являются следующие:

Языковые структуры

Многие процессы AppleScript управляются блоками кода, где блок начинается с команды command и заканчивается оператором end command . Наиболее важные структуры описаны ниже.

Условные предложения

AppleScript предлагает два вида условных операторов.

-- Простое условие , если  x  <  1000  , то  присвоить  x  значение  x  +  1-- Составное условие , если  x  больше  3  , то  -- команды, иначе  -- другие команды заканчиваются  , если

Петли

Цикл повтора AppleScript существует в нескольких немного отличающихся вариантах. Все они выполняют блок между строками повтора и конца повтора несколько раз. Цикл может быть преждевременно остановлен командой exit repeat .

Повторяйте вечно.

повторить  -- команды, которые нужно повторить, конец  повтора

Повторите заданное количество раз.

повторить  10  раз  -- команды, которые нужно повторить , конец  повтора

Условные циклы. Блок внутри цикла repeat while выполняется до тех пор, пока условие оценивается как истинное. Условие переоценивается после каждого выполнения блока. Цикл repeat until в остальном идентичен, но блок выполняется до тех пор, пока условие оценивается как ложное.

установить  x  на  5 повторять  пока  x  >  0  установить  x  на  x  -  1 конец  повторитьустановить  x  на  5 повторять  пока  x   0  установить  x  на  x  -  1 конец  повторить

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

-- повторить блок 2000 раз, i получает все значения от 1 до 2000 повторить  с  i  от  1  до  2000  -- команды, которые нужно повторить конец  повтора-- повторить блок 4 раза, i получает значения 100, 75, 50 и 25 повторить  с  i  от  100  до  25  по  - 25  -- команды, которые нужно повторить конец  повтора

Перечислить список. На каждой итерации установить loopVariable на новый элемент в данном списке

установить  total  на  0 повторить  с  loopVariable  в  { 1 ,  2 ,  3 ,  4 ,  5 } установить  total  на  total  +  loopVariable конец  повтора

Одной из важных вариаций этой блочной структуры является форма onend ... блоков, которые используются для определения обработчиков (функционально-подобных подпрограмм). Обработчики начинаются с on functionName() и заканчиваются end functionName и не выполняются как часть обычного потока скрипта, если только они не вызваны откуда-то из скрипта.

Обработчики также можно определить с помощью «to» вместо «on» и написать так, чтобы они принимали помеченные параметры, не заключенные в скобки.

В AppleScript существует четыре типа предопределенных обработчиков — запуск, открытие, бездействие и выход — каждый из которых создается таким же образом, как обработчик запуска, показанный выше.

Запустить обработчик
Определяет основной код скрипта, который вызывается при запуске скрипта. Блоки обработчиков запуска являются необязательными, если только аргументы не передаются скрипту. Если явный блок обработчика запуска пропущен, то весь код, который не содержится внутри блоков обработчиков, выполняется так, как если бы он был в неявном обработчике запуска.
Открытый обработчик
Определено с помощью «on open theItems».
при  открытии  Элементов  повторить  с  этим Элементом  в  Элементах  указать  приложению  "Finder"  обновить  этот Элемент  конец повторить конец открыть    

Когда скрипт, содержащий «обработчик открытия», сохраняется как апплет, апплет становится дроплетом. Дроплет можно определить в Finder по его значку, который включает стрелку, указывающую на то, что на значок можно перетаскивать элементы. Обработчик открытия дроплета выполняется, когда файлы или папки перетаскиваются на значок дроплета. Ссылки на элементы, перетаскиваемые на значок дроплета, передаются скрипту дроплета в качестве параметра обработчика открытия. Дроплет также можно запустить так же, как обычный апплет, выполнив его обработчик запуска.

Обработчик простоя
Подпрограмма, которая периодически запускается системой, когда приложение бездействует.
при простое  --код для выполнения после завершения выполнения скрипта  return  60  -- количество секунд для паузы перед повторным выполнением обработчика простоя end idle

Обработчик простоя может использоваться в апплетах или дроплетах, сохраненных как апплеты с сохранением в открытом состоянии, и полезен для скриптов, которые отслеживают определенные данные или события. Продолжительность времени простоя по умолчанию составляет 30 секунд, [39], но ее можно изменить, включив оператор 'return x' в конец подпрограммы, где x — это количество секунд, которое система должна ждать перед повторным запуском обработчика.

Выйти из обработчика
Обработчик, который запускается, когда апплет получает запрос Quit. Это может использоваться для сохранения данных или выполнения других завершающих задач перед выходом.
on  quit  -- команды, которые необходимо выполнить перед завершением работы скрипта  continue  quit  -- требуется для фактического завершения работы скрипта end  quit
Объекты скрипта

Объекты скрипта могут быть определены явно с использованием синтаксиса:

скрипт  scriptName  — команды и обработчики, специфичные для скрипта end  script

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

Разная информация

скажите  приложению  "Finder"  установить  x  в  myHandler  ( ) -- или установите x в myHandler ( ) моего end tell        на  myHandler ()  --commands конец  myHandler

Использование той же методики для написания команд добавления сценариев может уменьшить количество ошибок и повысить производительность.

скажите  приложению  "Finder" установить  anyNumber  на  мой  ( случайное число  от  5  до  50 ) конец  скажите

Открытая архитектура сценариев

Важным аспектом реализации AppleScript является архитектура Open Scripting Architecture ( OSA ). [40] Apple предоставляет OSA для других языков сценариев и сторонних продуктов сценариев/автоматизации, таких как QuicKeys и UserLand Frontier, для функционирования на равных правах с AppleScript. AppleScript был реализован как компонент сценариев , и основные спецификации для сопряжения таких компонентов с OSA были общедоступными, что позволяло другим разработчикам добавлять свои собственные компоненты сценариев в систему. Открытые клиентские API для загрузки, сохранения и компиляции сценариев будут работать одинаково для всех таких компонентов, что также означало, что апплеты и дроплеты могли содержать сценарии на любом из этих языков сценариев.

Одной из особенностей OSA являются скриптовые дополнения, или OSAX для Open Scripting Architecture eXtension , [36], которые были вдохновлены внешними командами HyperCard. Скриптовые дополнения — это библиотеки , которые позволяют программистам расширять функции AppleScript. Команды, включенные в качестве скриптовых дополнений, доступны для всей системы и не зависят от приложения (см. также § Библиотеки AppleScript). Редактор AppleScript также может напрямую редактировать и запускать некоторые языки OSA.

JavaScript для автоматизации

В OS X Yosemite и более поздних версиях macOS компонент JavaScript for Automation ( JXA ) остается единственной серьезной альтернативой языку OSA AppleScript, [14] хотя версии Perl , Python , Ruby и Tcl для Macintosh поддерживают собственные средства работы с событиями Apple, не являясь компонентами OSA. [30] : 516 

JXA также предоставляет интерфейс для иностранного языка Objective-C (и языка C). [14] Будучи средой, основанной на движке JavaScriptCore WebKit, набор функций JavaScript синхронизирован с движком браузера Safari. JXA предоставляет систему модулей JavaScript, а также возможно использовать модули CommonJS через браузерify. [41]

Ограничения AppleScript

Язык сценариев AppleScript выделяется своей способностью вызывать несколько приложений, но не был разработан для выполнения функций, специфичных для конкретных задач. Так, например, вы не можете использовать AppleScript для эффективного выполнения интенсивных математических операций или длительной обработки текста. Однако вы можете использовать AppleScript в сочетании со скриптами оболочки, скриптами Perl и другими языками сценариев. Это позволяет вам работать с наиболее эффективным языком для поставленной задачи.

Смотрите также

Ссылки

  1. ^ abc Кук, Уильям (2007). "AppleScript" (PDF) . Труды третьей конференции ACM SIGPLAN по истории языков программирования . Ассоциация вычислительной техники . стр. 1–21. doi :10.1145/1238844.1238845. ISBN 9781595937667. S2CID  220938191.
  2. ^ Apple Inc. (2022). Редактор скриптов (версия 2.11). Получено 11 ноября 2022 г.
  3. ^ "Дата выпуска OS X 10.10 Yosemite". 16 октября 2014 г. Получено 16 ноября 2014 г.
  4. ^ abcd Goldstein, Adam (2005). AppleScript: отсутствующее руководство. Севастополь, Калифорния: O'Reilly Media . ISBN 0596008503. OCLC  56912218.
  5. ^ abcdefghi Сандерсон, Хамиш; Розенталь, Ханаан (2009). «Взаимодействие с командной строкой Unix». Изучите AppleScript (3-е изд.). Беркли: Apress . С. 863–896. doi :10.1007/978-1-4302-2362-7_27. ISBN 9781430223610. OCLC  308193726.
  6. ^ Флинн, Лори (27 февраля 1989 г.). «Apple размышляет о стандартизации HyperTalk». InfoWorld . Т. 11, № 9. стр. 31.
  7. ^ "Справочник команд AppleScript Language Guide: do shell script". developer.apple.com . Получено 15 сентября 2019 г. .
  8. ^ "Величайшие хиты Apple: 30 значимых продуктов". macworld.com . Получено 12 сентября 2019 г. .
  9. ^ Грубер, Джон (март 2013 г.). «Маловероятная живучесть AppleScript». Macworld . 30 (3): 100.
  10. ^ Лавджой, Бен (17 ноября 2016 г.). «Сэл Согоян говорит: «Спросите Apple» о будущем автоматизации пользователей Mac, поскольку компания ликвидирует должность». 9to5mac.com . Получено 8 мая 2017 г.
  11. ^ Эванс, Джонни (17 ноября 2016 г.). «Неужели Apple действительно хочет убить Automator, AppleScript? Шокирующее увольнение ветерана-гуру разработчиков Apple вызвало шок во всем сообществе Mac». Computerworld .com . Получено 8 мая 2017 г.
  12. ^ Gamet, Jeff (23 ноября 2016 г.). «Намерение Apple не то же самое, что обязательство по автоматизации Mac». macobserver.com . Получено 8 мая 2017 г.
  13. ^ "Scriptable Applications". developer.apple.com . Получено 26 июля 2018 г. .
  14. ↑ abc Сиракузы, Джон (16 октября 2014 г.). «OS X 10.10 Yosemite: обзор Ars Technica: автоматизация JavaScript». Арс Техника . Проверено 8 мая 2017 г.
  15. ^ "Домашняя страница Smile and SmileLab". satimage.fr . Получено 8 мая 2017 г. .
  16. ^ "ASObjC Explorer 4 Discontinued". macosxautomation.com . Архивировано из оригинала 21 июня 2017 г. Получено 8 мая 2017 г.
  17. ^ «Журнал Марка Олдрита » FaceSpan». blog.latenightsw.com . Получено 8 мая 2017 г. .
  18. ^ "Руководство по языку AppleScript: Справочник действий с папками". developer.apple.com . Получено 8 мая 2017 г. .
  19. Миллер, Дэн (22 декабря 2010 г.). «Обзор Capsule: Hazel 2.3». Macworld .com . Получено 8 мая 2017 г. .
  20. Бим, Брайан (10 февраля 2015 г.). «Обзор Alfred: этот лаунчер приложений для Mac продолжает блистать, но Alfred Remote не дотягивает». Macworld .com . Получено 10 мая 2017 г.
  21. ^ Фрейкс, Дэн (2 июня 2011 г.). "Обзор Capsule: FastScripts 2.5". Macworld .com . Получено 8 мая 2017 г. .
  22. Брин, Кристофер (4 июня 2013 г.). «Mac Gems: Keyboard Maestro 6 — гений в выполнении повторяющихся задач». Macworld .com . Получено 10 мая 2017 г.
  23. ^ Брин, Кристофер (7 мая 2010 г.). «Обзор Capsule: QuicKeys 4». Macworld .com . Получено 8 мая 2017 г. .
  24. ^ "AppleScripts – Quicksilver Wiki". qsapp.com . Получено 10 мая 2017 г. .
  25. ^ Флейшман, Гленн (12 июня 2015 г.). "Обзор TextExpander 5". Macworld .com . Получено 8 мая 2017 г. .
  26. ^ «Руководство по написанию сценариев автоматизации для Mac: использование общесистемного меню сценариев». developer.apple.com . Получено 8 мая 2017 г. .
  27. ^ "osascript(1) Страница руководства Mac OS X". www.unix.com . Получено 23 июля 2024 г. .
  28. ^ "AppleScript Libraries". macosautomation.com . Архивировано из оригинала 26 июля 2020 г. . Получено 8 мая 2017 г. .
  29. ^ "WWDC 2013 Session 416: Introducing AppleScript Libraries". asciiwwdc.com . Получено 8 мая 2017 г. .
  30. ^ ab Neuburg, Matt (2006). AppleScript: полное руководство (2-е изд.). Пекин: O'Reilly Media . ISBN 0596102119. OCLC  68694976.
  31. ^ Цай, Майкл (29 сентября 2014 г.). «AppleScript и Yosemite». mjtsai.com . Получено 9 мая 2017 г. .
  32. ^ "AppleScriptObjC Release Notes". developer.apple.com . Получено 8 мая 2017 г. .
  33. ^ Уолди, Бен (6 сентября 2012 г.). «Создание базового приложения AppleScriptObjC (Cocoa-AppleScript) с помощью Xcode». peachpit.com . Получено 9 мая 2017 г. .
  34. ^ Таблица адаптирована из: Naganoya, Takaaki. "ASObjCExtras Scripting Guide" (PDF) . piyocast.com . Архивировано (PDF) из оригинала 9 октября 2022 г. . Получено 9 мая 2017 г. .
  35. ^ "Введение в Automator AppleScript Actions Tutorial". developer.apple.com . Получено 8 мая 2017 г. .
  36. ^ ab "Техническое примечание TN1164: Дополнения к скриптам для Mac OS X". developer.apple.com . Получено 8 мая 2017 г. .
  37. ^ "AppleScript Release Notes: 10.5 Changes". developer.apple.com . Получено 8 мая 2017 г. .
  38. ^ "Файл POSIX — Справочник классов — Руководство по языку AppleScript". developer.apple.com . Получено 8 января 2018 г. .
  39. ^ "Руководство по языку AppleScript: обработчики в скриптовых приложениях". developer.apple.com . Получено 21 июля 2013 г. .
  40. ^ «Обзор AppleScript: архитектура открытых сценариев». developer.apple.com . Получено 8 мая 2017 г. .
  41. ^ "Импорт скриптов". GitHub . JXA-Cookbook. 6 декабря 2019 г. . Получено 9 декабря 2019 г. .

Дальнейшее чтение

Внешние ссылки