AppleScript書類(アプリケーション)の保存時にコード署名エラーが発生する.

Mac mini 2018, macOS Monterey 12.4(21F79)


タイトルの通り、書類を編集したあと保存しようとするとコード署名エラーが発生し、保存できません.以下のメッセージがダイアログに表示されます.

/Volumes/ディスク名/.TemporaryItems/folders.501/TemporaryItems/NSIRD_スクリプトエディタ_FcpUmX/ファイル名: resource fork, Finder information, or similar detritus not allowed

スクリプトエディタを再起動しても、編集後は再び同じエラーが発生します.そうなると基本的に編集内容を破棄するしかありません.なお、パスにはファイル自身のものでなく、ドットから始まる .TemporaryItems 以下に収納されたファイルパスが示されています.内部的にその場所でコードが展開され、実行などがされるのでしょうが、そんなものを見せられてもどう対処して良いものやらわかりません.


この書類自体がスクリプトエディタを用いて作成したものであり、先日は編集後も正しく保存できていました.保存だけでなく、実行もできています.それとも、一度実行(Finderからアイコンをダブルクリックして起動)させてしまうとダメなのでしょうか.あと、スクリプトエディタにてAppleScript書類をアプリケーションとして保存する際、そもそもコード署名に関する選設定はないはずです(書き出し時は選択項目がありますが).にも関わらずコード署名うんぬんと言われても困ってしまいます.


さて、どういうことでしょう.単に動作が安定していないだけなのでしょうか.といっても、時期 OS も発表され、Monterey 自体も 12.4 にまでバージョンが上がっているというのにまだベータ扱いなのでしょうか.信じられません.


自身の書き込みで恐縮ですが、どうもバグと思しき挙動を示す謎動作も見られます.単に再現パターンが(自身の中で)見つかっていないだけといえますが、気持ちが悪いのは確かです.

「アプリケーションを終了させた時、次に… - Apple コミュニティ


他にもこの OS で使用するスクリプトエディタには他にもいくつか奇妙な動きがあり、それにも困っています(以前どこかで書いた内容も含まれていますが).

  • AppleScript書類を開いたあと、一部の行が右寄せの状態で表示されている(カラーリングは通常時と同じ).

→通常、特殊な設定をしない限り「コードが右寄せで表示される」なんてことはないはずですが..

  • ビームカーソルを動かすと、以前のビームカーソル位置にそのビームカーソルの残像が表示される.

→スクリーンショットを撮ろうとすると、その瞬間に直る.スクリーン内容を更新させる何かがおかしいのでしょうか.

  • コンパイルすると、数ピクセル分、上部へスクロールする(以前のバージョンでもあった謎挙動).
  • コンパイルすると画面が勝手にスクロールする.

→カーソルの位置は必ず画面のどこかにあり、範囲外に出ることはない.

  • スクリプト・コンポーネントエラーが多発する.


スクリプトエディタは自身がよく使用するアプリケーションだけにアラが目立つのかもしれませんが、それにしても、フツーに使用感が悪いです.サポートする気がないなら、とっととAppleScriptなんてやめてしまえば良いのにとさえ思います.もっともこれは自身に対してでもあり、アップルに対してでもあり、ですが.


少し話が逸れてしまいましたが、このコード署名エラーを解消する方法はないものでしょうか.

こんなくだらないことに時間を取られ、ほとほとうんざりです.


Mac mini, macOS 12.4

投稿日 2022/07/07 07:35

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

投稿日 2022/07/08 04:23

もうちょと丁寧に検証してみました。


どうもアプレットのパッケージ内にあるファイルにリソースフォークや FinderInfo などの属性が付いているとダメのようです。(つまりダイアログのメッセージどおり)


古い環境で作成したアプレットではパッケージ内の「main.scpt」に拡張属性 FinderInfo が付与され、そこにタイプ情報が記録されます。これが Monterey 環境では NG となる、、、ということのようです。


また、パッケージ内に自分で格納したサブスクリプトや画像ファイルなども要注意で、カスタムアイコン付きだとリソースフォーク、拡張子を非表示にすると FinderInfo が加えられるので NG の模様。


