スクリプトメニューやService Stationなど、「メニューやウィンドウを持たないGUIなしツール」がたくさんmacOS環境にありますが、macOS 12.4上ではこれらのAppleScript起動ツールから起動したAppleScriptから、UniformtypeIdentifiers.frameworkを用いたUTIの取得をブロックされているようです。
スクリプトメニューで実行を確認した(途中までで実行がブロックされてしまった)AppleScriptを、スクリプトエディタ上で実行したところ、問題なく実行されます。ちなみに、内容は選択した画像ファイルをPixelmator Proで超解像処理してクリップボードに設定する(コピーする)という「おかわいらしい」内容のものです。
Service Stationは、コンテクストメニューからのAppleScript実行を可能にするAppleScript実行ツールですが、これについてもしかるべきハンドラを書いて同じAppleScriptを実行させるようにしてみたものの、UTIの取得をブロックされるようです。
→ 追試で、Terminal.app上からosascript経由で実行してみたところ、UniformtypeIdentifiers.frameworkの呼び出しに失敗することが判明
明示的にMain threadで実行しないとダメ???>UniformtypeIdentifiers.framework
AppleScript名:🟧選択中の画像を超解像💝処理してコピー.scpt |
— – Created by: Takaaki Naganoya – Created on: 2021/03/25 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.8" — Yosemite (10.10) or later use framework "Foundation" use framework "UniformtypeIdentifiers" use scripting additions property |NSURL| : a reference to current application’s |NSURL| property NSArray : a reference to current application’s NSArray property NSPredicate : a reference to current application’s NSPredicate property NSURLTypeIdentifierKey : a reference to current application’s NSURLTypeIdentifierKey set acceptUTI to "public.image" set aFile to choose file (* tell application "Finder" set aFile to first item of (selection as alias list) end tell *) –set aUTI to getUTIFromFile(aFile) of me –選択ファイルからUTIを –display dialog aUTI –if aUTI is equal to missing value then return –set uRes to filterUTIList({aUTI}, acceptUTI) of me –選択ファイルのUTIが、受付可能UTIに含まれるかどうかチェック –if uRes is equal to {} then return –選択したファイルが画像ではなかった –掃除 tell application "Pixelmator Pro" to close every document without saving –取得した画像を超解像処理してコピー tell application "Pixelmator Pro" try open aFile on error close every document without saving return end try tell front document with timeout of 3000 seconds super resolution end timeout end tell end tell tell application "Pixelmator Pro" tell front document select all copy close without saving end tell end tell on getUTIFromFile(aFile) set aPath to POSIX path of aFile set aWS to current application’s NSWorkspace’s sharedWorkspace() set pRes to (aWS’s isFilePackageAtPath:aPath) as boolean if pRes = false then set superType to (current application’s UTTypeData) else set superType to (current application’s UTTypePackage) end if set pathString to current application’s NSString’s stringWithString:aPath set aExt to (pathString’s pathExtension()) as string set aUTType to current application’s UTType’s typeWithFilenameExtension:aExt conformingToType:(superType) set aUTIstr to aUTType’s identifier() as string return aUTIstr end getUTIFromFile –UTIリストが指定UTIに含まれているかどうか演算を行う on filterUTIList(aUTIList, aUTIstr) set anArray to NSArray’s arrayWithArray:aUTIList set aPred to NSPredicate’s predicateWithFormat_("SELF UTI-CONFORMS-TO %@", aUTIstr) set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list return bRes end filterUTIList |