AppleScriptの統合開発環境「Script Debugger 7」をAppleScriptからコントロールしたときに、編集中のAppleScript書類から特殊な属性値を取り出せることを確認しました。
# 寝て起きたらShane Stanleyからコメントが送られてきていたので、追記しています(Thanks Shane!)
AppleScriptを編集するプログラム「スクリプトエディタ」「Script Debugger」自体もAppleScriptからのコントロールが可能になっています。対応度でいうとスクリプトエディタのほうが「できることが多い」状態(Attribute Runsを取得できるので、スクリプトの解析を行うにはスクリプトエディタの方が有利)ですが、Script Debuggerにもいろいろと独自に拡張した機能が見られます。
よくよく確認してみたところ「なんでこんなもんが取れるんだ?」という不思議なものがいくつかありました。
Copyright表記(copyright)
なぜ、このようなものが取得できるのか不思議ですが、調べてみたところ編集中のAppleScriptを解析して取り出しているのではなく、バンドル形式のAppleScript書類中のInfo.plistのエントリを取り出しているようです。
–> Shane Stanleyから「そのとおり」とコメント
使用Framework(used framework files)
これは、編集中のAppleScriptを文字列サーチして見つけているものと思われます。ファイルパスのリストで返ってきます。
–> ファイルパスではなく名称リストでした(訂正) また、文字列としてサーチしているのではなく(コメントにuse frameworkを書いておいても無視)実際に解釈して処理しているとのこと
use AppleScript version "2.4"
use framework "Foundation"
use framework "OSAKit"
use scripting additions
–本ScriptをScript Debuggerでオープンしておき、他のエディタ(Script Editor)でAppleScript書類のプロパティを取得すると、used frameworksを取得できる
–> used frameworks:{"Foundation", "OSAKit"}
★Click Here to Open This Script
使用Script Libraries(used script library files)
ファイルパスのリストで返ってきます。同一ライブラリのうちどのバージョンのものが検知されるのか、といったところは確認しておきたいところです。
レガシーScript Libraries(legacy script libraries)
macOS 10.9で搭載されたAppleScript Librariesですが、10.9からどこまでがScript Debuggerが想定している「レガシー形式」(legacy script libraries)なのかが不明です。
(a) macOS 10.9だけLegacy Libraries
(b) macOS 10.9〜10.10がLegacy Libraries
の2つの可能性が存在しています。
–> Shane Stanleyのコメントによれば、本プロパティはScript Debugger 6までのみで有効な値であるとのこと。Script Debugger 7はmacOS 10.11以降でのみ動作するので、(b)の可能性が高そうです(憶測)。
OSAX(used scripting addition files)
これは、あまり真剣に調べていませんが、、、、正確にAppleScript中で使用しているOSAXをリストアップしているのかどうか、半信半疑なところです。
–> Shane Stanleyによれば、これはちゃんとAppleScriptを解釈して抽出しているとのこと
アプリケーション(used applications)
本当に検知できるのか半信半疑なところです。バンドルIDで指定したらどうなるのか、とか疑問がけっこうあります。
–> ShaneからBundle IDで評価しているとのコメントアリ。実際にさまざまな形式でアプリケーションを指定してみたら、取得できました。
use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
tell application "Finder"
–アプリケーション名
end tell
tell application id "com.apple.Safari"
–Bundle ID
end tell
tell application "/Applications/Mac Down"
–Path
end tell
set aScriptStr to "tell application \"Terminal\" to activate"
run script aScriptStr –String
—————–
–> used applications:{"Finder", "Mac Down", "Safari"}
★Click Here to Open This Script
組み込みScript Libraries(embedded script libraries)
編集中のバンドル形式のAppleScript書類のバンドル中にAppleScript Librariesを入れている場合にこれを検出するようです。バンドル内を走査してバンドル内に入っているAppleScript Librariesのリストアップはできますが、バンドル内に入れてあるのにuse宣言していない場合にはどーなるのか、といった「穴」はいろいろと見つかりそうな気配がしています。
–> Shane Stanleyによれば、いったん利用中のScript Libraryの情報を取得して、バンドル中に存在するもののみを抽出しているとのこと。「利用していないが入っている」ライブラリは無視するとのこと。また、入れ子でライブラリ中に入っている状態のライブラリは検出しないとのこと。AppleScriptバンドル書類を「親」とすると、AppleScript Libraries in bundleを「子」、さらにその中に入っているAppleScript Librariesを「孫」としたときに、「子」の階層までが検出範囲であるとしています
AppleScript名:ScriptDebugger 7で最前面のドキュメントから特殊な属性値を取得 |
tell application "Script Debugger" tell front document –set reqImportFiles to required import items of front document set aCopyright to (copyright) –> "Copyright © 2018 Piyomaru Software, All Rights Reserved" set frameworkList to (used framework files) –> {file "Cherry:System:Library:Frameworks:Foundation.framework:"} set libList to (used script library files) –> {file "Cherry:Users:me:Library:Script Libraries:asHTMLexportLib.scpt", file "Cherry:Users:me:Library:Script Libraries:BridgePlus.scptd:"} set legacyLibs to (legacy script libraries) –What? –> {} set osaxList to (used scripting addition files) –> {file "Cherry:System:Library:ScriptingAdditions:StandardAdditions.osax:"} set appList to (used applications) –> {"Finder"} set embLib to (embedded script libraries) –> {} properties end tell end tell |