ーーーーー


追記: xattr コマンドでパッケージ内の全アイテムから拡張属性を削ったら保存できるようになりました。ただ、それで本当に大丈夫か分かりません。アプレットを作り直した方が安全かも。

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

2022/07/08 04:23 Hiro__S への返信

もうちょと丁寧に検証してみました。


どうもアプレットのパッケージ内にあるファイルにリソースフォークや FinderInfo などの属性が付いているとダメのようです。(つまりダイアログのメッセージどおり)


古い環境で作成したアプレットではパッケージ内の「main.scpt」に拡張属性 FinderInfo が付与され、そこにタイプ情報が記録されます。これが Monterey 環境では NG となる、、、ということのようです。


また、パッケージ内に自分で格納したサブスクリプトや画像ファイルなども要注意で、カスタムアイコン付きだとリソースフォーク、拡張子を非表示にすると FinderInfo が加えられるので NG の模様。


ーーーーー


追記: xattr コマンドでパッケージ内の全アイテムから拡張属性を削ったら保存できるようになりました。ただ、それで本当に大丈夫か分かりません。アプレットを作り直した方が安全かも。

2022/07/09 18:56 Hiro__S への返信

>サブスクリプトや画像ファイルなどをパッケージ内に追加する際に Finder で追加すると拡張属性付きのままになりアプレット保存時にコード署名エラーとなりますが、スクリプトエディタの右カラムにある「リソース」にドラッグアンドドロップすると余計な拡張属性は自動で削ってくれるようでエラーとならないようです。

これまで「パッケージの内容を表示」してそこへカスタムアイコンなどをコピーしていましたが、このことが関係していたのですね.おっしゃるとおり「リソース」部分へドラッグアンドドロップするとコード署名エラーは発生しなくなりました.Finder からいちいちパッケージの内容を表示するのも面倒でしたし(とはいえ plist を開くにはそうするしか方法はないようですが)、今後は徹底します.


そうなると拡張属性を削る云々は関係なくなってきますが、知識として蓄えておきます.とても有用な情報をありがとうございます.しかも例文付きで.

それにしても、拡張属性うんぬんはずいぶん昔からあるようですが、機能していなかったのですかね.もっとも普通に使う分には意識することもないのでしょうが、開発者にとってこんな大事なことなのに、その情報へのアクセスが皆無というのはどうなんでしょうか.皆が古参の開発者ということでもないでしょうに.

2022/07/09 14:51 light289 への返信

今回の件については拡張属性がポイントのようなのでその調査方法を説明しますね。


アプレット内の main.scpt は、Terminal から ls コマンドや、xattr コマンドなどで調査します。


Snow Leopard 上で作成した自作アプレットを Mojave で調査


ls の結果から main.scpt には拡張属性 com.apple.FinderInfo が付与されていることが分かります。xattr でその中身を見ると、クリエータ情報が「aplt」であり、そのほかの情報はないことが分かります。FSMegaInfo コマンドで解析するとさらに分かりやすいです。(前掲のコメントではタイプ情報と書きましたがクリエータ情報の間違いでした。すみません。)


で、Parallels Desktop 17 上にインストールした macOS の各バージョン (Lion から Monterey) においてスクリプトエディタでアプレットを作成し、同様の調査をすると Sierra 以降の main.scpt には拡張属性が付かないことが分かります。


あとは、拡張属性付きのファイルをパッケージ内に格納後アプレットを保存したり、拡張属性なしのファイルで試したりしながら問題を絞り込むと良いと思います。


# さらに調査を進めた結果、com.apple.FinderInfo と com.apple.ResourceFork は NG。そのほかの拡張属性は大丈夫のような印象ですが、もしかしたらダメなのもあるかもしれません。何にしてもこれ以上の調査は不要と考えてます。

2022/07/09 16:13 light289 への返信

