2018-12-16T02:25:17+09:00
macOS Mojave 10.14 でサードパーティのスクリプティング機能追加を使う
macOS Mojave 10.14 の AppleScript ではサードパーティーのスクリプティング機能追加やフレームワークに大きな制限が導入された。
https://latenightsw.com/mojave-brings-in-big-security-changes/
従来、/ライブラリ もしくは ~/ライブラリ 以下にスクリプティング機能追加やフレームワークをインストールしたけど、無視される。
有効なのは、システム標準のスクリプティング機能追加とアプレットやドロップレットのバンドル内の Resources フォルダ以下とのこと。
アプレットやドロップレットのバンドル内はスクリプトエディタから参照されない。すなわち、開発時はどうするのさ?という話になって、実質的に意味なし。つまり、普通のスクリプトファイルやドロップレット/アプレットからサードパティーのスクリプティング機能追加やフレームワークは使えないということである。
この制約は、SIP (System Integrity Protection。通称 Rootless。) によってもたらされているとのこと。
AppleScriptObjC のおかげで随分とスクリプティング機能追加の必要性はずいぶん薄れたけど、自分は拙作の ModuleLoader.osax と HelpBook.osax の二つが使えないと生きていけない。仕様が無いから SIP の一部を無効化して、スクリプティンク機能追加を使えるようにする。その手順をまとめる。
本当なら、スクリプティング機能追加をバックグラウンドアプリケーションとして最実装するのがいいのかもしれないけど、利便性は確実に落ちる。悩ましいところです。
まずは、普通にスクリプティング機能追加をインストールします。例として ModuleLoader.osax の場合を考えましょう。インストーラを使って、
/Library/ScriptingAdditions/ModuleLoader.osax
にインストールされたとします。
そのために、一度 Mac をシャットダウンし、Command + R キーを押しながら起動して、リカバリーモードで立ち上げます。
メニューバーから「ユーティリティー/ターミナル」を選択してターミナルを起動します。
ターミナルで次のコマンドを実行して、SIP をの一部を無効化します。
csrutil enable --without fs --without debug
アップルメニューから再起動を選択して、SIP が無効化された状態で Mac を起動します。
これで作業終了です。
ちなみに、次の csrutil disable コマンドを実行すると SIP のすべてを OFF にできます。
csrutil disable
とりあえずこれでスクリプティング機能追加を使えるようになりますが、少々乱暴すぎるように思えるので、必要最低限の部分だけを OFF することを試みました。
csrutil enable コマンドには、unsuported ですがオプションを指定して一部の機能を場外にしてオンすることができます。
いくつものオプションがあるのですが、試行錯誤して、fs と debug の二つを OFF にすれば良いことがわかりました。
csrutil enable --without fs --without debug
どちらかではダメです。両方必要でした。
システム標準のスクリプティング機能追加は有効なのだから、同じ場所に入れてやれば、サードパーティーのスクリプティング機能追加も使えるのでは無いかと最初考えましたが、そうではありませんでした。
一度 SIP を無効化して、/System/Library/ScriptingAdditions にスクリプティング機能追加を入れて、再度 SIP を有効かしても、サードパーティー製スクリプティング機能追加は使えませんでした。
場所は */Library/ScriptingAdditions ならどこでも関係なく、上記の SIP の一部をオフにすることが必要でした。