5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CoconeAdvent Calendar 2022

Day 10

Automator:DLしてきたファイルを実行しようとするとゴミ箱にいれろと言われるので、拡張属性削除を右クリックに仕込む

Last updated at Posted at 2022-12-09

はじめに

Macあるあるのネタなんですが、Macではセキュリティーとプライバシーという設定項目があります。
で、他からDLしてきたアプリやら実行ファイルは、
「開発元が不明だ!セキュリティーとプライバシーで設定を解除しろ!でなければ、実行させてやらん!」 と怒られます。

こんなダイアログですね。

いちいち、うるさいな〜〜いいから実行させてよ〜〜と、思いながら、このまま開く ボタンを押しますよね。
スクリーンショット 2022-04-25 11.33.17.png

実は最近、この新種なダイアログが出てきたんです。

ゴミ箱に入れろ!!というダイアログです。

君は何を言ってるのかね・・・?

どういうことなのか詳しく

こちら、もちろんですが、DLしてきたファイル自体は、アプリケーションです。(xx.app)
自分の環境で作った状態からの起動はなんら問題がありません。
ではなぜダメなのか?

他の環境からDLしてくると、拡張属性が変わってしまうからです。

拡張属性ってなんですか?

例えば、Chromeを使って、ConfluenceやSlackなどからファイルをDLすると、お前さんは一体どこからDLしてきたのかなあ? 
外からDLしてきたんだね、read onlyにしといてあげようね。と勝手なことしてくれます。
DL日時なんかも入ったりするっぽいですね。

commandで確認するとわかりますが、参照リンクにあるように、
com.apple.quarantineというのが勝手についちゃうんですね。
余計なことを・・・・・。

まあ、私を思ってしてくれてのことなんですが、こいつが勝手についてしまうことにより、ゴミ箱に入れろダイアログが出てきます。

そして、app自体をzipに詰め込んでから、サイトにUPして、さらにDLしたとしても属性com.apple.quarantineは勝手に付与されてしまうのです。

コマンドで属性を削除すれば、実行できるようにはなる

以下のようにすれば、属性は削除できます。

xattr -cr xxxx.app

問題は、コマンドを打たせるという行為を、デザイナさんや運営さんなど、非エンジニアにさせるべきではないということです。

ではどうするか?
automatorで、workflowを作ることにより、GUI的に操作して属性削除することができます

automatorでworkflowを作って回避

結構簡単に作れます。
右クリックにメニューを仕込む、みたいな操作を作れます。

つまり、私がやろうとしているのは下記です。

  1. ファイルをDLしてくると、拡張属性がついちゃう
  2. 拡張属性を削除するための処理をworkflowで作成
  3. クイックアクションでユーザーに拡張属性削除させる

automatorはGUI的に作成することができる。

automatorを起動して、ワークフローを選択します。

D&D的な感じで、ぽこぽこ右側の欄に持っていくと、操作を追加できます。
スクリーンショット 2022-11-29 19.36.44.png

あらまあ、便利。

やりたいことは、ファイル or フォルダを選択し、その名称をコマンドに渡して属性削除したい。

スクリーンショット 2022-11-29 19.38.10.png
項目を入れちゃいましょう。

  1. 選択されたFinderの項目を取得して・・。
  2. シェルスクリプトを実行して・・・。

入力の引き渡し方法を、stdinへ -> 引数として に変更すると、勝手に処理が追加されます。
スクリーンショット 2022-11-29 19.38.17.png

あらまあ・・勝手にfor文まで出してくれるんですか。
少し直します。

for f in "$@"
do
    xattr -rc $f
done

ただし、これだけだと終わった後に、スん・・・・ となるので、終了通知を出さないと、親切じゃないですね。
apple scriptを書くと、良い感じに通知やダイアログがだせるようなので、やってみます。
以下の記事が大変参考になりました。

for f in "$@"
do
    xattr -rc $f
done

osascript -e 'display dialog "属性削除が終了しました。" with title "処理終了通知" with text buttons {"OK"} with icon 1'

完成です。
スクリーンショット 2022-11-29 20.04.58.png

例外処理いれてないけど・・割愛・・。本当は入れるべきですね。

使い方

属性を削除.workflowをダブルクリックするとインストールするか聞かれます。

そのままインストールすると、クイックアクションの項目に入ります。
スクリーンショット 2022-04-25 19.41.36.png

よく考えたら、属性を削除じゃなくて、拡張属性を削除だったけど・・・。

さて、右クリックにメニューが入りました。
問題となっているDLしたファイルを選択した状態で、属性を削除を選択します。

スクリーンショット 2022-11-29 19.42.35.png

無事、問題となっているアプリケーションはこの後実行できるようになります。
補足ですが、workflowはサイトにUPして、DLしても、com.apple.quarantineはつかないわけです。

最後に

いかがでしたか?
ちょっとしたGUI操作をさせたいときに、automatorで手軽にアクションが作れそうだ!という話をしました。
ワークフローしか作ってないですが、他にも色々有用なものが眠っている気がするので、そのうちやってみたいですね。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?