私は標準的なCocoaアプリケーションを作成しており、AppleScriptサポートを実装し始めました。私は、アプリケーションのインスタンスを起動し、スクリプトエディタで次のAppleScriptを実行すると、期待通りの出力を得ています:testprop
というプロパティを定義して実装しました。私のアプリはを実行していないとき、私はスクリプトエディタにこの非常に同じAppleScriptを実行する場合AppleScriptの "tell"コマンドでGUIアプリケーションの非GUIインスタンスがバックグラウンドで実行されるのはなぜですか?
tell application "MyApp"
testprop
end tell
はしかし、それはこのプロパティの最後の既知の値を返し、後続の呼び出しのためにそれを返すように続けています。アプリケーションのインスタンスがGUIのどこからでも起動することはありません。
シェルに"ps xawww | grep MyApp"
を実行しました。私のアプリの主な実行ファイルを使って、次のような引数を使ってプロセスが作成されていたことが分かりました:-psn_0_323663
このプロセスは開始されました.AppleScript(他のものの中でも)がプロセスの追跡と制御を行うために使用するのは「プロセスシリアル番号」です。
ここでは何が起こっていますか?これが起こらないようにするにはどうすればいいですか?つまり、AppleScriptがコマンドを実行したときにコマンドを実行したときに、適切なGUI対応のインスタンスとして起動します。
は編集:
は、上記の私のラップトップ上でのみ発生するようです。私は私のMac Miniにまったく同じことをしようとすると(OSのバージョンが両方で同じである:10.5.8):
$ osascript -e "tell application \"MyApp\"" -e "testprop" -e "end tell"
26:40: execution error: The variable testprop is not defined. (-2753)
これはまさに起こったことでした。ドックの左側にアプリアイコンを固定していて、アイコンがドックの右側に表示されていないので、何か「非GUI」モードで動作していると誤って思っていました。 :)また、他のコンピュータで動作しなかったのは、古い「Debug」リリース(AppleScriptサポートなし)でコンパイルされていたためです。 – hasseg
はい、LaunchServicesが対象とするアプリの間違ったバージョンを選んだのは本当に面倒です。アプリの他のすべてのビルドを削除するか、開発中にバンドルIDを変更して、LSに他のビルドが表示されないようにします。 –