AppleScript - AppleScript

AppleScript
Парадигма Программирование на естественном языке , Скрипты
Разработчик Apple Inc.
Впервые появился 1993 ; 28 лет назад ( 1993 )
Стабильный выпуск
2.5 / 16 октября 2014 г . ; 6 лет назад ( 2014-10-16 )
Печатная дисциплина Слабый , динамичный
Операционные системы Система 7 , Mac OS 8 , Mac OS 9 , macOS
Лицензия Собственный (детали доступны по APSL )
Расширения имени файла .scpt, .scptd, .applescript
Веб-сайт https://developer.apple.com/applescript
Под влиянием
Естественный язык , HyperTalk

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

Обзор

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

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

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

История

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

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

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

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

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

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

Базовые концепты

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

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

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

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

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

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

AppleScript был разработан с возможностью интуитивно создавать сценарии путем записи действий пользователя. Возможность записи AppleScript должна быть встроена в приложение - приложение должно поддерживать события Apple и запись AppleScript; поскольку 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 должен быть достаточно ясным, чтобы его мог прочитать и понять любой, а также легко редактировать. Язык в значительной степени основан на языке HyperCard HyperTalk, расширенном для обозначения не только мира карт и стопок HyperCard, но и теоретически любого документа. С этой целью команда AppleScript представила объектную модель AppleEvent (AEOM), которая определяет объекты, «известные» любому конкретному приложению.

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

print page 1

print document 2

print pages 1 thru 5 of document 2

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

Чтобы указать, какое приложение должно быть целью такого сообщения, 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"

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

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 Editor (редактор скриптов)
Редактор AppleScript, входящий в состав macOS, называется AppleScript Editor в Mac OS X Snow Leopard (10.6) через OS X Mavericks (10.9) и Script Editor во всех более ранних и поздних версиях macOS. Сценарии записываются в окнах редактирования документов, где они могут быть скомпилированы и запущены, и эти окна содержат различные панели, в которых записанная информация, результаты выполнения и другая информация доступна для целей отладки. Доступ к словарям сценариев и заранее написанным фрагментам кода доступен через меню приложения. Начиная с OS X Yosemite (10.10), редактор сценариев включает возможность писать как на AppleScript, так и на JavaScript .
Xcode
Набор инструментов для разработки приложений с функциями редактирования сценариев AppleScripts или создания полноценных приложений, написанных с помощью AppleScript.

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

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

Пусковые установки скриптов

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

Апплеты
Скрипты AppleScripts могут быть сохранены из редактора скриптов как приложения (называемые апплетами или каплями, когда они принимают ввод с помощью перетаскивания ). Апплеты можно запускать из Dock , из панели инструментов окон Finder , из Spotlight , из сторонних программ запуска приложений или из любого другого места, где можно запускать приложения.
Действия с папкой
С помощью действий с папками AppleScript можно запускать сценарии, когда в папках происходят определенные изменения (например, добавление или удаление файлов). Действия с папкой можно назначить, щелкнув папку и выбрав « Настройка действий с папкой ...» в контекстном меню; Расположение этой команды в Mac OS X 10.6.x немного отличается от более ранних версий. То же действие можно выполнить с помощью сторонних утилит, таких как Hazel.
Пусковые установки горячих клавиш
Сочетания клавиш могут быть назначены AppleScripts в меню сценария с помощью клавиатуры & Параметры мыши панели настроек в системных настройках . Кроме того, доступны различные сторонние утилиты - Alfred , FastScripts, Keyboard Maestro , QuicKeys, Quicksilver , TextExpander, - которые могут запускать AppleScripts по запросу с использованием комбинаций клавиш.
Меню сценария
Это общесистемное меню обеспечивает доступ к сценариям AppleScripts из строки меню macOS, видимой независимо от того, какое приложение запущено. (Кроме того, многие приложения Apple, некоторые сторонние приложения и некоторые надстройки предоставляют свои собственные меню сценариев. Они могут быть активированы по-разному, но все работают по существу одинаково.) Выбор сценария в меню сценариев запускает Это. Начиная с Mac OS X 10.6.x, общесистемное меню сценариев можно включить в настройках редактора сценариев ; в предыдущих версиях Mac OS X его можно было включить из приложения AppleScript Utility. При первом включении в меню сценария отображается стандартная библиотека довольно общих функциональных сценариев AppleScripts, которую также можно открыть в редакторе сценариев и использовать в качестве примеров для изучения AppleScript. Сценарии можно организовать так, чтобы они появлялись в меню только тогда, когда определенные приложения находятся на переднем плане.
Командная строка Unix и launchd
AppleScripts можно запускать из командной строки Unix или из launchd для запланированных задач с помощью инструмента командной строки osascript. Инструмент osascript может запускать скомпилированные скрипты (файлы .scpt) и простые текстовые файлы (файлы .applescript - они компилируются инструментом во время выполнения). Приложения-скрипты можно запускать с помощью команды открытия Unix.

