AppleScript
Парадигма | Программирование на естественном языке , Сценарии |
---|---|
Разработчик | Apple Инк. |
Впервые появился | 1993 год [1] |
Стабильная версия | |
Дисциплина набора текста | Слабый , динамичный |
ТЫ | Система 7 , Mac OS 8 , Mac OS 9 , macOS |
Лицензия | Собственная собственность (детали доступны по лицензии APSL ) |
Расширения имен файлов | .scpt, .scptd, .applescript |
Веб-сайт | разработчик |
Под влиянием | |
Естественный язык , HyperTalk |
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 рассматривала возможность использования HyperCard компании HyperTalk языка сценариев в качестве стандартного языка для разработки конечными пользователями всей компании и в своей Mac OS классической операционной системе , а также для межпроцессного взаимодействия между продуктами Apple и сторонних производителей. [6] HyperTalk может использоваться новичками для программирования стека HyperCard. Инженеры Apple осознали, что аналогичный, но более объектно-ориентированный язык сценариев можно разработать для использования с любым приложением , и проект AppleScript родился как побочный результат исследовательской работы по модернизации Macintosh в целом и, наконец, стал его частью. Системы 7 . [1]
AppleScript был выпущен в октябре 1993 года как часть Системы 7.1.1 (Система 7 Pro, первое крупное обновление Системы 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 и сценариями оболочки .
Основные понятия
[ редактировать ]AppleScript был разработан для использования в качестве доступного для конечных пользователей языка сценариев, предлагающего пользователям интеллектуальный механизм управления приложениями, а также доступа и изменения данных и документов. AppleScript использует события Apple — набор стандартизированных форматов данных, которые операционная система Macintosh использует для отправки информации в приложения, что примерно аналогично отправке запросов XPath через XML-RPC в мире веб-сервисов . [5] : xxvi События Apple позволяют сценарию работать с несколькими приложениями одновременно, передавая данные между ними, что позволяет выполнять сложные задачи без участия человека. [4] Например, AppleScript для создания простой веб-галереи может выполнять следующие действия:
- Откройте фотографию в приложении для редактирования фотографий (отправив этому приложению событие Apple Open File ).
- Попросите приложение для редактирования фотографий манипулировать изображением (например, уменьшить его разрешение, добавить рамку, добавить ссылку на фотографию).
- Сообщите приложению для редактирования фотографий, чтобы оно сохранило измененное изображение в файле в другой папке (отправив этому приложению событие «Сохранить» и/или «Закрыть Apple»).
- Отправьте новый путь к файлу (через другое событие Apple) в текстовый редактор или приложение веб-редактора.
- Скажите этому приложению-редактору записать ссылку на фотографию в HTML-файл.
- Повторите описанные выше действия для всей папки изображений (сотни или даже тысячи фотографий).
- Загрузите HTML-файл и папку с отредактированными фотографиями на веб-сайт, отправив события Apple графическому FTP- клиенту, используя встроенные команды AppleScript или отправив события Apple в FTP-утилиты Unix.
Для пользователя сотни или тысячи шагов в нескольких приложениях сводятся к одному действию сценария, а задача выполняется за гораздо меньшее время и без возможности случайной человеческой ошибки. Большой сложный сценарий можно разработать для запуска только один раз, в то время как другие сценарии будут использоваться снова и снова.
Элементы приложения, доступные для сценариев, видны в словаре сценариев приложения (распространяется как часть приложения), который можно просмотреть в любом редакторе сценариев . Элементы обычно группируются в комплекты в соответствии со свободными функциональными связями между ними. В любом наборе присутствуют два основных типа элементов: классы и команды.
- Классы — это объекты, доступные для сценариев — например, приложение для редактирования текста почти наверняка будет иметь классы для окон, документов и текстов — и эти классы будут иметь свойства, которые можно изменить (размер окна, цвет фона документа, размер шрифта текста и т. д.). и может содержать другие классы (окно будет содержать один или несколько документов, документ будет содержать текст, текстовый объект будет содержать абзацы, слова и символы).
- Команды , напротив, представляют собой инструкции, которые можно передавать объектам, допускающим сценарии. Общий формат блока AppleScript — указать объекту, поддерживающему сценарий, выполнить команду.
Все приложения, поддерживающие сценарии, имеют несколько общих команд и объектов, обычно называемых стандартным набором — команды для открытия, закрытия или сохранения файла, печати чего-либо, выхода, установки данных в переменные, — а также базовый объект приложения , который дает скриптовые свойства самого приложения. Многие приложения имеют множество наборов, способных выполнять любую задачу, которую может выполнить само приложение. В исключительных случаях приложения могут поддерживать плагины, включающие собственные словари сценариев.
AppleScript был разработан с возможностью интуитивного создания сценариев путем записи действий пользователя. Такая возможность записи AppleScript должна быть встроена в приложение — приложение должно поддерживать события Apple и запись AppleScript; [13] поскольку Finder поддерживает запись AppleScript, он может быть полезен для справки. Когда редактор AppleScript (редактор сценариев) открыт и нажата кнопка «Запись», действия пользователя для записываемых приложений преобразуются в эквивалентные команды AppleScript и выводятся в окно редактора сценариев. Полученный сценарий можно сохранить и повторно запустить, чтобы дублировать исходные действия, или изменить, чтобы он был более полезен в целом.
Комментарии
[ редактировать ]Комментарии можно оставлять несколькими способами. Однострочный комментарий может начинаться с двух дефисов ( -- ). В AppleScript 2.0, впервые выпущенном в Mac OS X Leopard , он также может начинаться со знака числа (#). Это позволяет хранить автономный сценарий AppleScript в виде исполняемого текстового файла, начинающегося со строки shebang. #!/usr/bin/osascript
Пример:
--This is a one line comment
# So is this! (in Mac OS X Leopard or later)
Для комментариев, занимающих несколько строк, AppleScript использует круглые скобки со звездочками внутри. Пример:
(* This is a
multiple
line
comment *)
Привет, мир!
[ редактировать ]В AppleScript традиционный «Hello, World!» Программа может быть написана во многих различных формах, включая:
display dialog "Hello, world!" -- a modal window with "OK" and "Cancel" buttons
-- or
display alert "Hello, world!" -- a modal window with a single "OK" button and an icon representing the app displaying the alert
-- or
say "Hello, world!" -- an audio message using a synthesized computer voice
AppleScript имеет несколько вариантов пользовательского интерфейса, включая диалоговые окна, оповещения и список вариантов выбора. (Символ ¬, полученный при вводе ⌥ Option+ return в редакторе сценариев означает продолжение одного оператора на нескольких строках.)
-- Dialog
set dialogReply to display dialog "Dialog Text" ¬
default answer "Text Answer" ¬
hidden answer false ¬
buttons {"Skip", "Okay", "Cancel"} ¬
default button "Okay" ¬
cancel button "Skip" ¬
with title "Dialog Window Title" ¬
with icon note ¬
giving up after 15
-- Choose from list
set chosenListItem to choose from list {"A", "B", "3"} ¬
with title "List Title" ¬
with prompt "Prompt Text" ¬
default items "B" ¬
OK button name "Looks Good!" ¬
cancel button name "Nope, try again" ¬
multiple selections allowed false ¬
with empty selection allowed
-- Alert
set resultAlertReply to display alert "Alert Text" ¬
as warning ¬
buttons {"Skip", "Okay", "Cancel"} ¬
default button 2 ¬
cancel button 1 ¬
giving up after 2
Каждый метод взаимодействия с пользователем может возвращать значения нажатых кнопок, выбранных элементов или введенного текста для дальнейшей обработки. Например:
display alert "Hello, world!" buttons {"Rudely decline", "Happily accept"}
set theAnswer to button returned of the result
if theAnswer is "Happily accept" then
beep 5
else
say "Piffle!"
end if
Метафора естественного языка
[ редактировать ]В то время как события Apple — это способ отправки сообщений в приложения, AppleScript — это особый язык, предназначенный для отправки событий Apple. В целях простоты использования для начинающих язык AppleScript разработан на основе естественного языка метафоры , точно так же, как графический интерфейс пользователя разработан на основе метафоры рабочего стола . Хорошо написанный AppleScript должен быть достаточно понятным, чтобы его мог прочитать и понять любой, и легко редактировать. Язык во многом основан на языке HyperTalk HyperCard, расширенном для обозначения не только мира карт и стопок HyperCard, но теоретически также и любого документа. С этой целью команда AppleScript представила объектную модель AppleEvent (AEOM), которая определяет объекты, которые «знает» любое конкретное приложение.
В основе языка AppleScript лежит использование терминов, которые действуют как существительные и глаголы, которые можно комбинировать. Например, вместо другого глагола для печати страницы, документа или диапазона страниц (например, printPage, printDocument, printRange), AppleScript использует один глагол «печатать», который можно комбинировать с объектом, например страницей, документ или диапазон страниц.
print page 1
print document 2
print pages 1 thru 5 of document 2
Обычно AEOM определяет ряд объектов, например «документ» или «абзац», и соответствующие действия, например «вырезать» и «закрыть». Система также определяет способы обращения к свойствам объектов, поэтому можно ссылаться на «третий абзац документа «Добрый день»» или «цвет последнего слова главного окна». приложения AEOM использует словарь , чтобы связать события Apple с удобочитаемыми терминами, позволяя осуществлять перевод туда и обратно между читаемыми человеком событиями AppleScript и событиями Apple с байт-кодом . Чтобы узнать, какие элементы программы можно использовать для сценариев, можно просмотреть словари поддерживаемых приложений. (В приложениях Xcode и Script Editor это находится в разделе «Файл» → «Открыть словарь» .)
Чтобы указать, какое приложение должно быть целью такого сообщения, AppleScript использует конструкцию «tell»:
tell application "Microsoft Word"
quit
end tell
Альтернативно, сообщение можно выразить в одной строке, используя инфинитив :
tell application "Microsoft Word" to quit
Для событий в «Core Suite» (активация, открытие, повторное открытие, закрытие, печать и выход) приложение может быть предоставлено как прямой объект для транзитивных команд:
quit application "Microsoft Word"
Понятие иерархии объектов можно выразить с помощью вложенных блоков:
tell application "QuarkXPress"
tell document 1
tell page 2
tell text box 1
set word 5 to "Apple"
end tell
end tell
end tell
end tell
Понятие иерархии объектов также может быть выражено с помощью вложенных предложных фраз или серии притяжательных падежей:
pixel 7 of row 3 of TIFF image "my bitmap"
TIFF image "my bitmap"'s 3rd row's 7th pixel
которые на другом языке программирования могут быть выражены как последовательные вызовы методов , как в этом псевдокоде :
getTIFF("my bitmap").getRow(3).getPixel(7);
AppleScript включает синтаксис для порядкового счета (первый абзац), а также кардинального счета (первый абзац). Аналогично, сами числа могут называться текстовыми или цифровыми: поддерживаются все «пять», «пятый» и «5»; они являются синонимами в AppleScript. Кроме того, слово «the» по закону может использоваться в любом месте сценария для улучшения читаемости: оно не влияет на функциональность сценария.
Примеры скриптов
[ редактировать ]Безопасный калькулятор:
tell application "Finder"
-- Set variables
set the1 to text returned of (display dialog "1st" default answer "Number here" buttons {"Continue"} default button 1)
set the2 to text returned of (display dialog "2nd" default answer "Number here" buttons {"Continue"} default button 1)
try
set the1 to the1 as integer
set the2 to the2 as integer
on error
display dialog "You may only input numbers into a calculator." with title "ERROR" buttons {"OK"} default button 1
return
end try
-- Add?
if the button returned of (display dialog "Add?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 + the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Subtract?
else if the button returned of (display dialog "Subtract?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 - the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Multiply?
else if the button returned of (display dialog "Multiply?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 * the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Divide?
else if the button returned of (display dialog "Divide?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 / the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
else
delay 1
say "You haven't selected a function. The operation has cancelled."
end if
end tell
Простая последовательность диалоговых окон с именем пользователя и паролем . Здесь имя пользователя — John, а пароль — app123:
tell application "Finder"
set passAns to "app123"
set userAns to "John"
if the text returned of (display dialog "Username" default answer "") is userAns then
display dialog "Correct" buttons {"Continue"} default button 1
if the text returned of (display dialog "Username : John" & return & "Password" default answer "" buttons {"Continue"} default button 1 with hidden answer) is passAns then
display dialog "Access granted" buttons {"OK"} default button 1
else
display dialog "Incorrect password" buttons {"OK"} default button 1
end if
else
display dialog "Incorrect username" buttons {"OK"} default button 1
end if
end tell
Инструменты разработки
[ редактировать ]Редакторы сценариев
[ редактировать ]Редакторы сценариев предоставляют унифицированную среду программирования для AppleScripts, включая инструменты для создания, проверки, компиляции, запуска и отладки сценариев. Они также предоставляют механизмы для открытия и просмотра словарей AppleScript из приложений, поддерживающих сценарии, сохранения сценариев в различных форматах (скомпилированные файлы сценариев, пакеты приложений, пакеты сценариев и простые текстовые файлы) и обычно предоставляют такие функции, как подсветка синтаксиса и предварительно написанные фрагменты кода. .
От Apple
[ редактировать ]- Редактор AppleScript (редактор сценариев)
- Редактор AppleScript, входящий в состав macOS, называется AppleScript Editor в Mac OS X Snow Leopard (10.6) до OS X Mavericks (10.9) и редактор сценариев во всех более ранних и поздних версиях macOS. Сценарии пишутся в окнах редактирования документов, где их можно скомпилировать и запустить, и эти окна содержат различные панели, на которых записанная информация, результаты выполнения и другая информация доступны для целей отладки. Доступ к словарям сценариев и заранее написанным фрагментам кода доступен через меню приложения. Начиная с OS X Yosemite (10.10), редактор сценариев включает возможность написания как на AppleScript, так и на JavaScript . [14]
- Xcode
- Набор инструментов для разработки приложений с функциями редактирования AppleScripts или создания полноценных приложений, написанных с помощью AppleScript.
От третьих лиц
[ редактировать ]- Отладчик сценариев от Late Night Software
- Сторонняя коммерческая среда разработки для AppleScript. Script Debugger — это более продвинутая среда AppleScript, которая позволяет разработчику сценариев отлаживать AppleScript с помощью пошаговых операций , точек останова , входа и выхода из функций/подпрограмм, отслеживания переменных и т. д. Script Debugger также содержит расширенный браузер словаря, который позволяет пользователю видеть словарь в действии в реальных ситуациях. То есть, вместо простого перечисления того, что охватывает словарь, можно, например, открыть документ в Pages и посмотреть, как термины словаря применяются к этому документу, что упрощает определение того, какие части словаря использовать. Script Debugger не предназначен для создания сценариев с графическим интерфейсом, за исключением базовых предупреждений и диалоговых окон, но больше ориентирован на кодирование и отладку сценариев.
- Улыбка и SmileLab
- Сторонняя бесплатная/коммерческая IDE для AppleScript, полностью написанная на AppleScript. [15] Smile бесплатен и в первую очередь предназначен для разработки на AppleScript. SmileLab — это коммерческое программное обеспечение с обширными дополнениями для численного анализа, построения графиков, автоматизации машин и веб-производства. Smile и SmileLab используют набор различных окон — окна AppleScript для запуска и сохранения полных сценариев, терминалы AppleScript для построчного тестирования кода, окна Unicode для работы с текстом и XML. Пользователи могут создавать сложные интерфейсы, называемые диалогами, для ситуаций, когда встроенных диалогов в AppleScript недостаточно.
- ASObjC Explorer 4 от Шейна Стэнли
- Сторонняя коммерческая среда разработки для AppleScript, выпуск которой прекращен, особенно для AppleScriptObjC . [16] Основная функция Cocoa - регистрация объектов/событий, отладка и завершение кода. Пользователи могут читать события и объекты Cocoa, как и другие приложения, поддерживающие сценарии. Этот инструмент изначально был создан для библиотек AppleScript (доступен в OS X Mavericks ). Библиотеки AppleScript предназначены для многократного использования компонентов AppleScript и поддерживают встроенный словарь AppleScript (sdef). ASObjC Explorer 4 также может быть внешним редактором сценариев Xcode.
- FaceSpan от Late Night Software
- Сторонняя коммерческая среда разработки, выпуск которой прекращен, для создания приложений AppleScript с графическим пользовательским интерфейсом. [17]
Программы запуска скриптов
[ редактировать ]AppleScripts можно запускать из редактора сценариев, но обычно удобнее запускать сценарии напрямую, не открывая приложение-редактор сценариев. Для этого есть несколько вариантов:
- Апплеты
- AppleScripts можно сохранить из редактора сценариев как приложения (называемые апплетами или каплями , когда они принимают ввод посредством перетаскивания ). [5] : 69 Апплеты можно запускать из Dock , из панели инструментов окон Finder , из Spotlight , из сторонних средств запуска приложений или из любого другого места, где можно запускать приложения.
- Действия с папками
- Используя действия с папками AppleScript, сценарии можно запускать при определенных изменениях в папках (например, при добавлении или удалении файлов). [18] Действия над папкой можно назначить, щелкнув папку и выбрав «Настройка действий с папкой...» в контекстном меню; Расположение этой команды в Mac OS X 10.6.x немного отличается от более ранних версий. Этого же действия можно добиться с помощью сторонних утилит, таких как Hazel. [19]
- Горячие клавиши запуска
- Сочетания клавиш можно назначить AppleScripts в меню сценариев с помощью клавиатуры и мыши панели настроек в Системных настройках . Кроме того, доступны различные сторонние утилиты — Alfred , [20] Фастскрипты, [21] Клавишный маэстро , [22] Быстрые клавиши, [23] Ртуть , [24] TextExpander [25] — который может запускать AppleScripts по требованию с помощью комбинаций клавиш.
- Меню сценариев
- Это общесистемное меню обеспечивает доступ к AppleScripts из строки меню macOS, видимой независимо от того, какое приложение запущено. [26] (Кроме того, многие приложения Apple, некоторые сторонние приложения и некоторые надстройки имеют собственные меню сценариев. Их можно активировать по-разному, но все они работают по существу одинаково.) Выбор сценария в меню сценариев. запускает его. Начиная с Mac OS X 10.6.x, общесистемное меню сценариев можно включить в настройках редактора сценариев ; в предыдущих версиях Mac OS X его можно было включить из приложения AppleScript Utility. При первом включении в меню сценариев отображается библиотека по умолчанию довольно общих функциональных AppleScripts, которую также можно открыть в редакторе сценариев и использовать в качестве примеров для изучения AppleScript. Сценарии можно организовать так, чтобы они появлялись в меню только тогда, когда определенные приложения находятся на переднем плане.
- Командная строка Unix и запуск
- AppleScripts можно запускать из командной строки Unix или из launchd для запланированных задач. [5] : 716 с помощью инструмента командной строки osascript. [27] Инструмент osascript может запускать скомпилированные сценарии (файлы .scpt) и обычные текстовые файлы (файлы .applescript — они компилируются инструментом во время выполнения). Приложения-скрипты можно запускать с помощью команды open Unix.
Ресурсы AppleScript
[ редактировать ]Библиотеки AppleScript
[ редактировать ]Повторно используемые модули AppleScript (доступны начиная с OS X Mavericks ), написанные на AppleScript или AppleScriptObjC и сохраненные в виде файлов сценариев или пакетов в определенных местах. [28] который можно вызвать из других скриптов. При сохранении в виде пакета библиотека может включать файл словаря AppleScript (sdef), [29] таким образом, он функционирует как дополнение к скрипту , но написан на AppleScript или AppleScriptObjC.
AppleScript Студия
[ редактировать ]Платформа для подключения интерфейсов 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]
В Xcode | В апплетах | В AppleScript Библиотеки |
В редакторе скриптов | |
---|---|---|---|---|
10.6 | ||||
10.7 | ||||
10.8 | ||||
10.9 | ||||
10.10 |
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 также имеет ряд встроенных классов. Эти базовые классы данных напрямую поддерживаются языком и обычно распознаются приложениями, поддерживающими сценарии. Наиболее распространены следующие:
- Базовые объекты
- application : объект приложения, используемый в основном как спецификатор для операторов Tell (
tell application "Finder" …
). - скрипт : объект скрипта. Объекты скриптов — это контейнеры для скриптов. Каждый AppleScript создает объект сценария при запуске, и объекты сценария могут быть созданы внутри AppleScripts.
- class : метаобъект, определяющий тип других объектов.
- ссылка : объект, который инкапсулирует неоцененный спецификатор объекта, который может указывать или не указывать на действительный объект. Может быть оценен по требованию путем доступа к его
contents
свойство.
- application : объект приложения, используемый в основном как спецификатор для операторов Tell (
- Стандартные объекты данных
- константа : постоянное значение. Существует ряд констант, определенных в языке, например
pi
,tab
, иlinefeed
. - boolean : логическое значение true/false. На самом деле подкласс это
constant
. - число : редко абстрактный суперкласс используемый
integer
иreal
. - целое число : целое число . Можно манипулировать с помощью встроенных математических операторов.
- вещественное : число с плавающей запятой ( действительное ). Можно манипулировать с помощью встроенных математических операторов.
- дата : дата и время.
- текст : текст. В версиях AppleScript до 2.0 (Mac OS X 10.4 и ниже)
text
класс отличался отstring
иUnicode text
, и все трое вели себя несколько иначе; в версии 2.0 (10.5) и более поздних версиях все они являются синонимами, и весь текст обрабатывается в кодировке UTF-16 (« Юникод »). [37]
- константа : постоянное значение. Существует ряд констант, определенных в языке, например
- Контейнеры
- list : упорядоченный список объектов. Может содержать любой класс, включая другие списки и классы, определенные приложениями.
- запись : ключевой список объектов. Подобен списку, за исключением того, что он структурирован в виде пар ключ-значение . Доступ по ключам во время выполнения не поддерживается; все ключи должны быть идентификаторами констант времени компиляции.
- Файловая система
- псевдоним : ссылка на объект файловой системы (файл или папку). Псевдоним сохранит свою ссылку на объект, если объект будет перемещен или переименован.
- файл : ссылка на объект файловой системы (файл или папку). Это статическая ссылка, которая может указывать на объект, который в данный момент не существует.
- Файл POSIX : ссылка на объект файловой системы (файл или папку) в виде обычного текста с использованием Unix ( POSIX обозначения косой черты (/) в стиле ). Не настоящий тип данных, поскольку AppleScript автоматически преобразует файлы POSIX в обычные файлы при каждом их использовании. [38]
- Разнообразный
- Цвет RGB : указывает тройку RGB (в 16-битном формате высокого цвета ) для использования в командах и объектах, работающих с цветами.
- типы единиц : класс, который преобразует стандартные единицы измерения. Например, значение может быть определено как
square yards
, затем преобразуется вsquare feet
путем приведения типов юнитов (с помощьюas
оператор).
Языковые структуры
[ редактировать ]Многие процессы AppleScript управляются блоками кода, где блок начинается с команды команды и заканчивается оператором завершения команды . Ниже описаны наиболее важные структуры.
Условные предложения
[ редактировать ]AppleScript предлагает два типа условных операторов.
-- Simple conditional
if x < 1000 then set x to x + 1
-- Compound conditional
if x is greater than 3 then
-- commands
else
-- other commands
end if
Петли
[ редактировать ]Цикл повторения AppleScript имеет несколько разных разновидностей. Все они выполняют блок между строками повтора и конца повтора несколько раз. Цикл может быть преждевременно остановлен с помощью команды ExitRepeat .
Повторять вечно.
repeat
-- commands to be repeated
end repeat
Повторите заданное количество раз.
repeat 10 times
-- commands to be repeated
end repeat
Условные циклы. Блок внутри цикла повторения while выполняется до тех пор, пока условие оценивается как истинное. Условие пересчитывается после каждого выполнения блока. идентичен В остальном цикл повторения , но блок выполняется до тех пор, пока условие оценивается как ложное.
set x to 5
repeat while x > 0
set x to x - 1
end repeat
set x to 5
repeat until x ≤ 0
set x to x - 1
end repeat
Цикл с переменной. При запуске цикла переменной присваивается начальное значение. После каждого выполнения блока к переменной добавляется необязательное значение шага. Значение шага по умолчанию равно 1.
-- repeat the block 2000 times, i gets all values from 1 to 2000
repeat with i from 1 to 2000
-- commands to be repeated
end repeat
-- repeat the block 4 times, i gets values 100, 75, 50 and 25
repeat with i from 100 to 25 by -25
-- commands to be repeated
end repeat
Перечислить список. На каждой итерации установите для переменной LoopVariable новый элемент в заданном списке.
set total to 0
repeat with loopVariable in {1, 2, 3, 4, 5}
set total to total + loopVariable
end repeat
Таргетинг на приложения | Обработка ошибок |
---|---|
-- Simple form
tell application "Safari" to activate
-- Compound
tell application "MyApp"
-- commands for app
end tell
|
try
-- commands to be tested
on error
-- error commands
end try
|
Одним из важных вариантов этой блочной структуры является форма блоков on - end... , которые используются для определения обработчиков (функционально-подобных подпрограмм). Обработчики начинаются с on functionName() и заканчиваются end functionName и не выполняются как часть обычного потока выполнения скрипта, если они не вызываются откуда-то из скрипта.
Обработчик функции | Блок действий с папками | Запускайте сделки |
---|---|---|
on myFunction(parameters...)
-- subroutine commands
end myFunction
|
on adding folder items to thisFolder after receiving theseItems
-- commands to apply to the folder or items
end adding folder items to
|
on run
-- commands
end run
|
Обработчики также могут быть определены с использованием «to» вместо «on» и могут быть написаны так, чтобы принимать помеченные параметры, не заключенные в круглые скобки.
Обработчик с помеченными параметрами | Обработчик, использующий «to» и помеченные параметры |
---|---|
on rock around the clock
display dialog (clock as string)
end rock
-- called with:
rock around the current date
|
to check for yourNumber from bottom thru top
if bottom ≤ yourNumber and yourNumber ≤ top then
display dialog "Congratulations! You scored."
end if
end check
--called with:
check for 8 from 7 thru 10
|
В AppleScript существует четыре типа предопределенных обработчиков — запуск, открытие, ожидание и выход — каждый из которых создается таким же образом, как и обработчик запуска, показанный выше.
- Запускайте сделки
- Определяет основной код скрипта, который вызывается при запуске скрипта. Блоки обработчиков запуска не являются обязательными, если в сценарий не передаются аргументы. Если блок явного обработчика запуска опущен, то весь код, который не содержится внутри блоков обработчика, выполняется так, как если бы он находился в неявном обработчике запуска.
- Открытые сделки
- Определяется с помощью «при открытии элементов».
on open theItems
repeat with thisItem in theItems
tell application "Finder" to update thisItem
end repeat
end open
Когда сценарий, содержащий «открытый обработчик», сохраняется как апплет, апплет становится каплей. Каплю можно идентифицировать в Finder по ее значку со стрелкой, указывающей, что на значок можно перетаскивать элементы. Капля открыта. обработчик выполняется при перетаскивании файлов или папок на иконку дроплета. Ссылки на элементы, помещенные на иконку дроплета, передаются в скрипт дроплета в качестве параметра открытого обработчика. Дроплет также может быть запущен так же, как и обычный апплет. выполнение обработчика запуска.
- Простые сделки
- Подпрограмма, которая периодически запускается системой, когда приложение простаивает.
on idle
--code to execute when the script's execution has completed
return 60 -- number of seconds to pause before executing idle handler again
end idle
Обработчик простоя может использоваться в апплетах или каплях, сохраненных как постоянно открытые апплеты, и полезен для сценариев, которые отслеживают определенные данные или события. По умолчанию длительность простоя составляет 30 секунд. [39] но его можно изменить, включив в конец подпрограммы оператор return x, где x — это количество секунд, в течение которых система должна подождать перед повторным запуском обработчика.
- Обработчик выхода
- Обработчик, который запускается, когда апплет получает запрос на выход. Это можно использовать для сохранения данных или выполнения других завершающих задач перед выходом.
on quit
--commands to execute before the script quits
continue quit -- required for the script to actually quit
end quit
- Объекты сценария
Объекты сценария могут быть определены явно с использованием синтаксиса:
script scriptName
-- commands and handlers specific to the script
end script
Объекты сценариев могут использовать те же структуры сообщений, которые используются для объектов приложения, и могут загружаться из файлов и сохраняться в них. В некоторых случаях время выполнения во время выполнения можно сократить с помощью объектов сценария.
Разная информация
[ редактировать ]- Переменные не являются строго типизированными и их не нужно объявлять. Переменные могут принимать любой тип данных (включая скрипты и функции). Следующие команды являются примерами создания переменных:
set variable1 to 1 -- create an integer variable called variable1 set variable2 to "Hello" -- create a text variable called variable2 copy {17, "doubleday"} to variable3 -- create a list variable called variable3 set {variable4, variable5} to variable3 -- copy the list items of variable3 into separate variables variable4 and variable5 set variable6 to script myScript -- set a variable to an instance of a script
- Объекты скрипта являются полноценными объектами — они могут инкапсулировать методы и данные, а также наследовать данные и поведение от родительского скрипта.
- Подпрограммы нельзя вызывать непосредственно из блоков сообщений приложения. Для этого используйте ключевые слова «мой» или «мои».
tell application "Finder"
set x to my myHandler()
-- or
set x to myHandler() of me
end tell
on myHandler()
--commands
end myHandler
Использование той же техники для написания команд добавления в сценарии может уменьшить количество ошибок и повысить производительность.
tell application "Finder"
set anyNumber to my (random number from 5 to 50)
end tell
Открытая архитектура сценариев
[ редактировать ]Важным аспектом реализации AppleScript является открытая архитектура сценариев ( OSA ). [40] Apple предоставляет OSA для других языков сценариев и сторонних продуктов сценариев/автоматизации, таких как QuicKeys и UserLand Frontier, чтобы они работали наравне с AppleScript. сценариев AppleScript был реализован как компонент , а основные спецификации для взаимодействия таких компонентов с OSA были общедоступными, что позволяло другим разработчикам добавлять в систему свои собственные компоненты сценариев. Публичные клиентские API для загрузки, сохранения и компиляции сценариев будут работать одинаково для всех таких компонентов, а это также означает, что апплеты и капли могут хранить сценарии на любом из этих языков сценариев.
Одной из особенностей OSA являются дополнения сценариев , или OSAX for Open Scripting Architecture eXtension . [36] которые были вдохновлены внешними командами HyperCard . Дополнения сценариев — это библиотеки , которые позволяют программистам расширять функции AppleScript. Команды, включенные в качестве дополнений к сценариям, доступны для всей системы и не зависят от приложения (см. также § Библиотеки AppleScript ). Редактор AppleScript также может напрямую редактировать и запускать некоторые языки OSA.
JavaScript для автоматизации
[ редактировать ]Этот раздел нуждается в дополнении : сравнением сценариев JXA и AppleScript. Вы можете помочь, добавив к нему . ( май 2017 г. ) |
В OS X Yosemite и более поздних версиях macOS компонент JavaScript для автоматизации ( 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 через браузер. [41]
См. также
[ редактировать ]- ARexx – конкурентоспособная технология 1987 года
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Кук, Уильям (2007). «AppleScript» (PDF) . Материалы третьей конференции ACM SIGPLAN по истории языков программирования . Ассоциация вычислительной техники . стр. 1–21. дои : 10.1145/1238844.1238845 . ISBN 9781595937667 . S2CID 220938191 .
- ^ Apple Inc. (2022). Редактор скриптов (версия 2.11). Проверено 11 ноября 2022 г.
- ^ «Дата выпуска OS X 10.10 Yosemite» . 16 октября 2014 года . Проверено 16 ноября 2014 г.
- ^ Перейти обратно: а б с д Гольдштейн, Адам (2005). AppleScript: недостающее руководство . Севастополь, Калифорния: O'Reilly Media . ISBN 0596008503 . OCLC 56912218 .
- ^ Перейти обратно: а б с д и ж г час я Сандерсон, Хэмиш; Розенталь, Ханаан (2009). «Взаимодействие с командной строкой Unix». Изучите AppleScript (3-е изд.). Беркли: Апресс . стр. 863–896. дои : 10.1007/978-1-4302-2362-7_27 . ISBN 9781430223610 . ОСЛК 308193726 .
- ^ Флинн, Лори (27 февраля 1989 г.). «Apple обдумывает стандартизацию HyperTalk» . Инфомир . Том. 11, нет. 9. с. 31.
- ^ «Справочник по командам руководства по языку AppleScript: выполнение сценария оболочки» . разработчик.apple.com . Проверено 15 сентября 2019 г.
- ^ «Лучшие хиты Apple: 30 значимых продуктов» . macworld.com . Проверено 12 сентября 2019 г.
- ^ Грубер, Джон (март 2013 г.). «Маловероятное сохранение AppleScript» . Макмир . 30 (3): 100.
- ^ Лавджой, Бен (17 ноября 2016 г.). «Сал Согоян говорит: «Спросите Apple» о будущем автоматизации пользователей Mac, поскольку компания сдает позиции» . 9to5mac.com . Проверено 8 мая 2017 г.
- ^ Эванс, Джонни (17 ноября 2016 г.). «Действительно ли Apple хочет уничтожить Automator и AppleScript? Шокирующее увольнение ветерана-гуру разработчиков Apple вызвало шок в сообществе Mac» . Компьютерный мир.com . Проверено 8 мая 2017 г.
- ^ Гамет, Джефф (23 ноября 2016 г.). «Намерения Apple — это не то же самое, что стремление к автоматизации Mac» . macobserver.com . Проверено 8 мая 2017 г.
- ^ «Скриптовые приложения» . разработчик.apple.com . Проверено 26 июля 2018 г.
- ^ Перейти обратно: а б с Сиракузы, Джон (16 октября 2014 г.). «OS X 10.10 Yosemite: обзор Ars Technica: автоматизация JavaScript» . Арс Техника . Проверено 8 мая 2017 г.
- ^ «Домашняя страница Smile and SmileLab» . satimage.fr . Проверено 8 мая 2017 г.
- ^ «Выпуск ASObjC Explorer 4 прекращен» . macosxautomation.com . Архивировано из оригинала 21 июня 2017 года . Проверено 8 мая 2017 г.
- ^ «Журнал Марка Олдрита »FaceSpan» . blog.latenightsw.com . Проверено 8 мая 2017 г.
- ^ «Руководство по языку AppleScript: Справочник по действиям с папками» . разработчик.apple.com . Проверено 8 мая 2017 г.
- ^ Миллер, Дэн (22 декабря 2010 г.). «Обзор капсулы: Hazel 2.3» . Macworld.com . Проверено 8 мая 2017 г.
- ^ Бим, Брайан (10 февраля 2015 г.). «Обзор Alfred: эта программа запуска приложений для Mac продолжает работать, но Alfred Remote не работает» . Macworld.com . Проверено 10 мая 2017 г.
- ^ Фрейкс, Дэн (2 июня 2011 г.). «Капсульный обзор: FastScripts 2.5» . Macworld.com . Проверено 8 мая 2017 г.
- ^ Брин, Кристофер (4 июня 2013 г.). «Mac Gems: Keyboard Maestro 6 — гений в выполнении повторяющихся задач» . Macworld.com . Проверено 10 мая 2017 г.
- ^ Брин, Кристофер (7 мая 2010 г.). «Обзор капсулы: QuicKeys 4» . Macworld.com . Проверено 8 мая 2017 г.
- ^ «AppleScripts — Quicksilver Wiki» . qsapp.com . Проверено 10 мая 2017 г.
- ^ Флейшман, Гленн (12 июня 2015 г.). «Обзор TextExpander 5» . Macworld.com . Проверено 8 мая 2017 г.
- ^ «Руководство по созданию сценариев автоматизации Mac: использование общесистемного меню сценариев» . разработчик.apple.com . Проверено 8 мая 2017 г.
- ^ «osascript(1) Страница руководства Mac OS X» . www.unix.com . Проверено 23 июля 2024 г.
- ^ «Библиотеки AppleScript» . macosautomation.com . Архивировано из оригинала 26 июля 2020 года . Проверено 8 мая 2017 г.
- ^ «Сессия 416 WWDC 2013: Знакомство с библиотеками AppleScript» . asciiwwdc.com . Проверено 8 мая 2017 г.
- ^ Перейти обратно: а б Нойбург, Мэтт (2006). AppleScript: полное руководство (2-е изд.). Пекин: О'Рейли Медиа . ISBN 0596102119 . OCLC 68694976 .
- ^ Цай, Майкл (29 сентября 2014 г.). «AppleScript и Йосемити» . mjtsai.com . Проверено 9 мая 2017 г.
- ^ «Примечания к выпуску AppleScriptObjC» . разработчик.apple.com . Проверено 8 мая 2017 г.
- ^ Уолди, Бен (6 сентября 2012 г.). «Создание базового приложения AppleScriptObjC (Cocoa-AppleScript) с помощью Xcode» . peachpit.com . Проверено 9 мая 2017 г.
- ^ Таблица адаптирована из: Наганоя, Такааки. «Руководство по созданию сценариев ASObjCExtras» (PDF) . piyocast.com . Архивировано (PDF) из оригинала 9 октября . Получено мая 9 ,
- ^ «Введение в руководство по действиям Automator AppleScript» . разработчик.apple.com . Проверено 8 мая 2017 г.
- ^ Перейти обратно: а б «Техническое примечание TN1164: Дополнения к сценариям для Mac OS X» . разработчик.apple.com . Проверено 8 мая 2017 г.
- ^ «Примечания к выпуску AppleScript: изменения 10.5» . разработчик.apple.com . Проверено 8 мая 2017 г.
- ^ «Файл POSIX — Справочник классов — Руководство по языку AppleScript» . разработчик.apple.com . Проверено 8 января 2018 г.
- ^ «Руководство по языку AppleScript: обработчики в приложениях сценариев» . разработчик.apple.com . Проверено 21 июля 2013 г.
- ^ «Обзор AppleScript: открытая архитектура сценариев» . разработчик.apple.com . Проверено 8 мая 2017 г.
- ^ «Импорт скриптов» . Гитхаб . JXA-Кулинарная книга. 6 декабря 2019 года . Проверено 9 декабря 2019 г.
Дальнейшее чтение
[ редактировать ]- «Руководство по языку AppleScript» . разработчик.apple.com . 2016 . Проверено 9 мая 2017 г.
- Манро, Марк Конвей (2010). AppleScript . Справочник разработчика. Индианаполис: Уайли. ISBN 978-0-470-56229-1 . OCLC 468969567 .
- Розенталь, Ханаан; Сандерсон, Хэмиш (2010). Изучите AppleScript: полное руководство по написанию сценариев и автоматизации в Mac OS X (3-е изд.). Беркли: Апресс . дои : 10.1007/978-1-4302-2362-7 . ISBN 978-1-4302-2361-0 . ОСЛК 308193726 .
- Согоян, Сал ; Чизмен, Билл (2009). Серия тренингов Apple: AppleScript 1-2-3 . Серия обучающих программ Apple Pro. Беркли: Peachpit Press . ISBN 978-0-321-14931-2 . OCLC 298560807 .
- Кук, Уильям (2007). «AppleScript» (PDF) . Материалы третьей конференции ACM SIGPLAN по истории языков программирования . АКМ. стр. 1–21. CiteSeerX 10.1.1.86.2218 . дои : 10.1145/1238844.1238845 . ISBN 9781595937667 . S2CID 220938191 .
- Форд-младший, Джерри Ли (2007). Программирование AppleScript для абсолютных новичков . Бостон: Технология курса Томсона . ISBN 978-1-59863-384-9 . OCLC 76910522 .
- Нойбург, Мэтт (2006). AppleScript: Полное руководство (2-е изд.). Пекин; Фарнхэм: О'Рейли Медиа . ISBN 0-596-10211-9 . OCLC 68694976 .
- Гольдштейн, Адам (2005). AppleScript: недостающее руководство . Отсутствует серия руководств. Севастополь, Калифорния; Фарнхэм: О'Рейли Медиа. ISBN 0-596-00850-3 . OCLC 56912218 .
- Тринко, Том (2004). AppleScript для чайников . Серия «Для чайников» (2-е изд.). Хобокен, Нью-Джерси: Уайли. ISBN 978-0-7645-7494-8 . OCLC 56500506 .
Внешние ссылки
[ редактировать ]- «Обзор AppleScript» . разработчик.apple.com . 2007 . Проверено 7 ноября 2020 г.
- «AppleScript для программистов Python (сравнительная таблица)» . aurelio.net . 2005 . Проверено 9 мая 2017 г.
- «AppleScripts Дуга для iTunes» . dougscripts.com . Проверено 9 мая 2017 г.
- «Сообщество MacScripter AppleScript» . macscripter.net . Проверено 9 мая 2017 г.
- Разработка операционных систем Macintosh
- Разработка MacOS
- Собственное программное обеспечение
- Языки сценариев
- Языки программирования
- Языки программирования высокого уровня
- Языки программирования, созданные в 1993 году.
- программное обеспечение 1993 года
- Динамические языки программирования
- Динамически типизированные языки программирования