我正在尝试使用MonoMac创建一个简单的应用程序,并且需要执行apple脚本来访问来自不同媒体播放器的播放列表信息(请参阅我的previous question)。
我决定尝试使用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时出现以下错误:
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
有人能建议一种简单而有效的方法在单声道环境中执行苹果脚本吗?
答案 0 :(得分:4)
如果不使用Monobjc运行时二进制文件运行它们,则无法直接使用Monobjc程序集。无论您是想在Monobjc的网站上构建基于Cocoa还是控制台的应用程序there are tutorials,都可以帮助您入门。
实现应用程序间通信的最简单方法是使用ScriptingBridge框架。许多应用程序提供脚本定义,然后可以以面向对象的方式使用:take a look at this guide以获取更多详细信息。
请注意,脚本桥仅适用于启用脚本的应用程序(如iTunes,iCal,iMovie,Finder等)。
Monobjc支持ScriptingBridge框架;甚至还有两个示例应用程序(SBSetFinderComment和ScriptingBridgeiCal),展示了如何集成它。
答案 1 :(得分: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;
我写了blog post解释相同的内容。还提供了一个样本Monobjc项目。
答案 2 :(得分:0)
我试图从WinForms Mono项目中执行AppleScript,最终构建了自己的AppleScript执行库AppleScript Slim。 !00%的代码来自Mono Develop项目。
AppleScript Slim:https://applescriptslim.codeplex.com/