2013-05-12 14 views
6

Mac App内からApplescriptファイルを実行する方法を探しています。私はNSAppleScript *script = [[NSAppleScript alloc] initWithSource: @"MY_CODE"]];を使用して以前のMacアプリケーションを作ったが、私のapplescriptは非常に長いですし、私はちょうど私のプロジェクトの一部としてそのファイルを参照することができますし、その内容のパイプ(または直接ファイルを実行する私のアプリ内から)。Mac appでAppleScriptファイルを実行しますか?

ありがとうございました!

+0

ここで '[objective-c] applescript'を検索するとどうなりますか? –

答えて

2

コンパイルしたスクリプトやスクリプトのテキストをパッケージに入れてから、NSAppleScriptのinitWithContentsOfURL:error: methodを使用するのはなぜですか?例えば

NSError * error = NULL; 
NSURL * resourceURL = [[NSBundle mainBundle] resourceURL]; 
NSURL * urlOfScript = [resourceURL URLByAppendingPathComponent: @"MyApplescript.scpt"]; 
NSAppleScript *script = [[NSAppleScript alloc] initWithContentsOfURL: urlOfScript error: &error]; 
if(script == NULL) 
{ 
    NSLog(@"could not instantiate script at %@ - %@", [urlOfScript absolutePath], [error localizedDescription]); 
} 
11

アプリケーションバンドルに埋め込まれたファイル、またはユーザー提供のスクリプトを.scpt実行するにはNSUserAppleScriptTask

を使用し、サンドボックス(10.8+)の外にユーザ供給のAppleScriptを実行するには10.7以前ではNSAppleScriptを使用してください。

NSUserAppleScriptTaskとNSAppleScriptはどちらも少し不自由です。ご心配ください。どちらも、CocoaとASタイプの間で自動的なデータ変換を提供しません。つまり、パラメータと結果を渡すためにNSAppleEventDescriptorsを使って手作業で作業することです。 NSAppleScriptインスタンスは、部分的な永続性サポートを提供します。スクリプトのプロパティは、複数のハンドラ呼び出しの状態を保持しますが、変更されたスクリプトをディスクに保存する方法はないため、変更が失われると失われます。 NSUSerAppleScriptTaskは厳密にワンショットの関係であるため、スクリプト状態は呼び出し間ではまったく持続しません。

アプリのバンドル内に埋め込まれたAppleScriptとにObjCコードの間のより深い統合のために

は、AppleScriptObjC(10.6以降)を使用しますASOCは双方向のブリッジですPyObjCやRubyCocoaに似ているため、AppleScriptコードをスクリプトオブジェクト内に書くことができます。スクリプトオブジェクトはObjCコードに通常のCocoaクラスとして表示され、ObjCコードではASハンドラを呼び出し、ASコードではObjCメソッドを呼び出すことができます。一般的なObjCとASの型(int、double、NSStrings、NSArraysなど)は、ブリッジを通過するときに自動的にラップ/変換されるため、AS側で時折キャスト以外の追加作業は必要ありません。

ASOCは完璧ではありません(Apple独自のドキュメント、ブリッジはフリーダイヤルではなく、グリッチは不明ではありません)が、ObjCのスクリプト可能なアプリケーションとの対話のためには、 。

+0

パラメータを渡す方法はありますか?あるいは、呼び出す必要があるたびに引数を補間して新しいスクリプトを作成する必要があります(貧弱なパラメータ)。 –

+0

コマンドラインユーティリティ 'osascript' [まともな方法で引数をサポート](http://hints.macworld.com/article.php?story=20050523140439734)。 Objective-CやSwiftで同様のことが可能であることを願っています。 –

+1

['NSAppleScript' /' NSUserAppleScriptTask'](http://appscript.sourceforge.net/nsapplescript.html)を使用してください。 ['AppleScriptObjC'](http://appscript.sourceforge.net/asoc.html)を使用します。 – foo

関連する問題