Big Sur 以降では AppleScript をアプリケーション形式で保存する際に自動でコード署名が行われるようです。パッケージ内のファイルには com.apple.FinderInfo と com.apple.ResourceFork が許可されておらず、そのようなファイルがあると今回のようにダイアログが表示されファイルが保存できない仕様となっているのだと思います。


ところで、サブスクリプトや画像ファイルなどをパッケージ内に追加する際に Finder で追加すると拡張属性付きのままになりアプレット保存時にコード署名エラーとなりますが、スクリプトエディタの右カラムにある「リソース」にドラッグアンドドロップすると余計な拡張属性は自動で削ってくれるようでエラーとならないようです。


なので、前掲のコメント「適宜拡張属性を削る...」とか「スクリプト形式ではなく、スクリプトバンドル形式にすると良い」は撤回します。


# Monterey でアプレットを作成するのは初めてなもので多少の間違いは大目に見てください。


2022/07/08 16:43 Hiro__S への返信

古い環境で作成したアプレットではパッケージ内の「main.scpt」に拡張属性 FinderInfo が付与され、そこにタイプ情報が記録されます。これが Monterey 環境では NG となる、、、ということのようです。


もうちょっと詳しく調査しました。アプレット内の「main.scpt」に拡張属性 com.apple.FinderInfo が付与されるのは El Capitan までのようです。


パッケージ内に自分で格納したサブスクリプトや画像ファイルなども要注意


スクリプト形式ではファイルを保存する際にいくつもの拡張属性が付与されるため、そのまま格納するとアプレットが保存できなくなります。なので、余計な情報を削除してから格納する必要があります。また、パッケージ内のスクリプトを再保存した際も適宜拡張属性を削る必要があります。


スクリプトバンドル形式の場合はパッケージ内のファイルに余計な拡張属性がつかないようなので、アプレット内にサブスクリプトを格納する場合はスクリプト形式ではなく、スクリプトバンドル形式にすると良いと思います。


2022/07/09 21:43 light289 への返信

前掲のコメント「適宜拡張属性を削る...」とか「スクリプト形式ではなく、スクリプトバンドル形式にすると良い」は撤回します。


ええと、撤回の撤回 (汗)。よくよく考えたらパッケージ内の xxx.scpt を編集・再保存した際に問題が起きてしまいますね。その場合はやはり拡張属性を削る必要があります。


一旦パッケージの外に出して編集・再保存後に再度パッケージに組み込めば OK ですが、それでは面倒ですしケアレスミスを起こしやすいです。


となると、AppleScript については保存時に余計な拡張属性を付けないスクリプトバンドル形式の方が扱い易いかもしれません。それと、画像ファイルなどは編集後に xattr コマンドなどで拡張属性を適宜クリアすると良いでしょう。


拡張属性うんぬんはずいぶん昔からあるようですが


確かに com.apple.FinderInfo や com.apple.ResourceFork はかなり昔からありますが、Catalina まではアプリケーション形式で保存する際に署名が行われないので、パッケージ内のファイルにこれらの拡張属性が付いていても問題ありませんでした。


ところが Big Sur 以降は自動で署名が行われるため弾き返されると。つまりセキュリティが強化されたと見るべきでしょうね。でもこれって、文書化されてるのかな?ちょっと見つけることができませんでした。



2022/07/07 15:45 light289 への返信

Parallels Desktop 17 上の Monterey 12.4 で問題が再現できました。


Mojave など古い環境で作成したアプレットを Monterey のスクリプトエディタで編集して保存する際に問題が起きるような印象です。


Monterey 上のスクリプトエディタでアプレットを編集したら「保存」ではなく「書き出す...」で新規に作成すれば良いようです。多分...。


2022/07/08 06:01 Hiro__S への返信

>Mojave など古い環境で作成したアプレットを Monterey のスクリプトエディタで編集して保存する際に問題が起きるような印象です。

>Monterey 上のスクリプトエディタでアプレットを編集したら「保存」ではなく「書き出す...」で新規に作成すれば良いようです。多分...。

