2

Mac OS X 10.7 を対象とするサンドボックス アプリがあり、次の AppleScript を実行したいと考えています。

tell application "Safari" to add reading list item "http://www.apple.com"

このスクリプトを AppleScript エディタでテストしたところ、正しく実行されました。

Cocoa アプリで、適切な一時資格をセットアップし、適切に実行される次のスクリプトでテストしました。

tell application "Safari" to activate

しかし、Cocoa アプリに最初のスクリプトを挿入すると、エラーが発生します。これが私が使用しているコードです

    NSString *url = [post.url absoluteString];
    NSString *source = [NSString stringWithFormat:@"tell application \"Safari\" to add reading list item \"%@\"", url];

    NSDictionary *errorDictionary;
    NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];

    if ( ![script executeAndReturnError:&errorDictionary] ) {
        NSLog(@"Error while saving to Safari Reading List: %@", errorDictionary);
    }

エラーは

2012-09-20 10:30:29.370 Cream[2752:303] Error while saving to Safari Reading List: {
NSAppleScriptErrorBriefMessage = "A identifier can\U2019t go after this identifier.";
NSAppleScriptErrorMessage = "A identifier can\U2019t go after this identifier.";
NSAppleScriptErrorNumber = "-2740";
NSAppleScriptErrorRange = "NSRange: {29, 11}";
}

エラーは「読み取り」という用語を参照しているようです。まるで Safari スクリプト辞書をロードしていないかのようで、「読み取りリスト項目」の意味を理解していません。

サンドボックスを無効にしてアプリを実行すると、まったく同じスクリプトで完全に動作します。

何が起こっているのか知っている人はいますか?サンドボックスのどこかに別の穴を開ける必要がありますか?

4

2 に答える 2

2

サンドボックス化されたアプリは AppleEvents を他のアプリに送信できないため、AppleScript を使用して他のアプリケーションと通信することはできません。

于 2012-09-20T10:18:46.200 に答える
2

問題は、com.apple.safari ではなく、エンタイトルメントでバンドル ID com.apple.Safari を使用していたことが判明しました。

于 2012-09-20T11:11:54.993 に答える