3

Я пытаюсь выполнить некоторые AppleScript из Objective-C, используя NSAppleScript ... однако, код, который я пытаюсь, является новым JavaScript для автоматизации в Yosemite. Кажется, он ничего не делает, когда работает, однако нормальный AppleScript отлично работает.Как запустить JavaScript/AppleScript из приложения для какао?

[NSApp activateIgnoringOtherApps:YES]; 
NSAppleScript *scriptObject = [[NSAppleScript alloc] initWithSource: 
           @"\n\ 
            iCal = Application(\"Calendar\");\n\ 
            iCal.includeStandardAdditions = true;\n\ 
            iCal.activate();\n\ 
            iCal.displayAlert(\"testing\");\n\ 
           "]; 

[scriptObject executeAndReturnError: nil]; 

Как я могу заставить это работать?

Благодаря

ответ

4

NSAppleScript замоноличен компилировать исходный код AppleScript. Вам нужно будет использовать OSAKit вместо этого, который является дрянным и недокументированным, но по крайней мере позволяет указать, какой язык использовать при компиляции из исходного кода. В качестве альтернативы вы можете обходить обходной путь, связывая ваш источник с osacompile -l JavaScript, а затем загружая полученный файл .scpt в NSAppleScript.

Однако из вашего примера неясно, почему вы используете NSAppleScript. Если вы хотите выполнить пользовательские сценарии, вам, вероятно, следует взглянуть на NSUserAppleScriptTask: он даже crappier, чем NSAppleScript, но он предназначен для запуска скрипта в подпроцессе за пределами изолированной программной программы вашего приложения. (NSAppleScript запускает сценарии in-process, которые в изолированном приложении не позволяют скриптам пользователя разговаривать с произвольными приложениями.)

OTOH, если вы используете NSAppleScript для запуска своего собственного кода, вы бы намного лучше использовали Scripting Bridge (который является дрянным и сломанным, но может быть достаточным, если ваши потребности скромны) или use AppleScript via the AppleScript-ObjC bridge, что позволяет использовать код ObjC для использования классов AppleScript, как если бы они были родными классами Cocoa. Учитывая, что AppleScript является единственным поддерживаемым решением, которое знает, как правильно говорить о событиях Apple (JXA пронизана недостатками), я бы рекомендовал последнее.

Смежные вопросы