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

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

こんなダイアログですね。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/992aaa39-a492-6cfc-4a12-d5865c0a986d.png" width=240/>

いちいち、うるさいな〜〜いいから実行させてよ〜〜と、思いながら、`このまま開く`　ボタンを押しますよね。
![スクリーンショット 2022-04-25 11.33.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/c69dc7ed-2460-beed-2643-bcc0e953fb22.png)

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

`ゴミ箱に入れろ！！`というダイアログです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/06a3a03b-690a-4b07-9b89-e4b10923fb9e.png" width=240/>

<font color='red'>君は何を言ってるのかね・・・？</font>

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

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

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

https://swift-ios.keicode.com/mac/command-xattr.php

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

- [macos – com.apple.quarantineはどうすればいいですか？](https://code-404.net/macos-com-apple-quarantine%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/)

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

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

# コマンドで属性を削除すれば、実行できるようにはなる
以下のようにすれば、属性は削除できます。
```
xattr -cr xxxx.app
```
問題は、コマンドを打たせるという行為を、デザイナさんや運営さんなど、`非エンジニアにさせるべきではない`ということです。

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

# automatorでworkflowを作って回避
結構簡単に作れます。
右クリックにメニューを仕込む、みたいな操作を作れます。

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

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

## automatorはGUI的に作成することができる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/81692aca-70b8-76ae-4cb2-f6f2985ac05b.png" width=480/>

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

D&D的な感じで、ぽこぽこ右側の欄に持っていくと、操作を追加できます。
![スクリーンショット 2022-11-29 19.36.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/41dcb1d7-2ded-b56e-9132-f911f514292a.png)

あらまあ、便利。

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

![スクリーンショット 2022-11-29 19.38.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/1bcc192d-618d-c600-b570-53240ab8201c.png)
項目を入れちゃいましょう。

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

入力の引き渡し方法を、`stdinへ -> 引数として`　に変更すると、勝手に処理が追加されます。
![スクリーンショット 2022-11-29 19.38.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/c2cb113d-8ccb-5b2d-c616-d3fa58dbccba.png)

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

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

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

https://qiita.com/soh19/items/200f5881ed1fc87665dd

```
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/f7f3604f-7b8a-7139-4544-7d892ae7bced.png)


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

# 使い方
`属性を削除.workflow`をダブルクリックするとインストールするか聞かれます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/fd6f2f2f-a397-16db-8640-a958d28539ce.png" width=360/>

そのままインストールすると、クイックアクションの項目に入ります。
![スクリーンショット 2022-04-25 19.41.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/7d5f4c7e-6747-0b41-3c39-3f2220adeeed.png)

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

さて、右クリックにメニューが入りました。
`問題となっているDLしたファイルを選択した状態で、属性を削除を選択します。`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/c4e9df01-63ae-517d-a3fc-760bb977ab45.png" width=240/>

![スクリーンショット 2022-11-29 19.42.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2988173/41a0592b-7cce-4804-b2d8-029d495a34cd.png)

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

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