AppleScript の JavaScript for Automation でテキストをファイルに保存する Objective-C Bridge編
前回の記事
前回は AppleScript の StandardAdditions を使ってテキストファイルの書き出し保存を行ったが、
まずどんな関数があるのか、そして関数の引数や実行時の挙動等を調べるのに手間がかかった。
JavaScript for Automation では Objective-C Bridge というものが使えるので、iOS OSX での開発経験があればこれを使った方が簡単かも知れない。
文法
まず使用したいフレームワークを import する
ObjC.import('Cocoa')
Objective-C の機能にアクセスするには $.
を前に付ける
NSObject
を alloc
init
する例
object = $.NSObject.alloc.init
NSString
を stringWithFormat
で生成する例
string = $.NSString.stringWithFormat('%@ to %@', 'abc', 'xyz') // abc to xyz
引数に可変引数を取る場合は、それぞれの値が同じ型でないといけないという 罠 制約があって数値と文字列を混在させる事ができないので注意。
JavaScript の機能を使って format 指定の文字列を生成する事ができるので、あまり問題にはならないと思う。
string = $.NSString.stringWithString(123 + ' ' + 'to' + ' ' + 'xyz') // 123 to xyz
詳しくは公式リファレンスを参照
JavaScript for Automation Release Notes
保存ダイアログを表示する
NSSavePanel
を呼び出してみたところ Script Editor がハングしてどうもダイアログが開かない。
本当は全て Objective-C Bridge で書きたかったけど、ダイアログの箇所は前回同様 AppleScript の StandardAdditions で書く事にする。
テキストをファイルに保存する
ここは Objective-C でだいぶシンプルになる。
NSString
を用意して writeToFile:atomically:
メソッドを使ってテキストを書き出す。これだけでOK。
メソッド名から関数名への変換は、メソッド名全体をキャメルケースで繋げて引数を順番に入れていくという形を取る。
string = $.NSString.stringWithString('asdf'); string.writeToFileAtomically(filePath.toString(), true);
ファイルのオープンクローズの処理が必要無く楽に書ける。
まとめ
今回は Objective-C ではちょっとした処理しか行わなかったけど、Objective-C Bridge を使えば OS X 内の様々な Objective-C framework の機能を組み合わせて使う事ができるので AppleScript だけでは実現が難しかった事もいろいろとできそう。