もうすぐCatalina、32bitアプリとの"いい別れ"のために

macOS次期バージョン「Catalina」の開発が着々と進んでいる。6月下旬にパブリックベータ版を公開、無事版を重ね7月末には早くもベータ第5版に到達した。開発者ではなくても、「Apple Beta Software Program」に登録すれば試用できるため、興味がある向きはバックアップなど安全を確保のうえで取り組んでみてはいかがだろうか。

iTunesが3つのアプリに分割されるなど、ライトユーザにとっても大きな変更と映るはずのCatalinaだが、久々に基盤部分の大変更があることにも注目したい。それは「32bitアプリ(バイナリ)の廃止」だ。第213回(リンク」でも取り上げたテーマだが、使い慣れたアプリがある日を境に動かなくなるのは由々しきこと、クドいくらいの告知が必要と考える。もう暦は8月、いよいよ"その日"が近いことから、もう一度じっくり考えてみよう。

GUI 32bitアプリの調べかた

macOSでは、アプリケーションフォルダ(/Applications)など特定の領域を対象にインストールされたアプリの情報を収集しており、「システム情報(System Information.app)」の「アプリケーション」項目で調べることができる。そこにある「64ビット(Intel)」という列を見て、目的のアプリに「いいえ」と表示されてないか調べればいい。

Mojaveの現在、サードパーティー製を含め大半のアプリは64bit対応済のため「はい」と表示されているはずだが、長らくアップデートされていないもの/今後も更新されないものは「いいえ」、すなわち32bitのままだ。Catalinaの公開まで残すところ数十日、「いいえ」のアプリは(更新されないかぎり)システムアップデート後に動作しなくなるということになる。

32bitバイナリ(コマンド)の調べかた

GUIを持つアプリは「システム情報」があるからいいが、/usr/binや/usr/local/binに多数ある「コマンド」はそうもいかない。「システム情報」はUNIXコマンドを情報収集対象としていないため、調べようがないからだ。しかし、手はある。

UNIXコマンドは、「file」コマンドでバイナリの構成を調べられる。macOSが採用するバイナリフォーマット「Mach-O」は、一見して1つのファイルに複数のバイナリを収録できる構造(ユニバーサルバイナリ)を持つからだ。PowerPCからIntelへアーキテクチャが変更されたときは、PowerPCとIntel i386両方のバイナリ)を持つコマンドが存在したし、Mojaveの現在もIntel 64bitバイナリ(x86_64)と32bitバイナリ(i386)の両方を持つコマンドは少なくない。

問題は、対象となるコマンドの数が多いことだが、findコマンドを使えばわけのないこと。たとえば、以下のとおりコマンドラインを実行すれば、/usr/binディレクトリにある32bitバイナリ(Mach-O executable i386と出力される)を含むファイルを一覧できる。調べていくと、qtdefaults(QuickTimeの初期設定を行うコマンド)など、32bitバイナリしか含まないコマンドも少なくないことがわかるはずだ。

$ find /usr/bin -type f -exec file {} \; | grep i386

かなりの時間がかかるのでお勧めしないが、多数のフレームワークが置かれているシステムライブラリ(/Systems/Library)を対象に前掲のコマンドラインを実行すると、バイナリファイルの大半がx86_64とi386のユニバーサルバイナリであることがわかる。Catalinaからはi386の部分が不要になるわけで、そうなれば/System/Library以下が必要とするストレージスペースは一気に減るはず。システムのダイエットという意味でも、32bitサポートの終了は意味のあることだといえる。

警告がジャマな場合

High Sierra 10.13.4以降のシステムでは、32bitアプリを起動すると「最適化されていないためアップデートが必要」という旨のダイアログが表示される。1回表示されると以降30日は表示されないという緩いもので、煩わしいというレベルではないが(逆に言えば切迫感もない)、以下のコマンドラインを実行すれば完全停止できる。Catalinaがリリースされてもすぐにアップデートしないという場合には、有用かもしれない。

$ sudo defaults write -g CSUIDisable32BitWarning -bool true ※:取り消しは「sudo defaults delete -g CSUIDisable32BitWarning」