Связанные проблемы со сценариями

Библиотеки AppleScript
Повторно используемые модули AppleScript (доступны начиная с OS X Mavericks ), написанные на AppleScript или AppleScriptObjC и сохраненные в виде файлов или пакетов сценариев в определенных местах, которые можно вызывать из других сценариев. При сохранении в виде пакета библиотека может включать файл словаря AppleScript (sdef), таким образом, функционируя как дополнение к сценарию, но написанное на AppleScript или AppleScriptObjC.
Студия AppleScript
Платформа для присоединения интерфейсов Какао к приложениям AppleScript, часть пакета Xcode в Mac OS X 10.4 и 10.5, теперь устарела в пользу AppleScriptObjC.
AppleScriptObjC
Какао разработка рамка программного обеспечения , называемые также AppleScript / Objective-C или АСКАМИ, часть пакета Xcode , так как Mac OS X Snow Leopard . AppleScriptObjC позволяет AppleScripts напрямую использовать классы и методы Какао. В следующей таблице показана доступность AppleScriptObjC в различных версиях macOS:
Где AppleScriptObjC можно использовать в каждой версии macOS
В Xcode В апплетах В библиотеках AppleScript
В редакторе скриптов
10,6 да
10,7 да да
10,8 да да
10.9 да да да
10.10 да да да да
Автомат
Графическая модульная среда редактирования, в которой рабочие процессы строятся из действий. Он предназначен для дублирования многих функций AppleScript без необходимости знания программирования. В Automator есть действие, специально разработанное для содержания и запуска сценариев AppleScripts для задач, которые слишком сложны для упрощенной структуры Automator.
Основные системные приложения со сценариями
Эти только фоновые приложения, входящие в состав macOS, используются, чтобы позволить AppleScript получить доступ к функциям, которые обычно не поддерживают скрипты. Начиная с Mac OS X 10.6.3, они включают приложения с поддержкой сценариев для VoiceOver (пакет звукового сопровождения со сценариями и программы чтения с экрана Брайля), Системные события (управление приложениями без сценариев и доступ к определенным системным функциям и основным файловым операциям), Утилиту настройки принтера ( Утилита с поддержкой сценариев для обработки заданий печати), Image Events (манипулирование основными изображениями), HelpViewer (скриптовая утилита для отображения справки), Database Events (минимальный интерфейс базы данных SQLite3) и AppleScript Utility (для написания сценариев некоторых предпочтений, связанных с AppleScript), а также как несколько служебных приложений, используемых системой.
Дополнения к сценариям (OSAX)
Плагины для AppleScript, разработанные Apple или третьими сторонами. Они предназначены для расширения встроенного набора команд, расширения возможностей AppleScript и уменьшения его зависимости от функций, предоставляемых приложениями. macOS включает в себя набор дополнений к сценариям, называемых стандартными дополнениями ( StandardAdditions.osax ), которые добавляют набор команд и классов, не являющихся частью основных функций AppleScript, включая диалоги взаимодействия с пользователем, чтение и запись файлов, команды файловой системы, функции даты , текстовые и математические операции; без этого OSAX у AppleScript не было бы возможности выполнять многие базовые действия, не предоставляемые непосредственно приложением.

