ScriptDebuggerを使っていて、この作業がひんぱんに発生するのでScriptで自動化しました。
AppleScript書類を編集していて、バンドル内にFrameworkなどを突っ込みたいのにフラットなAppleScript書類(.scpt)だったので、そのままでは突っ込めず、コピペで新規バンドル書類(.scptd)を作成して、同じ名前で保存し直す作業です。
とてもとても標準機能で実装されていそうな内容ですが、子細に調査して存在していなかったので(ASObjC Explorerにはあったような気が)、ささっとAppleScriptで実装してScriptDebuggerのスクリプトメニューに入れて使っています。
ウィンドウの表示座標をきっちりそろえるとか、オリジナルのScriptを新規Scriptの作成後にクローズするとか、作りたくなってウズウズしてくる(自分的な)完成度の低さですが、そこでかっちり作り込むと「仕事中にちょっとだけ作るScript」の域を超えてしまうので、自制した次第です。
「すでに、バンドル形式のScriptが同一フォルダ内に存在する場合には警告を出して処理を中止する」か、あるいは「ファイル名に子番号をつけて重複を回避する」ぐらいの処理は足してもいいような気がします。
▲初期状態。フラットなAppleScript(.scpt)で書かれていたので、バンドル内にいろいろ追加できない状態
▲本Scriptの実行後の状態。ファイル名は拡張子を「.scptd」に変更しただけの状態
AppleScript名:ScriptをScript Bundleに |
— Created 2019-05-23 by Takaaki Naganoya — 2019 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" tell application "Script Debugger" tell front document set myType to script type if myType = bundled compiled script then display notification "There is no need to convert…." return end if set mySource to source text set mySpec to file spec try close with saving on error display notification "Can not save this Script. So I quited conversion process…." return end try end tell end tell –ファイルパスの拡張子を付け替えてFileに変換 set pathString to current application’s NSString’s stringWithString:(POSIX path of mySpec) set newPath to ((pathString’s stringByDeletingPathExtension())’s stringByAppendingPathExtension:"scptd") as string set aFile to POSIX file newPath –ファイル拡張子を付け替えた新規ファイル名で保存 tell application "Script Debugger" set aDoc to make new document with properties {source text:mySource, script type:bundled compiled script} tell aDoc set aRes to compile –構文確認(ねんのため) if aRes = false then return –compileを通った場合のみファイル保存を行う save in aFile end tell end tell |