AppleScript - это язык, позволяющий автоматизировать рутинные действия в системе OS X. Он работает с помощью встроенного в систему интерпретатора и имеет собственный редактор (в русскоязычной OS X он называется "Редактор скриптов"). Хотя язык является для своих задач достаточно мощным, казалось бы, для разработки собственных приложений в XCode под OS X, он может показаться бесполезным. Но это не совсем так.
[spoiler]
С внедрением на компьютерах Mac магазина приложений App Store, большинство независимых разработчиков ПО для Mac оказались практически вынуждены продавать свое ПО через него (иначе они оказались бы в заведомо проигрышной ситуации по сравнению с конкурентами). И вместе с тем, вынуждены были согласиться с массой ограничений, накладываемых на ПО в App Store, в связи с использованием песочницы (Sandboxing). Например, при использовании песочницы, мы не можем напрямую выполнять команды терминала и пр. Однако использование AppleScript не запрещено, правда только при указании в файле разрешений (entitlements) всех приложений, с которыми будут работать ваши скрипты на языке AppleScript.
Язык AppleScript
Что касается самого синтаксиса языка AppleScript, то здесь я его описывать не буду, т.к. по данной теме существует достаточное количество материалов, а лишь приведу некоторые примеры использования.
Запуск скриптов на Objective-C
На языке Objective-C скрипты AppleScript запускаются с помощью класса NSAppleScript, например, в данном примере мы передаем приложению Finder требование очистить корзину:
Если при выполнении скрипта возникнет ошибка, в консоли будет выведено сообщение в консоли XCode.
Многострочные в переменной NSString скрипты можно описывать так (\ на конце позволяет писать текст со следующей строки, \n означает перевод строки):
Использование разрешений (Entitlements)
При использовании Sandboxing, для работы с каждым (!) приложением, к которому обращается скрипт, необходимо получать разрешение с помощью Entitlements. Например, если мы работаем с приложением Calendar как в последнем примере, то необходимо добавить его в массив com.apple.security.temporary-exception.apple-events следующим образом:
Помимо этого, существует entitlement com.apple.security.scripting-targets, в котором также можно описать приложения, с которыми может работать скрипт, и помимо этого можно указать группы объектов, с которыми будет работать скрипт, например, календари, события календаря и т.д.
Запуск скриптов с помощью NSUserAppleScriptTask
Если вы используете Sandboxing, то помимо NSAppleScript, вы можете запусткать скрипты с помощью NSUserAppleScriptTask. У данного метода есть неоспоримые преимущества, например, при запуске скриптов таким образом, они запускаются вне Sandboxing, и при этом разрешения (Entitlements) не требуются, но есть и ограничения - скрипты можно запускать только из файлов в определенной папке, и при первом вызове у пользователя будет запрашиваться разрешение на запуск скрипта.
[spoiler]
С внедрением на компьютерах Mac магазина приложений App Store, большинство независимых разработчиков ПО для Mac оказались практически вынуждены продавать свое ПО через него (иначе они оказались бы в заведомо проигрышной ситуации по сравнению с конкурентами). И вместе с тем, вынуждены были согласиться с массой ограничений, накладываемых на ПО в App Store, в связи с использованием песочницы (Sandboxing). Например, при использовании песочницы, мы не можем напрямую выполнять команды терминала и пр. Однако использование AppleScript не запрещено, правда только при указании в файле разрешений (entitlements) всех приложений, с которыми будут работать ваши скрипты на языке AppleScript.
Язык AppleScript
Что касается самого синтаксиса языка AppleScript, то здесь я его описывать не буду, т.к. по данной теме существует достаточное количество материалов, а лишь приведу некоторые примеры использования.
Запуск скриптов на Objective-C
На языке Objective-C скрипты AppleScript запускаются с помощью класса NSAppleScript, например, в данном примере мы передаем приложению Finder требование очистить корзину:
|
Если при выполнении скрипта возникнет ошибка, в консоли будет выведено сообщение в консоли XCode.
Многострочные в переменной NSString скрипты можно описывать так (\ на конце позволяет писать текст со следующей строки, \n означает перевод строки):
|
Использование разрешений (Entitlements)
При использовании Sandboxing, для работы с каждым (!) приложением, к которому обращается скрипт, необходимо получать разрешение с помощью Entitlements. Например, если мы работаем с приложением Calendar как в последнем примере, то необходимо добавить его в массив com.apple.security.temporary-exception.apple-events следующим образом:
Помимо этого, существует entitlement com.apple.security.scripting-targets, в котором также можно описать приложения, с которыми может работать скрипт, и помимо этого можно указать группы объектов, с которыми будет работать скрипт, например, календари, события календаря и т.д.
Запуск скриптов с помощью NSUserAppleScriptTask
Если вы используете Sandboxing, то помимо NSAppleScript, вы можете запусткать скрипты с помощью NSUserAppleScriptTask. У данного метода есть неоспоримые преимущества, например, при запуске скриптов таким образом, они запускаются вне Sandboxing, и при этом разрешения (Entitlements) не требуются, но есть и ограничения - скрипты можно запускать только из файлов в определенной папке, и при первом вызове у пользователя будет запрашиваться разрешение на запуск скрипта.
29.01.201604:2629.01.2016 04:26:17