MonoMac - 如何执行苹果脚本?

3
我正在尝试使用MonoMac创建一个简单的应用程序,并需要执行Apple脚本以访问不同媒体播放器的播放列表信息(请参见我的以前的问题)。
我决定尝试MonoMac,因为我非常熟悉C#和.net开发,并且有一个很好的Websocket实现。
不幸的是,似乎没有可用的NSAppleScript包装器。我尝试了Frederic Forjans implementation并尝试使用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时,我遇到了以下错误:
未处理的异常:System.TypeInitializationException: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
有人能建议在mono环境中执行苹果脚本的简单有效方法吗?
3个回答

4
您不能直接使用Monobjc程序集,必须通过Monobjc运行时二进制文件来运行它们。无论您想构建基于Cocoa还是控制台的应用程序,在Monobjc网站上都有相关的教程,以帮助您入门。
实现应用程序间通信的最简单方法是使用ScriptingBridge框架。许多应用程序提供脚本定义,可以以面向对象的方式使用:请参阅此指南以获取更多详细信息。
请注意,脚本桥将仅与启用脚本的应用程序(如iTunes、iCal、iMovie、Finder等)一起工作。
Monobjc支持ScriptingBridge框架;甚至有两个示例应用程序(SBSetFinderCommentScriptingBridgeiCal),展示了如何集成它。

我该如何检查一个应用程序是否启用了脚本?在苹果脚本编辑器中检查函数浏览器即可。 - Zebi
1
有两种方法:(1)在Apple Script编辑器中,选择文件>打开字典;应用程序应该会列出来或(2)在终端提示符中,键入“sdef /Applications/<YourApp>.app”;如果出现错误,则该应用程序不可编写脚本。 - Laurent Etiemble

1
如果可能的话,请尝试使用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项目的示例。


这将非常不错,我一旦有些空闲时间就会尝试。 :) - Zebi

0
我曾试图从WinForms Mono项目执行AppleScript,最终构建了自己的小型AppleScript执行库,名为AppleScript Slim。其中100%的代码来自Mono Develop项目。
AppleScript Slim: https://applescriptslim.codeplex.com/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接