Script Editorでオープン中のAppleScript書類に対してすべて文字置換を行って、変更があれば保存を行うAppleScriptです。
Xcodeで作成するAppleScriptアプリケーションのプロジェクトで、サブScriptをZipアーカイブに入れ、展開しては順次呼び出すようにしていました。
サブスクリプト側とメインのAppleScriptアプリケーション側はUser Defaultsを介してパラメータのやりとりを行っていますが、Bundle IDの大文字/小文字の記述ミスからうまくパラメータの受け渡しが行えませんでした。
そこで、すべてのサブスクリプトを書き換えることにしたのですが、順次オープンして書き換えたのでは、(サブスクリプトの数が多すぎて)手間がかかり書き換えミスの可能性も否定できません。テキストエディタでは、BBEditなどで指定ディレクトリ以下のテキストファイルに対してすべて処理する機能が実装されていますが、Script DebuggerなどAppleScriptの編集プログラムにその機能が実装されているのは見たことがありません。
処理内容も簡単なので、その場で作ってしまいました。
なお、Script EditorをコントロールするAppleScriptは、大事をとってScript Editor以外のプログラム上で実行することが推奨されます。Script DebuggerかmacOS標準搭載のスクリプトメニューです。
Mac OS X 10.4の頃までは、Script Editor上でScript EditorをコントロールするAppleScriptを書いて実行するといろいろ不具合が出ていました。Mac OS X 10.5以降でずいぶん改善された印象があります。
本AppleScriptのような処理内容では、単なる文字置換ではなく、指定の構文要素(文字定数など)に該当するものがあれば置換を行うなど、より高度な処理を行うものに書き換えていくとよいでしょう。さすがに変数名の置換は作って使っていますが、文字定数やコメント内容を対象にするものを用意しておいてもいいように思えます。
AppleScript名:オープン中のScriptをすべて書き換える.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/01/19 — – Copyright © 2019 MyCompanyName, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set origStr to "jp.piyomarusoft.samplebundleid" set toStr to "jp.piyomarusoft.sampleBundleID" tell application "Script Editor" set dList to every document repeat with i in dList set j to contents of i tell j set aCon to text of it set bCon to repChar(aCon, origStr, toStr) of me considering case if aCon is not equal to bCon then set text of it to bCon save end if end considering end tell end repeat end tell –文字置換ルーチン on repChar(origText as string, targStr as string, repStr as string) set {txdl, AppleScript’s text item delimiters} to {AppleScript’s text item delimiters, targStr} set temp to text items of origText set AppleScript’s text item delimiters to repStr set res to temp as text set AppleScript’s text item delimiters to txdl return res end repChar |