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?

È stato utile?

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/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top