2

QuickTime プレーヤーが一時停止されているか、Cocoa から再生されているかを確認しようとしています。Script Debugger と AppleScript Editor で次の小さな AppleScript を使用すると、期待どおりにtrueorが返されます。false

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

ただし、Cocoa アプリの次のコード スニペットは機能しません。

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];

上記のコードを実行すると、デバッグ コンソールは次のようになります。

デバッグ コンソールの状態

関連する場合、デバッガーの最後のステップ、つまり に値を割り当てるステップを実行するのに約 4 秒かかりますが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 秒以内に実行されます。では、これが機能しない原因となっているアプリ プロジェクトの違いは何でしょうか?

4

1 に答える 1

3

それは、他のことをしている間、バックグラウンドで頭で考えているときに気づいた、ばかげた間違いの 1 つです。

サンドボックス。アプリはサンドボックス化されており、権限によって iTunes Apple Events にアクセスできますが、QuickTime Player の権限は追加していません。私が作成したテスト アプリはサンドボックス化されていないため、問題なく動作しました。

于 2014-05-18T12:53:48.253 に答える