Основы языка

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

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

  • Основные объекты
    • application : объект приложения, используемый в основном как спецификатор для операторов tell ( tell application "Finder" …).
    • скрипт : объект скрипта. Объекты сценария - это контейнеры для сценариев. Каждый AppleScript создает объект сценария при запуске, и объекты сценария могут быть созданы в AppleScripts.
    • класс : мета-объект, определяющий тип других объектов.
    • ссылка : объект, который инкапсулирует неоцененный спецификатор объекта, который может указывать или не указывать на действительный объект. Может быть оценено по запросу путем доступа к его contentsсвойству.
  • Стандартные объекты данных
    • constant : постоянное значение. Есть целый ряд языковых определенных констант, таких как pi, tabи linefeed.
    • boolean : логическое значение true / false. На самом деле подкласс из constant.
    • номер : редко используется абстрактный суперкласс из integerи real.
    • целое число : целое число . Можно манипулировать с помощью встроенных математических операторов.
    • real : число с плавающей запятой ( действительное ). Можно манипулировать с помощью встроенных математических операторов.
    • дата : дата и время.
    • текст : текст. В версиях AppleScript до 2.0 (Mac OS X 10.4 и ниже) textкласс отличался от stringи Unicode text, и эти три вели себя несколько иначе; в 2.0 (10.5) и более поздних версиях все они являются синонимами, и весь текст обрабатывается как кодированный в UTF-16Unicode »).
  • Контейнеры
    • список : упорядоченный список объектов. Может содержать любой класс, включая другие списки и классы, определенные приложениями.
    • запись : ключевой список объектов. Как список, за исключением того, что он структурирован как пары ключ-значение . Доступ с ключом во время выполнения не поддерживается; все ключи должны быть идентификаторами констант времени компиляции.
  • Файловая система
    • псевдоним : ссылка на объект файловой системы (файл или папку). Псевдоним сохранит свою ссылку на объект, если объект будет перемещен или переименован.
    • file : ссылка на объект файловой системы (файл или папку). Это статическая ссылка, которая может указывать на объект, который в настоящее время не существует.
    • Файл POSIX : ссылка на объект файловой системы (файл или папку) в виде обычного текста с использованием нотации косой черты в стиле Unix ( POSIX ) (/). Это не настоящий тип данных, поскольку AppleScript автоматически конвертирует файлы POSIX в обычные файлы всякий раз, когда они используются.
  • Разное
    • Цвет RGB : указывает триплет RGB (в 16-битном высоком цветовом формате) для использования в командах и объектах, которые работают с цветами.
    • Типы единиц : класс, который преобразует стандартные единицы. Например, значение может быть определено как square yards, а затем преобразовано в преобразование square feetмежду типами единиц (с помощью asоператора).

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

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

Условные

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 имеет несколько разных разновидностей. Все они выполняют блок между строками повторения и концом повторения несколько раз. Цикл можно преждевременно остановить повторением команды exit .

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

repeat
     -- commands to be repeated
end repeat

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

repeat 10 times
     -- commands to be repeated
end repeat

Условные петли. Блок внутри цикла 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

Одним из важных Вариантом этой блочной структуры в виде на - конец ... блоки, которые используются для определения обработчиков (функция типа подпрограмм). Обработчики начинаются с 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 есть четыре типа предопределенных обработчиков - run, open, idle и quit - каждый из которых создается так же, как и обработчик run, показанный выше.

Обработчик запуска
Определяет основной код скрипта, который вызывается при запуске скрипта. Блоки обработчика выполнения являются необязательными, если сценарию не передаются аргументы. Если явный блок обработчика запуска опущен, то весь код, который не содержится внутри блоков обработчика, выполняется, как если бы он находился в неявном обработчике запуска.
Открытый обработчик
Определяется с использованием "при открытии элементов".
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 секунд, но ее можно изменить, включив оператор 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

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

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

  • Переменные не являются строго типизированными, и их не нужно объявлять. Переменные могут принимать любой тип данных (включая скрипты и функции). Следующие команды являются примерами создания переменных:
    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 ). Apple предоставляет OSA для других языков сценариев и сторонних программных продуктов для сценариев / автоматизации, таких как QuicKeys и UserLand Frontier, для работы наравне с AppleScript. AppleScript был реализован как компонент сценария , и основные спецификации для взаимодействия таких компонентов с OSA были общедоступными, что позволяло другим разработчикам добавлять свои собственные компоненты сценариев в систему. Общедоступные клиентские API для загрузки, сохранения и компиляции сценариев будут работать одинаково для всех таких компонентов, что также означает, что апплеты и капли могут содержать сценарии на любом из этих языков сценариев.

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

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

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

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

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

  • BBEdit - очень скриптах текстовый редактор

использованная литература

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

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