Question

J'essaie de créer une application simple avec MonoMac et je dois exécuter un script Apple pour accéder aux informations de la playlist à partir de différents lecteurs multimédias (voir mon question précédente ).

J'ai décidé d'essayer MonoMac car je connais très bien le développement C # et .net et il existe une belle implémentation Websocket.

Malheureusement, il ne semble pas y avoir de wrapper fonctionnel pour NSAppleScript. J'ai essayé l'implémentation de Frederic Forjans et j'ai essayé d'utiliser monobjc .

La classe wrapper Frederics ne compile même pas quand j'utilise son code, j'obtiens l'exception suivante:

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'

lors de la création d'une nouvelle instance NSString. Cependant, new NSDictionary(); qui se trouve dans le même assemblage fonctionne très bien.

Lorsque j'utilise monobjc, j'obtiens l'erreur suivante:

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 

Quelqu'un peut-il suggérer une manière simple et efficace d'exécuter des scripts Apple dans un environnement mono?

Était-ce utile?

La solution

Vous ne pouvez pas utiliser les assemblys Monobjc directement sans les exécuter avec le binaire d'exécution Monobjc. Que vous souhaitiez créer une application basée sur Cocoa ou une console, il existe des tutoriels pour cela sur le site Web de Monobjc pour vous aider à démarrer.

Le moyen le plus simple de parvenir à une communication inter-applications est d'utiliser le framework ScriptingBridge. De nombreuses applications fournissent des définitions de script qui peuvent ensuite être utilisées de manière orientée objet: consultez ce guide pour plus de détails.

Notez que le pont de script ne fonctionnera qu'avec les applications activées pour les scripts (comme iTunes, iCal, iMovie, Finder, etc.).

Monobjc prend en charge le framework ScriptingBridge; il existe même deux exemples d'applications ( SBSetFinderComment et ScriptingBridgeiCal ) qui montre comment l'intégrer.

Autres conseils

Si possible, essayez d'utiliser Monobjc.Monobjc fournit un moyen très simple d'exécuter AppleScript personnalisé.

L'extrait de code suivant montre les principales étapes:

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

J'ai écrit un article de blog expliquant la même chose.Un exemple de projet Monobjc est également fourni.

J'essayais d'exécuter AppleScript à partir d'un projet WinForms Mono et j'ai fini par créer ma propre petite bibliothèque d'exécution AppleScript appelée AppleScript Slim.! 00% du code provient du projet Mono Develop.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top