Monomac - Come posso eseguire Apple Script
-
28-10-2019 - |
Domanda
Sto cercando di creare un'app semplice con Monomac e devo eseguire Apple Script per accedere alle informazioni di playlist da diversi giocatori di media (vedi il mio domanda precedente).
Ho deciso di provare a Monomac perché ho molta familiarità con lo sviluppo C# e .NET e c'è una bella implementazione di WebSocket.
Sfortunatamente sembra che non ci sia un involucro funzionante per NSAPPLESScript. Provai Implementazione di Frederic Forjans e ho provato a usare monobjc.
Frederics Wrapper Class non si compila nemmeno quando uso il suo codice ottengo la seguente eccezione:
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'
Quando si crea un nuovo NSString
esempio. Tuttavia new NSDictionary();
che si trova nella stessa assemblaggio funziona bene.
Quando si utilizza MonoBJC, ricevo il seguente errore:
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
Qualcuno può suggerire un modo semplice e funzionante per eseguire gli script di Apple in un ambiente mono?
Soluzione
Non è possibile utilizzare gli assemblaggi monobjc direttamente senza eseguirli con il binario di runtime monobjc. Sia che tu voglia costruire un'applicazione basata su cacao o console, Ci sono tutorial Per questo sul sito Web di MonoBJC per aiutarti ad iniziare.
Il modo più semplice per ottenere la comunicazione inter-applicazione è utilizzare il framework ScriptingBridge. Molte applicazioni forniscono definizioni di scripting che possono essere quindi utilizzate in modo orientato agli oggetti: Dai un'occhiata a questa guida per ulteriori dettagli.
Si noti che il ponte di scripting funzionerà solo con applicazioni abilitate per script (come iTunes, ical, iMovie, Finder, ecc.).
MonoBJC supporta il framework ScriptingBridge; Ci sono anche due applicazioni di esempio (SbsetfinderComment e Scriptingbridgeical) che mostrano come integrarlo.
Altri suggerimenti
Se possibile, prova a usare monobjc. MonoBJC fornisce un modo molto semplice di eseguire AppleScript personalizzato.
Il seguente frammento di codice mostra i passaggi principali:
string script = ". . . . . . . . . ."; // some applescript text
NSDictionary error = null;
NSAppleScript scr = new NSAppleScript(script);
NSAppleEventDescriptor result = scr.ExecuteAndReturnError(out error);
string retval = result.StringValue;
Ho scritto un post sul blog spiegare lo stesso. C'è anche un progetto MONOBJC di esempio fornito.
Stavo cercando di eseguire AppleScript da un progetto Mono Winforms e ho finito per costruire la mia piccola libreria di esecuzione AppleScript chiamata AppleScript Slim. ! 00% del codice proveniva dal progetto Mono Develop.
AppleScript Slim: https://aplesscriptslim.codeplex.com/