経緯
Eclipes Marsがリリースされたので、さっそく端末Aにダウンロードし、いろいろセッティングしてEclipse.appをtarballに固めた(注1)。
このtarballを端末Aから端末BにAirDropで送信したところ、端末Bでtarballから展開したEclipse.appが起動できなかった。起動した時のエラーダイアログは下図のとおり。
送信前・送信元のファイルのハッシュも一致しており、AirDropではなくscpを使って送信した場合は再現しなかった。
原因
AirDropの時だけなんでよーと呟いていたら、
@gishi_yama com.apple.quarantineの関係とかかな?
— madogiwa (@madogiwa) 2015, 6月 30
と助言をいただいた。
まずは com.apple.quarantine
を調査。
メモ:com.apple.quarantine 拡張属性(考える日常) や 未知のファイルを隔離するEAの仕組みと謎(ザリガニが見ていた...。) によれば、 xattr
コマンドでEA:Extended Attributesの状況が確認できる。
そこで、端末BがAirDrop, scpで受信したtarballと、それぞれを展開した.appの com.apple.quarantine
を確認してみた。
(1) scpで受信したtarball
(2) (1) を展開した.app
(3) AirDropで受信したtarball
(4) (3) を展開した.app
どうやら、AirDropを経由したファイルには com.apple.quarantine
が設定され、それが少なくともtarballの場合、展開したファイルにも設定されるようだ。
これは、AirDropで第三者から受け取ったファイルを「セキュリティとプライバシー」の機能と連係させる(不用意に怪しい.appを開かせない)ためだと推測できる。結果、壊れていると表示されるのはちょっとアレな気もするけど。
解決方法
けれども今回は、素性が明らかな端末からのファイル受信なので、これを開かせるようにしたい。先述のサイトによれば、xattr -d
コマンドでEAを解除できるようなので、com.apple.quarantine
を解除してみた。
xattr -d com.apple.quarantine Eclipse_mars.app
解除の後、.appは正常に起動できた。
- 注1:
- 端末は両方ともOSX Yosemite 10.10.3。Eclipse.appはRenameしてEclipse_mars.appとした。そもそもEclipse Marsからトップディレクトリが.appになったことに驚いたりした。