-[NSAppleScript executeAndReturnError:] выдает ошибку со сценарием, который работает в редакторе AppleScript

Я пытаюсь выяснить, находится ли проигрыватель QuickTime на паузе или играет с какао. Я использую следующий небольшой AppleScript в Отладчике сценариев и Редакторе AppleScript, и он возвращает true или же false как и ожидалось:

tell application "QuickTime Player" to tell document 1 to return playing

Однако следующий фрагмент кода в приложении Какао не работает:

NSString *source = @"tell application \"QuickTime Player\" to tell document 1 to return playing";
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
NSDictionary *dict = nil;
NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&dict];

После выполнения вышеприведенного кода моя консоль отладки выглядит так:

состояние консоли отладки

В случае, если это уместно, последний шаг отладчика занимает около четырех секунд, тот, который присваивает значение descriptorвыполнить, что мне кажется очень долго.

Я построил простое приложение командной строки с только что перечисленным выше в @autorelease блок, и это работает:

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSString *source = @"tell application \"QuickTime Player\" to tell document 1 to get playing";
        NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
        NSDictionary *dict = nil;
        NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&dict];

        NSLog(@"%@", descriptor);
        NSLog(@"%@", dict);
    }
    return 0;
}

Вывод (когда запущен QuickTime Player):

2014-05-17 11:48:07.255 Sandbox[52872:303] <NSAppleEventDescriptor: 'true'("true")>
2014-05-17 11:48:07.256 Sandbox[52872:303] (null)
Program ended with exit code: 0

Переход по коду песочницы в отладчике descriptor назначение менее чем за секунду. Так что же может отличаться в проекте приложения, которое мешает этому работать?

1 ответ

Решение

Это была одна из тех глупых ошибок, которые я обнаружил, когда мой ум работал над этим в фоновом режиме, пока я работал над другими вещами.

Sandbox. Приложение помещено в "песочницу", а права дают ему доступ к iTunes Apple Events, но я не добавил права QuickTime Player. Приложение для тестирования, которое я создал, не было изолированным, поэтому оно работало нормально.

Другие вопросы по тегам