[system_profiler]macOS Catalinaで動作影響が想定される32bitアプリをワンライナーで洗い出す

macOS Catalinaへのアップデートにてアプリの64bit対応が必須となります。全てのアプリが対象ではありませんが、手元の環境でアプリが64bit対応済みかどうか、ターミナルから手軽に確認できるコマンドを組み立ててみました。
2019.10.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

macOS Catalinaにて、32bitアプリが動作しなくなることについてAppleのサポートページに詳細が告知されています。

32 ビット App と macOS High Sierra 10.13.4 以降の互換性 - Apple サポート

Apple は、macOS Mojave が 32 ビット版の App に対応する最後のバージョンの macOS となることをデベロッパに告知しました。

普段気にすることがない箇所ですが、業務フローでコアとなるアプリが32bitだった場合は開発元のアップデートを待つか、フローをカバーできるアプリに変える必要があります。

全てのアプリをカバーしているわけではありませんが、64bitに対応しているかどうかは以下記事の手順で調べることが可能です。

How to check to see if your Mac applications are 32-bit or 64-bit | iMore

ただ、マウスクリックと目視を繰り返すためにやや面倒です。そこでsystem_profilerにて絞り込みを試してみました。

system_profilerからDataType指定でひっぱる

system_profilerにて指定できる項目は以下の通りです。

% system_profiler -listDataTypes
Available Datatypes:
SPParallelATADataType
SPUniversalAccessDataType
SPSecureElementDataType
SPApplicationsDataType
SPAudioDataType
SPBluetoothDataType
SPCameraDataType
SPCardReaderDataType
SPComponentDataType
SPiBridgeDataType
SPDeveloperToolsDataType
SPDiagnosticsDataType
SPDisabledSoftwareDataType
SPDiscBurningDataType
SPEthernetDataType
SPExtensionsDataType
SPFibreChannelDataType
SPFireWireDataType
SPFirewallDataType
SPFontsDataType
SPFrameworksDataType
SPDisplaysDataType
SPHardwareDataType
SPHardwareRAIDDataType
SPInstallHistoryDataType
SPLegacySoftwareDataType
SPNetworkLocationDataType
SPLogsDataType
SPManagedClientDataType
SPMemoryDataType
SPNVMeDataType
SPNetworkDataType
SPPCIDataType
SPParallelSCSIDataType
SPPowerDataType
SPPrefPaneDataType
SPPrintersSoftwareDataType
SPPrintersDataType
SPConfigurationProfileDataType
SPRawCameraDataType
SPSASDataType
SPSerialATADataType
SPSPIDataType
SPSmartCardsDataType
SPSoftwareDataType
SPStartupItemDataType
SPStorageDataType
SPSyncServicesDataType
SPThunderboltDataType
SPUSBDataType
SPNetworkVolumeDataType
SPWWANDataType
SPAirPortDataType

今回用いるのはSPApplicationsDataTypeです。

64bit未対応に絞って引っ張り出す

awkが複数回入り乱れた内容となってますが、やっていることは至極単純です。

% system_profiler SPApplicationsDataType | \
    tail -n +2 | \
    awk '!/ *(Get Info String|Location|Signed by|Kind|Last Modified).+/' | \
    gsplit -l 4 --filter="awk '{if(\$1 == \"64-Bit\") {print \$0 \"\n-----\"} else print \$0 end }'" | \
    awk 'BEGIN{RS="-----"}/64-Bit \(Intel\): No/{print $0}'
  
quicklookd32:

  Version: 5.0
  Obtained from: Apple
  64-Bit (Intel): No



InkServer:

  Version: 10.9
  Obtained from: Apple
  64-Bit (Intel): No

標準出力をアプリ毎で固まりにするためにgsplitで一定行毎に区切りますが、アプリ毎に出力される情報量が一定ではないため、先ずは共通になるように出力情報(Get Info String等)を削っています。

その後、awk用区切り文字を指定する目的で一定行でsplitしつつも64-bit(Intel)行の直後に-----を挿入。これは、標準の区切り文字では複数行で一塊の出力が操作し難く、64-bit(Intel)行自体を区切りに指定するわけにはいかない(区切り文字は消滅する)ためです。

あとはawkの区切り文字判定を挿入した文字列に変更し、64bit非対応のアプリに絞って出力という形です。

gsplitはcoreutilsを導入する必要があります。

% brew install coreutils

あとがき

GoogleTalkPluginが32bitの状態等、Catalinaを入れた場合に業務にて起こりうるトラブルは広い範囲で予想できそうです。

OSのアップデート通知から誤って実行してしまいそうな場合、対策手段の一つとして以下フォーラム記事のコマンドがあります。

How to turn off prompt to upgrade to Cata… - Apple Community

MacAdmin Slackの#catalinaチャンネルに議論された末に出たコマンドだそうです。

Ignore Catalina Upgrade Prompt in Software Update | Jamf Nation

% softwareupdate --ignore "macOS Catalina"'

解除する場合は以下のコマンドになります。

% softwareupdate --reset-ignored