用意したアイコンファイルが display dialog で表示できない < Apple Script >

環境

macOS Mojave バージョン 10.14.6 (18G6020)

スクリプトエディタ バージョン2.11 (203.1) Apple Script 2.7


変数 iconFile に格納したPOSIX形式のパスで指定して display dialog でカスタムアイコンを表示しようとすると、下記画像のようなエラーが発生して実行できません。


そうかと思えば、まったく同じコードにも関わらず、他のファイル内で実行すると、正しく動作したりもします。


この「実行できたりエラーが起きたり」の原因をご存知のかたがいらっしゃれば、お知恵を貸していただきたいと思います。


--


前後の命令や記述の仕方によっては「まったく同じコード」でも実行できたりエラーが発生したりする動作が不安定なスクリプトエディタにはほとほと辟易しています。まあ、そもそも直す気もないのでしょうが、開発ツールをおざなりにする最近のアップルの姿勢には疑問を覚えます。

Mac mini, macOS 10.14

投稿日 2020/09/01 06:44

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2020/09/02 09:02

# なんかこのボード調子が悪いようですね...。


コードの提供ありがとうございます。ASOC 絡みの問題でしたか。当方でも確認できました。原因は良く分かりませんが、以下のようにすると大丈夫のようです。(変数名は iconFile と勝手に変更しました)


display dialog "@" with icon iconFile as POSIX file


または


display dialog "@" with icon iconFile as POSIX file as alias


AppleScript でファイルのパスを扱う場合は (可能な限り) alias 値に変換してからの方が問題が起きにくいような印象を持ってます。また、パスの形式を変換する際は as 演算子を使った方が確実のような気がしてます。



返信: 7
スレッドに付いたマーク ランキングトップの返信

2020/09/02 09:02 light289 への返信

# なんかこのボード調子が悪いようですね...。


コードの提供ありがとうございます。ASOC 絡みの問題でしたか。当方でも確認できました。原因は良く分かりませんが、以下のようにすると大丈夫のようです。(変数名は iconFile と勝手に変更しました)


display dialog "@" with icon iconFile as POSIX file


または


display dialog "@" with icon iconFile as POSIX file as alias


AppleScript でファイルのパスを扱う場合は (可能な限り) alias 値に変換してからの方が問題が起きにくいような印象を持ってます。また、パスの形式を変換する際は as 演算子を使った方が確実のような気がしてます。



2020/09/02 05:32 Hiro__S への返信

「再現」という意味でいうなら、以下のように書くと件のエラーが発生しました。


# ケース1

use framework "AppKit"

set iconFIle to "/POSIX形式のパス/******.icns"

display dialog "@" with icon file POSIX file iconFIle


# ケース2

use framework "Foundation"

set iconFIle to "/POSIX形式のパス/******.icns"

display dialog "@" with icon file POSIX file iconFIle


なお、以下のコードだと件のエラーは起きません。

use AppleScript version "2.5"

use scripting additions

set iconFIle to "/POSIX形式のパス/******.icns"

display dialog "@" with icon file POSIX file iconFIle


「use framework "AppKit"」または「use framework "Foundation"」が原因で件のエラーが発生するのだとしても、この命令を外すとそれはそれで他の命令が実行できなくなってしまう(ASOCも時折扱います)ので外しようがありません(と思っているのですが、実はそうでないのかもしれません……)。



Hiro.S さん、上記のコードで再現できましたでしょうか?

2020/09/04 05:48 Hiro__S への返信

use AppleScript version "2.5"
use scripting additions
use framework "Foundation"
use framework "AppKit"
set iconFile to "/POSIX形式のパス/******.icns"
display dialog "@" with icon iconFile as POSIX file as alias

たしかに動きました。

「POSIX file "POSIXパス"」のカタチは実際よく使いますが、「"POSIXパス" as POSIX file」といったふうに、as 演算子を使った書き方はしたことがありませんでした。


「なんかよくわかんないけど、動く」という点でモヤモヤした気持ちも残りますが、まずは動いてもらわないと困る(プログラム的にそれってどうなの!?というのはもちろんありますが)ので、とても助かりました。ありがとうございます。

2020/09/05 22:30 Hiro__S への返信

まだまだ知らないことだらけなので、いろいろなことを教えていただけるのはとても助かります。

他の言語と比べて圧倒的に(日本語の)資料が少ないですから、AppleScriptは。。

特にASOCの情報源に関してはほぼ一択の状況ですし。


ありがとうございます。

2020/09/04 06:53 light289 への返信

AppleScript を深く理解しておらず経験則からしかコメントできずすみません。とりあえず動くようにはなったようで良かったです。


スクリプトの内容にもよるでしょうが、フォーマットがスクリプトバンドルでも良いならアイコン用画像ファイルを内蔵してしまう手もあります。


POSIX 形式のパスではないので、質問の内容からは逸れるかもしれませんが...、ご参考まで。


use AppleScript version "2.5"
use scripting additions
use framework "Cocoa"

property OSX : current application
property nil : missing value

on run
    repeat with i in {"001.png", "002.png", "003.png", "004.png"}
        set icon to path to resource i in directory "Icons"
        display dialog i with icon icon
    end repeat
end run


このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

用意したアイコンファイルが display dialog で表示できない < Apple Script >

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。