MonoMac - как выполнить сценарий Apple

Я пытаюсь создать простое приложение с MonoMac, и мне нужно выполнить сценарий Apple для доступа к информации о плейлистах из разных медиаплееров (см. Мой предыдущий вопрос).

Я решил попробовать MonoMac, потому что я хорошо знаком с разработкой на C # и .net, и есть хорошая реализация Websocket.

К сожалению, для NSAppleScript, похоже, нет рабочей оболочки. Я попробовал реализацию Frederic Forjans и попытался использовать monobjc.

Класс-оболочка Frederics даже не компилируется, когда я использую его код, я получаю следующее исключение:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'MonoMac, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
File name: 'MonoMac, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'

при создании нового экземпляра NSString. Однако new NSDictionary();, который находится в той же сборке, работает нормально.

При использовании monobjc я получаю следующую ошибку:

Unhandled Exception: System.TypeInitializationException: An exception was 
thrown by the type initializer for Monobjc.ObjectiveCRuntime ---> 
System.EntryPointNotFoundException: monobjc_install_bridge
  at (wrapper managed-to-native) Monobjc.NativeMethods:InstallBridge ()
  at Monobjc.ObjectiveCRuntime..cctor () [0x00000] in :0 
  --- End of inner exception stack trace ---
  at CocoaApplication1.Program.Main () [0x00000] in :0 

Может ли кто-нибудь предложить простой и рабочий способ выполнения сценариев Apple в моно-среде?


person Zebi    schedule 03.05.2011    source источник


Ответы (3)


Вы не можете использовать сборки Monobjc напрямую, не запуская их с исполняемым двоичным кодом Monobjc. Если вы хотите создать приложение на основе Какао или консольное приложение, для этого есть руководства на веб-сайте Monobjc, чтобы помочь вам начать работу.

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

Обратите внимание, что мост сценариев работает только с приложениями, поддерживающими сценарии (например, iTunes, iCal, iMovie, Finder и т. Д.).

Monobjc поддерживает структуру ScriptingBridge; есть даже два примера приложений (SBSetFinderComment и ScriptingBridgeiCal), в которых показано, как его интегрировать.

person Laurent Etiemble    schedule 04.05.2011
comment
Как я могу проверить, включены ли сценарии в приложении? Проверить браузер функций в редакторе сценариев яблок? - person Zebi; 04.05.2011
comment
Есть два способа: (1) в редакторе сценариев Apple выбрать Файл ›Открыть словарь; приложение должно быть указано в списке или (2) в командной строке терминала введите sdef / Applications / ‹YourApp› .app; если есть ошибка, то приложение не поддерживает скрипты. - person Laurent Etiemble; 05.05.2011

Если возможно, попробуйте использовать Monobjc. Monobjc предоставляет очень простой способ выполнения пользовательского AppleScript.

В следующем фрагменте кода показаны основные шаги:

string script = ". . . . . . . . . ."; // some applescript text
NSDictionary error = null;
NSAppleScript scr = new NSAppleScript(script);
NSAppleEventDescriptor result = scr.ExecuteAndReturnError(out error);
string retval = result.StringValue;

Я написал сообщение в блоге, в котором объясняется то же самое. Также предоставляется образец проекта Monobjc.

person ddelver    schedule 10.03.2012
comment
Было бы здорово, я попробую, как только у меня появится свободное время :) - person Zebi; 19.03.2012

Я пытался выполнить AppleScript из проекта WinForms Mono и в итоге создал свою небольшую библиотеку выполнения AppleScript под названием AppleScript Slim. ! 00% кода взято из проекта Mono Develop.

AppleScript Slim: https://applescriptslim.codeplex.com/

person Peter    schedule 02.06.2012