M1 Mac にHomebrew で入れた emacs を起動すると開発元が未承認のため云々が消えない問題対応

皆さんは emacs ライフを楽しんでいますか?

背景

清水は下記のようなAlias を使ってVSCode で言うところの code コマンドをMac にて実行した場合と同じ感じの動きを再現しています。

alias E='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n --alternate-editor="open -a Emacs"'

分解していくと

Emacs.app/Contents/MacOS/bin/emacsclient

このコマンドは emacs が起動していて、かつemacs 側でサーバー機能が起動しているときに引数に渡されたファイル名をサーバー機能に渡します. サーバー機能は渡されたファイルを現在のemacs プロセス内でバッファーとして開きます。

--alternative このオプションは、emacsclient が失敗した場合に渡されれたコマンドを実行します

open -a Emacs open コマンドとはMac のコマンドで、ファイルを macOS に関連付けられているアプリケーションで開いたり、アプリケーション自体を開いたりするコマンドです -a オプションを渡すと/Applications/ 配下のアプリケーションを開きます. つまり Emacs.app を実行します

ところが

先日 brew reinstall —cask emacs したら 開発元が未承認のため云々のエラーが出るようになってしまいました。

MacOS のapp の構造について

よくわからないのでEmacs.app の中身を見てみましょう. macOS のアプリケーションはディレクトリになっており、 中身を覗くと結構色路な情報を見ることができます.

Finder で /Applications を開き右クリックから、「パッケージの内容を表示」をクリックします. show contents

中身はこんな感じになっています info

  • XXX.app
    • Contents 中には必ずこのディレクトリがある
      • Info.plist: このアプリケーションがどんな振る舞いを行うかが定義されたplistというテキストファイル(xml)
      • MacOS: Mac用のコンテンツはこの下に入る ちなみにiOS もサポートしているマルチプラットフォームアプリケーションなら iOS というフォルダーができる
      • PkgInfo: 謎
      • Resources: 実行ファイル以外のファイルが置かれる 例えばemacs で初めから利用可能なパッケージのスクリプトとかはここに入っている

警告が出るようになった理由

  • Emacs.app/Contents/MacOS/Emacs はマルチプラットフォームバイナリー
  • Emacs.app/Contents/MacOS/Emacs-arm64-11 はM1用のバイナリー
  • Emacs.app/Contents/MacOS/Emacs-x86_64-10_14 はX86_64用のバイナリー

となっており、 open -a Emacs を行うと → Emacs → Emacs-arm64-11 が起動するようになっていたが、 Emacs-arm64-11 を一度も承認していないためエラーが発生する状態になってしまった。

Emacs-arm64-11 を右クリック→開く で承認することで無事に開くようになった

この記事をシェア

弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!