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