Pregunta

Estoy tratando de crear una aplicación simple con Monomac y necesito ejecutar el script de Apple para acceder a la información de la lista de reproducción de diferentes reproductores multimedia (ver mi Pregunta anterior).

Decidí probar Monomac porque estoy muy familiarizado con el desarrollo de C# y .NET y hay una buena implementación de WebSocket.

Lamentablemente, parece que no hay una envoltura para funcionar para NsappleScript. Lo intenté Implementación de Frederic Forjans e intenté usar monobjc.

La clase de envoltorio de Frederics ni siquiera se compila cuando uso su código, obtengo la siguiente excepción:

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'

Al crear un nuevo NSString instancia. Sin embargo new NSDictionary(); que se encuentra en el mismo ensamblaje funciona bien.

Al usar MonobJC obtengo el siguiente error:

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 

¿Alguien puede sugerir una forma simple y de trabajo para ejecutar scripts de Apple en un entorno mono?

¿Fue útil?

Solución

No puede usar los ensamblajes monOBJC directamente sin ejecutarlos con el binario de tiempo de ejecución de Monobjc. Si desea construir una aplicación de consola o basada en cacao, Hay tutoriales Para eso en el sitio web del MonobJC para ayudarlo a comenzar.

La forma más fácil de lograr la comunicación entre aplicaciones es utilizar el marco ScriptingBridge. Muchas aplicaciones proporcionan definiciones de secuencias de comandos que se pueden usar de manera orientada a objetos: Dale un vistazo a esta guía para más detalles.

Tenga en cuenta que el puente de secuencias de comandos solo funcionará con aplicaciones habilitadas para secuencias de comandos (como iTunes, ical, iMovie, buscador, etc.).

MonobJC admite el marco de ScriptingBridge; Incluso hay dos aplicaciones de muestra (Sbsetfindercomment y Scriptingbridgeical) que muestran cómo integrarlo.

Otros consejos

Si es posible, intente usar MonobJC. MonobJC proporciona una forma muy directa de ejecutar AppleScript personalizado.

El siguiente fragmento de código muestra los pasos principales:

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

He escrito un entrada en el blog explicando lo mismo. También se proporciona un proyecto de muestra MonobJC.

Estaba tratando de ejecutar AppleScript de un proyecto Mono WinForms y terminé construyendo mi propia biblioteca de ejecución de AppleScript llamada AppleScript Slim. ! 00% del código provino del proyecto Mono Develop.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top