2011-02-05 4 views
12

Возможно ли запустить код AppleScript внутри приложения Cocoa?Запуск AppleScript из приложения Cocoa

Я пробовал класс NSAppleScript, но не удался.

Кроме того, разрешено ли Apple?

+1

'NSAppleScript' общественного класса, так будет разрешен руководящими принципами App Store компании Apple. –

ответ

11

Вы упомянули Xcode не спасал сценарий к пути ресурсов вашего приложения. Это верно. Вы должны сказать xcode, чтобы сделать это. Сначала добавьте скомпилированный скрипт в свой проект. Затем откройте свою цель и найдите действие «Copy Bundle Resources». Перетащите свой скрипт из списка файлов в это действие. Таким образом, ваш скрипт автоматически копируется на ресурсы вашего приложения, поэтому вам не нужно делать это вручную.

Всякий раз, когда я использую скомпилированный AppleScript в приложении для какао, я добавляю сценарий к проекту, 2) создаю новый класс для управления AppleScript, 3) используем ниже метод init для класса и 4) перетащите скрипт в действие «Копировать ресурсы Bundle» цели.

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

Спасибо. Задача решена. :) –

12

Решенный!

XCode не сохранял мой файл сценария в пути ресурсов приложения. Чтобы запустить код AppleScript из какао Application, используйте:

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

У меня есть сценарий для яблока, из которого я могу получить тело письма и тему. когда я вызываю этот скрипт из кода выше, как я могу получить эти данные результата (тело письма и тема) Mail? – kushalrshah

2

От компании 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 
    } 
} 
Смежные вопросы