- [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 присваивание менее чем за секунду. Так что же может отличаться в проекте приложения, что мешает этому работать?


person Chuck    schedule 17.05.2014    source источник


Ответы (1)


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

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

person Chuck    schedule 18.05.2014