月: 2024年12月

macOS 15: Pasteboardにimageを設定したときの挙動が変わった?

Posted on by

これまで利用してきたAppleScriptの挙動が変わってしまい、面食らっています。SF Symbolsの内容(文字)をコピーして呼び出すと、いい感じに画像にレンダリングしてクリップボードに設定するというScriptです。

SF Symbolsは、Appleがアイコンなどの素材として用意した「フォント」であり、アプリ間の基礎的なアイコンを共通化して、文字が読めなくてもなんとなくアプリを操作できるようにしようという、現代において最も新しい象形文字ともいえます。

SF Symbolsをブラウズするアプリ「SF Symbols」(現行バージョン6.0)が配布されており、画像レンダリング機能もついているのですが、アプリの画面上のアイコンをねらって作られている機能であるため、いまひとつレンダリングサイズが小さいという不満があります。

かくして、クリップボードに入れたSF Symbolsの文字を指定色で透明画像の上にレンダリングしてクリップボードに入れるというAppleScriptは継続して使用しています。

ただ、ここに来て問題が発生しました。指定した色と、実際に画面上で表示される色が異なるという問題です。

macOS 13とmacOS 15の上で比較を行い、同一プログラムでもあきらかに処理結果が違います。

Script Debuggerを用いて、処理のステップごとに値を返すようにして(Script Debuggerだと、NSImageやらを直接画面上でブラウズ可能)確認してみたのですが、どのステップでも期待どおりの結果になっています。

結局残されたのは、Cocoaの機能を用いて記述されたペーストボード(クリップボード)にNSImageを設定する処理。ペーストボードにNSImageを設定したときに色が変わります。

そして、内容をKeynote上にペーストするとその現象の一端が見えてきます。

Keynoteの書類上にmacOS 13上で処理した画像とmacOS 15上で処理した画像を並べて、それぞれを選択してみると......画面右端の画像プレビューエリア上では色がまったく同じです。書類上では違う色に見えるのに、プレビューでは一緒。

これは、間違ったカラープロファイルが適用されてしまっているか、あるいは明示的に何かのカラープロファイルを付加したNSImageをペーストボードに設定する必要があるか、のどちらかでしょう。

–クリップボードに内容を設定する(復帰用)
on restoreClipboard:theArray
— get pasteboard
set thePasteboard to current application’s NSPasteboard’s generalPasteboard()

— clear it, then write new contents
thePasteboard’s clearContents()
thePasteboard’s writeObjects:theArray
end restoreClipboard:


さんかくScript実行直後の状態。Finder上でクリップボードの内容を表示させたところ。色は変わっていないようだが......