1

GUIなしでMac OS用のコマンドラインアプリケーションを作成しました。このアプリケーションは/ usr/local/binにあります。場合によっては、そのアプリケーション内でApple Scriptを実行する必要があります。これを行うために、私はNSTaskを作成し、以下のコマンドを実行しようとしている:それはログがメッセージ表示されるだけで、何も起こりません、実行後コマンドラインアプリケーションからAppleスクリプトを実行できません

NSTask *createTask = [[NSTask alloc] init]; 
    createTask.launchPath = @"/bin/bash"; 
    NSString *showAlert = [NSString stringWithFormat:@"/usr/bin/osascript -e 'tell application \"Finder\" to display alert \"My text.\"'"]; 
    NSArray *arguments = [NSArray arrayWithObjects:@"-c",showAlert, nil]; 
    createTask.arguments = arguments; 
[createTask launch]; 

を:

Apr 14 15:35:15 Mac-mini kernel[0]: my-app: guarded fd exception: fd 0 code 0x2 guard 0x7fff8b9e12a8 
Apr 14 15:35:15 Mac-mini com.apple.xpc.launchd[1] (com.apple.ReportCrash.Root[26852]): Endpoint has been activated through legacy launch(3) APIs. Please switch to XPC or bootstrap_check_in(): com.apple.ReportCrash.DirectoryService 
Apr 14 15:35:15 Mac-mini diagnosticd[16097]: error evaluating process info - pid: 26851, punique: 26851 
Apr 14 15:35:16 Mac-mini sandboxd[16099] ([26851]): my-app(26851) deny file-read-data/

をしかし、あなたは、このコマンドを実行した場合端末から直接、正しく実行されます。私に教えてください、私は間違って何をしていますか?

+0

私は 'NST askは実行ループを使用します。あなたのプログラムで実行ループをどのように管理していますか? – trojanfoe

+0

私は実行ループ管理を使用していないようです。私は試してみることを提案できますか? – Emmett

+0

私はそれが実際にあなたの問題に関係しているとは思わないが、Foundationフレームワークを使用している場合は、多くの場合、実行ループが必要です。私は便利なコマンドラインで使うための簡単な[RunLoopController](https://github.com/trojanfoe/RunLoopController)を持っています。 – trojanfoe

答えて

0

私は問題が引用符を使用することがあると思います。クォートスタイルでシェル内で同じコマンドを実行しようとすると、動作しません。下の私の例はうまくいく。一重引用符と二重引用符を切り替えることはできますか?最初の呼び出しを一重引用符で囲み、次に二重引用符をosascriptのまわりで使用しますか?また、表示警告はFinder辞書の一部ではないため、tell application \"Finder\" toを使用する必要はありません。

あなたが持っている...

/usr/bin/osascript -e 'tell application \"Finder\" to display alert \"My text.\"' 

にそれを変更してみてください...

​​

、あるいは簡単なバージョン...

osascript -e "display alert \"My text.\"" 
+0

私は問題が構文にないと思う。ターミナルから私のコマンドラインアプリケーションを実行すると、すべて正常に動作するためです。しかし、この場合、私のコマンドラインアプリケーションは別のアプリケーション(ドライバ)によって呼び出され、メインスレッドからは呼び出されません。 – Emmett

関連する問題