AppleScript
macOS 12以降では、iOS系のOSから移植された自動化ツール「ショートカット」(Shortcuts.app)が利用できる。このツール自体がAppleScriptからの操作に対応しており、指定のショートカット(ユーザーが定義した自動化ワークフロー)を実行できるほか、Shortcuts.appが起動していない状態でも、AppleScriptからの実行専用バックグラウンドツール「Shortcuts Events」を指定してショートカットの実行が可能。
日本語音声認識でAppleScriptを実行できる。実行可能形式は、AppleScriptのフラット形式(.scpt)およびAppleScriptアプレット。Siriとは別の音声認識コマンドであり、あらかじめ指定しておいた固定文字列を日本語音声認識して、合致すればコマンドを実行する。macOS 12でショートカット.appがmacOSに搭載されたことにより、AppleScriptを実行可能な音声認識コマンドの実行系が2つ存在している。
Cocoaのクラス名やメソッド名でAppleScriptの予約語とコンフリクトするものについては「|」で囲う必要がある(例:NSURL、URL、document、count、propertiesなど)。ドットシンタックスもサポートしていないため、現行のObjective-C 2.0にくらべるとやや冗長な表記になる。
Cocoaオブジェクトの結果表示やログ表示については、macOS標準添付のスクリプトエディタではサポートしていない。Cocoaオブジェクトのログ表示などを利用するためにはサードパーティーの開発ツール「Script Debugger」の利用が必要である。
スクリプトの例(変数「aString」のアルファベット大文字を小文字に変換する)
Objective-C
AppleScriptObjC
AppleScript対応アプリケーションへのtellブロック内でAppleScriptObjCの命令を呼び出すとエラーになる。このため、たとえばAdobe InDesignの書類から得られたデータをAppleScriptObjCを用いて高速にソートしたい場合などは、AppleScriptObjCの機能部分をサブルーチンとして分離し、InDesignへの命令ブロックと明示的に分ける必要がある。
なお、AppleScriptObjCで実行されるCocoa機能呼び出しはARC環境下で実行されるため、releaseなどのメソッドを呼び出すと実行環境ごとクラッシュする。
AppleScript専用のサードパーティー統合開発環境といえるScript Debuggerでは、デバッグ時にAppleScript互換の「AppleScript Debugger」というAppleScriptとは別のOSA言語を実行することになる。厳密にいえばAppleScriptそのものを実行するわけではないため、振る舞いが異なる箇所が出てくることは否定できない。ただし、以前(Classic Mac OS時代)に比べると純正AppleScript環境との互換性は大幅に高まっている。強力で便利な環境であるが、「デバッグ時以外はScript Debuggerを使うべきではない」という方針の開発現場もあるのは、この「互換性問題」ゆえである。
Shortcuts.appのアクションに「AppleScriptを実行」が用意されており、ショートカット内でのAppleScript実行が可能である。このアクションはmacOS専用であり、他のOS上では実行できない。Cocoaの機能呼び出しや、ユーザー環境にインストールされたAppleScript Librariesの機能呼び出しなどが可能。このことにより、Mac上であればSiri経由で日本語音声認識/テキスト操作によりAppleScriptを実行できるようになった。
実行したユーザーが承認しなかった場合にも、本項目にチェックボックスがオフになった状態で表示されるため、あとからシステム環境設定上の本項目において承認を行う(チェックボックスをオンにする)ことが可能である。
なお、一度「オートメーション」項目に登録され、ユーザーの承認を得ていれば、毎回ユーザーの承認ダイアログが表示されることはない。
逆に、本「オートメーション」項目に意図的に登録させたい場合、アプリケーションのバージョン番号を確認したり最前面に表示させる(activate)コマンドを実行させる程度ではシステムが反応しない。他のアプリケーションを操作するAppleScriptアプレット/AppleScriptアプリケーションにおいて、初回起動時に「オートメーション」項目に登録される程度の簡単な(害のない)アプリケーション操作を意図的に行う必要が生じるようになった。AppleScript側から任意のアプリケーションに対する操作が許可されているかを知ることは、サードパーティのフレームワークを呼び出すことで可能となっている。