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


はじめに

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

対処

野良ビルドした Emacs.appcodesign で署名すれば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