はじめに
Mojave で野良ビルドした Emacs から外部プロセスを呼ぶと tccd
が暴走してプチフリすることがあります.M-! open .
や browse-url
を経由するウェブサイトの訪問などで,数秒固まることがあります.
Mojave + Emacs(NS) + "open ." が遅いは私だけなのかなー.キャプチャは2回 "open ." を発行していて,前者は iTerms2 から起動した場合.後者は,https://t.co/Ci5sUvb0RC を直接起動した場合.後者は,Finder 表示に数秒かかる.tccd関連. pic.twitter.com/EJaGuiZbqV
— Takaaki Ishikawa (@takaxp) 2018年10月26日
対処
野良ビルドした Emacs.app
を codesign
で署名すればOKです.
Keychain Access.app で自己証明を作る
Keychain Access.app を起動して,証明書を作ります.
名前は何でも良いと思いますが,今回は myApp
にします.
使用した名前は後で使います.
Emacs.app を署名する
野良ビルドした Emacs.app
を /Applications
以下に移動し,ターミナルで cd /Applications
します.
自己証明書を使って,Emacs.app
を署名します.
codesign --force --deep --sign "myApp" Emacs.app
パスワードを入力してしばらく待ちます.
署名が完了したら,確認します.
codesign -vd Emacs.app
何か応答があればOKです(適当...
以上です.これでEmacs.app
を起動して,M-! open .
などをしてもプチフリしなくなります.実際のところ致命的だったのは,Org Mode の外部リンクを開く時で,ものすごいストレスでした.このプチフリを解決できてとても幸せです.
おわりに
とてもニッチな問題ですが,tccd
の暴走による Emacs のプチフリをcodesign
で解決する方法を紹介しました.
おまけ
今回の対処方法にたどり着くまで,browse-url
は,applescript を経由することで回避していました.念のため記録しておきます.
(when (and (boundp 'ns-version-string)
(< 1600 (string-to-number
(let ((str ns-version-string))
(string-match "^appkit-\\([0-9\.]+\\) .+$" str)
(match-string 1 str)))))
(defun ad:browse-url (url &rest _args)
(do-applescript
(concat "tell application \"Chrome\" to open location \"" url "\"")))
(advice-add 'browse-url :override #'ad:browse-url))
References
- https://eclecticlight.co/2018/09/06/working-with-mojaves-privacy-protection/
- https://eclecticlight.co/2018/10/03/launching-apps-in-mojave-how-it-has-changed/
- https://github.com/carlashley/tccprofile
- https://github.com/Homebrew/homebrew-cask/issues/22388
- https://discourse.brew.sh/t/code-signing-installed-executables/2131
- https://qiita.com/zeriyoshi/items/78b4c7227217e2eac536