MonoMac - как выполнить скрипт Apple - PullRequest
3 голосов
/ 04 мая 2011

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

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

К сожалению, похоже, что для NSAppleScript нет работающей обертки. Я попытался реализация Фредерика Форджана и попытался использовать 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 в моно среде?

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

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

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

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

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

1 голос
/ 10 марта 2012

Если возможно, попробуйте использовать 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.

0 голосов
/ 02 июня 2012

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

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

...