8

最後のアクティブなアプリへのコピー/貼り付けを実行しようとしています。これが私のコードです:

NSString *appleScriptSource = [NSString stringWithFormat:@"\ntell application \"%@\" to activate\ntell application \"System Events\" to tell process \"%@\"\nkeystroke \"v\" using command down\nend tell", [lastApp localizedName], [lastApp localizedName]];

NSDictionary *error;
NSAppleScript *aScript = [[NSAppleScript alloc] initWithSource:appleScriptSource];
NSAppleEventDescriptor *aDescriptor = [aScript executeAndReturnError:&error];

問題は、一部のコンピューターでは正常に動作するが、他のコンピューターでは失敗することです。executeAndReturnError によって返されるエラーからの私のエラー出力は次のとおりです。

2012-06-13 17:43:19.875 Mini Translator[1206:303] (null) (error: {
    NSAppleScriptErrorBriefMessage = "Expected end of line but found \U201c\"\U201d.";
    NSAppleScriptErrorMessage = "Expected end of line but found \U201c\"\U201d.";
    NSAppleScriptErrorNumber = "-2741";
    NSAppleScriptErrorRange = "NSRange: {95, 1}";
})

それが何を意味するのか、なぜそれが起こるのか理解できないようです。

生成された apple-script コードを Apple Script エディターにコピーしてみましたが、ここでは問題なく動作します。

私のアプリはサンドボックス化されています - サポートしたいアプリのキー「com.apple.security.temporary-exception.apple-events」のバンドル識別子を追加しました。

助言がありますか?

4

1 に答える 1

6

\u201c と \u201d は赤いニシンであり、Apple スクリプトによって生成されたエラー メッセージの二重引用符をスマート クォートで囲んでいるだけだと推測しています。問題は、スクリプトにフォーマットしている最後のアプリケーションのローカライズされた名前にあります。あるマシンでこれが表示され、別のマシンでは表示されない理由がわかりません。

たとえば、名前が「Some " App」の場合、二重引用符が二重引用符で囲まれた文字列の途中に挿入されるため、二重引用符が一致しなくなります。名前の二重引用符を「\」に置き換えてみてください。 "' それらをエスケープします。

例えば

NSString *esc = [[lastApp localizedName] stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
于 2012-07-05T21:13:48.407 に答える