2011-02-05 15 views
12

¿Es posible ejecutar un código AppleScript dentro de una aplicación Cocoa?Ejecutar AppleScript desde la aplicación Cocoa

He intentado con la clase NSAppleScript, pero no tuve éxito.

Además, Apple lo permite?

+1

'NSAppleScript' es una clase pública por lo que será permitido por las directrices de Apple App Store. –

Respuesta

11

Usted ha mencionado Xcode no estaba reservándose el guión a la ruta de los recursos de su aplicación. Eso es correcto. Tienes que decirle a xcode que haga esto. Primero agregue el script compilado a su proyecto. Luego abre tu objetivo y encuentra la acción "Copiar recursos de paquete". Arrastra tu script de la lista de archivos a esa acción. De esta forma, su script se copia automáticamente a los recursos de su aplicación para que no tenga que hacerlo a mano.

Cada vez que uso un AppleScript compilado en una aplicación de cacao I, 1) agrego el script al proyecto, 2) creo una nueva clase para controlar AppleScript, 3) uso el método init a continuación para la clase, y 4) arrastre el script a la acción "Copiar recursos de paquete" del objetivo.

- (id)init { 
    NSURL *scriptURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"applescripts" ofType:@"scpt"]]; 
    if ([self initWithURLToCompiledScript:scriptURL] != nil) { //attempt to load the script file 
    } 

    return self; 
} 
+0

Gracias. Problema resuelto. :) –

12

¡Resuelto!

XCode no guardaba el archivo de script en la ruta de recursos de la aplicación. Para ejecutar un código AppleScript desde Cocoa aplicación, utilice esto:

NSString* path = [[NSBundle mainBundle] pathForResource:@"ScriptName" ofType:@"scpt"]; 
NSURL* url = [NSURL fileURLWithPath:path];NSDictionary* errors = [NSDictionary dictionary]; 
NSAppleScript* appleScript = [[NSAppleScript alloc] initWithContentsOfURL:url error:&errors]; 
[appleScript executeAndReturnError:nil]; 
[appleScript release]; 
+1

Tengo una secuencia de comandos de apple desde la que puedo obtener el cuerpo y el asunto del correo. cuando llamo a este script desde el código anterior, ¿cómo puedo obtener los datos de este resultado (cuerpo del correo y asunto) del correo? – kushalrshah

2

de la documentación de Apple https://developer.apple.com/library/mac/technotes/tn2084/_index.html

- (IBAction)addLoginItem:(id)sender 
{ 
    NSDictionary* errorDict; 
    NSAppleEventDescriptor* returnDescriptor = NULL; 

    NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource: 
       @"\ 
       set app_path to path to me\n\ 
       tell application \"System Events\"\n\ 
       if \"AddLoginItem\" is not in (name of every login item) then\n\ 
       make login item at end with properties {hidden:false, path:app_path}\n\ 
       end if\n\ 
       end tell"]; 

    returnDescriptor = [scriptObject executeAndReturnError: &errorDict]; 
    [scriptObject release]; 

    if (returnDescriptor != NULL) 
    { 
     // successful execution 
     if (kAENullEvent != [returnDescriptor descriptorType]) 
     { 
      // script returned an AppleScript result 
      if (cAEList == [returnDescriptor descriptorType]) 
      { 
       // result is a list of other descriptors 
      } 
      else 
      { 
       // coerce the result to the appropriate ObjC type 
      } 
     } 
    } 
    else 
    { 
     // no script result, handle error here 
    } 
} 
Cuestiones relacionadas