партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
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 требование очистить корзину:

NSAppleScript *command = [[NSAppleScript allocinitWithSource:@"tell application \"\"Finder\"\" to empty trash"];

[
command executeAndReturnError:nil];

NSDictionary *errorInfo nil;
NSAppleScript *command = [[NSAppleScript allocinitWithSource:source];
[
command executeAndReturnError:&errorInfo];

if(
errorInfo!=nil)
    
NSLog(@"errorInfo %@",errorInfo);

Если при выполнении скрипта возникнет ошибка, в консоли будет выведено сообщение в консоли XCode.

Многострочные в переменной NSString скрипты можно описывать так (\ на конце позволяет писать текст со следующей строки, \n означает перевод строки):

NSString *source = @"\

    tell application id \"com.apple.iCal\"\n\
    launch\n\
    switch view to day view\n\
    activate\n\
    end tell\n\
"
;

Использование разрешений (Entitlements)

При использовании Sandboxing, для работы с каждым (!) приложением, к которому обращается скрипт, необходимо получать разрешение с помощью Entitlements. Например, если мы работаем с приложением Calendar как в последнем примере, то необходимо добавить его в массив com.apple.security.temporary-exception.apple-events следующим образом:



Помимо этого, существует entitlement com.apple.security.scripting-targets, в котором также можно описать приложения, с которыми может работать скрипт, и помимо этого можно указать группы объектов, с которыми будет работать скрипт, например, календари, события календаря и т.д.

Запуск скриптов с помощью NSUserAppleScriptTask

Если вы используете Sandboxing, то помимо NSAppleScript, вы можете запусткать скрипты с помощью NSUserAppleScriptTask. У данного метода есть неоспоримые преимущества, например, при запуске скриптов таким образом, они запускаются вне Sandboxing, и при этом разрешения (Entitlements) не требуются, но есть и ограничения - скрипты можно запускать только из файлов в определенной папке, и при первом вызове у пользователя будет запрашиваться разрешение на запуск скрипта.

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью: