Edited at

野良ビルドした Emacs で tccd が暴走するのを防ぐ(Mojave)


はじめに

Mojave で野良ビルドした Emacs から外部プロセスを呼ぶと tccd が暴走してプチフリすることがあります.M-! open .browse-url を経由するウェブサイトの訪問などで,数秒固まることがあります.


対処

野良ビルドした Emacs.appcodesign で署名すればOKです.


Keychain.app で自己証明を作る

Keychain.app を起動して,証明書を作ります.

Screen Shot 2019-02-07 at 22.37.53.png

名前は何でも良いと思いますが,今回は myApp にします.

Screen Shot 2019-02-07 at 22.38.59.png

使用した名前は後で使います.


Emacs.app を署名する

野良ビルドした Emacs.app/Applications 以下に移動し,ターミナルで cd /Applications します.

自己証明書を使って,Emacs.app を署名します.

codesign --force --deep --sign "myApp" Emacs.app

パスワードを入力してしばらく待ちます.

Screen Shot 2019-02-07 at 22.42.29.png

署名が完了したら,確認します.

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