[system_profiler]macOS Catalinaで動作影響が想定される32bitアプリをワンライナーで洗い出す
はじめに
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