このあたりのことはメジャーバージョンが上がった(10でなくなった)ことで起こる問題ぽいなという印象はあったのですが、おっしゃるように「書き出す」ことで解決したと思っていました(今回の質問をここでする前の話です).なにせその後は編集して保存という作業も問題なく行えていたのですから.


>どうもアプレットのパッケージ内にあるファイルにリソースフォークや FinderInfo などの属性が付いているとダメのようです。(つまりダイアログのメッセージどおり)

おそらくこのことがエラーの根本的な原因なのでしょう.理解はできます.まあ、納得はしかねますがね.


ともあれ原因がわかれば対処もできるという話ですので、いろいろ調べてみようと思います.ありがとうございました.

2022/07/09 14:55 light289 への返信

次に各コマンドですが、ls と xattr は OS に標準搭載されていて、マニュアルは man コマンドで表示することができます。


FSMegaInfo コマンドは下記リンク先からサンプルコードをダウンロードするとコンパイル済みの FSMegaInfo が入ってるのでそれを使うと良いでしょう。使い方は FSMegaInfo help。


FSMegaInfo


ソースコードがとても古いので現在の Xcode ではビルドできないかもしれませんが、コンパイル済みのものはそのまま Mojave でも Monterey でも動きます。ちなみに私は同コマンドを参考にして自分で拵えた Python スクリプトを普段使ってます。


ところで、拡張属性 com.apple.FinderInfo については以前は多くの情報がありましたが、現在入手可能な情報はほとんどなくなってしまいました。


上記 FSMegaInfo に同梱のソースコード、Command Line Tools に含まれる GetFileInfo のマニュアル、あとは Wikipedia の「Inside Macintosh」にある「Macintosh Toolbox Essentials」が参考になると思います。


2022/07/10 01:20 light289 への返信

そもそも AppleScript と OS のセキュリティの仕組みは相性が良くないのに、さらに自動署名を追加したために今回のようなことになってしまったわけで改善の余地はあると思います。


個人的な意見としては、アプレット保存時に拡張属性を自動で取り除く機能をスクリプトエディタに追加してもらう、、、というのが良いような気がします。(弊害があるかもしれないので、取り除く旨のダイアログを表示すると良いのかな?)


それと、スクリプト形式は廃止してスクリプトバンドル形式に一本化しても良いかもしれないと思ってます。(賛否はあるでしょうが...)


まあ、ここでアレコレ言っても仕方のないことですが、とにかく Big Sur 以降は厄介な仕様になったわけで、件のエラーが出ないようにアプレットを作成してください。


AppleScript でこのような変更があったことを私は知りませんでした。とても良い勉強になりました。ありがとうございます。

2022/07/09 06:23 Hiro__S への返信

追加情報ありがとうございます.知らないことばかりなのでとても勉強になります.

ただそれと同時に、こういった情報をどこから得られているのかとても気になっています.機密扱いとまでいかなくとも、知見の蓄積であることに違いはないのでこれまで踏み込んで聞くことをしてこなかったのですが.少なくともスクリプトエディタのヘルプ(や AppleScript Language Guide

など)から得られる情報だけでは今回のコード署名に関する何かを知ることはできないでしょうし、事実、見つけることもできませでした.

有用なサイトなどがあれば教えていただけないでしょうか.日本語のものでなくても結構です.がんばって翻訳などします(主にGoogle先生が).厚かましいお願いですいません.

2022/07/10 00:19 Hiro__S への返信

>〜Big Sur 以降は自動で署名が行われるため弾き返されると。つまりセキュリティが強化されたと見るべきでしょうね。

なんだかなぁという面持ちで読ませていただきました.拡張属性が悪さをするかもしれないという理由でそれが付与されている場合にエラーとするなら、そもそも拡張属性を付けたり取り除いたりできるのですから実行時にそれらを無視して処理する、という方法は採れなかったのしょうか.そうすれば削除だなんだということを考えなくて良いと思うのですが.とはいえ現状がこうなのですから、たらればを言ってもしょうがないわけですが.

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

AppleScript書類(アプリケーション)の保存時にコード署名エラーが発生する.

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