FC2ブログ

Cocoa-AppleScriptにおける問題

最近、少しずつスクリプトをCocoaに移植していますが、その過程でいろいろとおかしな現象に出会いました。
いくつかの問題は自力で解決していますが、いまだに解決しない問題も多く、悩んでいます。
特に、これまで多用してきたスクリプトオブジェクトに関する問題が多く、これまでのスクリプトを移植するにあたって障害となっています。

例えば、Cocoa-Appletからはscriptのstoreができません。
具体的には、以下のスクリプトは実行時にエラーになります。

set tempPath to ((path to desktop as string) & "temp.scpt") as string
store script bb in file tempPath replacing yes
script bb
beep
end script

Script Editor

また、以下のようなスクリプトは、Cocoaで実行したときとそうでないときと(例えばScript Editor上)で、書き出されるファイルが違います。
Cocoaからは、実質的に空に近いファイルしか生成されません。

set thePath to ((path to desktop as string) & "test.dbn") as string

do shell script ("touch " & quoted form of (POSIX path of thePath))
--Cocoaでは先にファイルを作成しなくてはいけない
set FileID to (open for access thePath as alias with write permission)
try
set eof FileID to 0
write {bb} to FileID as list --ここの動作が環境によって違う
close access FileID
on error errStr number errNum
try
close access FileID
end try
error errStr number errNum
end try

script bb
beep
end script

Script Editor

何か情報をお持ちの方はご教授ください。

また、すでに解決した問題としては、以下のようなものがあります。
1. (path to me)は正しく機能しない。
かわりに(path to current application)を使う。

2.fileをreadする前には必ずopen for accessしなくてはいけない。
そもそも昔からこれが決まりだったが、Classic Mac OSではそのアプリで一度もopen/closeしたことのないファイルはopenしなくてもreadできた。また、OS Xでは少なくともLeopardではreadにopenは不要になっていた。そのため、Leoardではopenせずにファイルをreadするようにしていた。Cocoa環境では再び厳格化され、openしないとreadできなくなった。多分。

3.存在しないfileをopenできない。
これまでのAppleScriptでは、存在しないファイルパスにopen access for writingにより新規ファイルが自動的に作成されたが、Cocoaではエラーが返るようになった。そのため、ファイルの書き込み動作の前には必ずtouchコマンドを実行するようにした。

基本的な読み書きの処理にかなり手が加わっているため、これまでのAppleScriptをCOcoa-AppleScriptで動作するようにするのはかなり難しいです。アプリの起動や終了の処理の方法の違いは、Appleが用意したスクリプトアプリケーションのひな形のおかげである程度は吸収されていますが、アプリの移植にはまだまだハードルが高いのが現実です。
テーマ: Mac | ジャンル: コンピュータ

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

Cocoa applet内では store script命令をはじめとして、スクリプトオブジェクトを用いたスクリプトのいくつかが動作しないことはすでに判明しています。当サイトのソフトウエアのうち、その

  • 2013/08/25 (Sun) 23:56
  • MacLab. News Blog