2012-04-19T16:25:26+09:00

User Domain と Local Domain にバージョンの違う OSAX がインストールされたらどうなるか?

User Domain と Local Domain それぞれに、バージョンの違うスクリプティング機能追加がインストールされたらどうなるか気になった。つまり、~/Library/ScriptingAdditions/ と /LibraryScriptingAdditions/ の両方にバージョンの違う同じ、スクリプティング機能追加がインストールされたら、どちらが使われるのだろう?

ということを調べてみました。どうやって調べたかというと、AppleScript エディタでコマンドを実行して、lsof コマンドでどのファイルがオープンされたかを確認する。

結果だけど、やはり、ホームディレクトリ以下、つまり~/Library/ScriptingAdditions/ が常に優先されるという妥当な結果でした。しかし、面白いのは、~/Library/ScriptingAdditions/ 以下のスクリプティング機能追加には実装されていなくて、/Library/ScriptingAddition にあるスクリプティング機能追加だけに実装されているコマンドがあるとする。/Library/ScriptingAddition にあるスクリプティング機能追加だけに実装されているコマンドを実行すると、両方のスクリプティング機能追加がロードされちゃう。つまり、どのスクリプティング機能追加をロードするかはコマンド単位で決定されているということのようだ。

なんで、こんなことを調べ始めたかというと、さきほどリリースしたスクリプティング機能追加 SmartActivate のインストーラでは、Local Domain にしかインストールできないようにしてしまった。これまで、ホームディレクトリ以下にインストールすることもできたのだけど、そのオプションは削ってしまった。

Mac OS X 10.7 では、スクリプティング機能追加を Local Domain にインストールしないと、アプリケーションの tell ブロック内でコマンドの実行ができなくなっちゃうんだよね。というわけで、インストール先を Local Domain に制限するようにしました。

でも、SmartActivate をアップデートしていただいたとして、旧バージョンが User Domain に残ったままだとすると、旧バージョンが優先されるんじゃないかと思ったけど、恐れていた通りになったということです。

User Domain に旧バージョンがインストールされていたら、警告やできればアンインストールする機能をインストーラに付けられない物でしょうか?