2011-02-05 9 views
12

È possibile eseguire un codice AppleScript all'interno di un'applicazione Cocoa?Esegui AppleScript da Cocoa Application

Ho provato la classe NSAppleScript, ma non ha avuto successo.

Inoltre, Apple lo consente?

+1

'NSAppleScript' è una classe pubblica in modo sarà consentito dalle linee guida di Apple App Store. –

risposta

11

Lei ha citato Xcode non stava salvando lo script al percorso risorse del app. È corretto. Devi dire a xcode di farlo. Per prima cosa aggiungi lo script compilato al tuo progetto. Quindi apri il tuo obiettivo e trova l'azione "Copia le risorse del pacchetto". Trascina il tuo script dall'elenco dei file in quell'azione. In questo modo lo script viene copiato automaticamente nelle risorse della tua app in modo da non doverlo fare a mano.

Ogni volta che uso un AppleScript compilato in un'applicazione di cacao I, 1) aggiungo lo script al progetto, 2) creo una nuova classe per controllare l'AppleScript, 3) utilizzo il metodo init sottostante per la classe e 4) trascinare lo script sull'azione "Copia risorse pacchetto" della destinazione.

- (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

Grazie. Problema risolto. :) –

12

Risolto!

XCode non ha salvato il file di script nel percorso delle risorse dell'app. Per eseguire un codice AppleScript da Cocoa Application, utilizzare questo:

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

Ho uno script di Apple da cui posso ottenere il corpo della mail e il soggetto. quando chiamo questo script dal codice precedente come posso ottenere i dati di questo risultato (corpo e oggetto della posta) di Mail? – kushalrshah

2

da Apple Documentazione 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 
    } 
} 
Problemi correlati