How to find all your 32-bit apps: a non-buyer’s guide

In just a couple of weeks, the first beta-release of macOS 10.15 should be on the Macs of developers, bringing with it one potentially serious problem: it won’t run any 32-bit code. The first public beta is likely in July, and by the end of September millions of us are likely to be running the release version.

This article looks at free tools for identifying 32-bit code on your Mac, so that you can prepare for macOS 10.15, whether that’s in two weeks or twenty. My tests were run on an iMac Pro under macOS 10.14.5 with thousands of 32-bit code items, here looking particularly at the main /Applications folder, and the hidden /usr folder.

1. System Information

There are several sections in System Information which can reveal which software is still 32-bit. None of them is currently comprehensive, and to put it bluntly, it’s a bit of a mess.

The tool which is supposed to provide this information is Legacy Software, but it works in a strange and ingenious way, relying on apps and other code being run, so they can be checked by a new service SPLegacySoftwareReporter. This works best when the app undergoes its first run check with ‘Gatekeeper’; apps which are updated in place without that first run may not register with it at all. The end result is that apps which you don’t use don’t get checked at all and form false negatives, and those which are updated to 64-bit versions often don’t trigger any reassessment, so form false positives.

Separate listings are available in other sections, such as Applications, but there’s no reliable way to get a full overview of what is and is not 32-bit. A final shortcoming of System Information is its limited reporting.

Summary: highly unreliable, with false positives and false negatives. Don’t bother.

2. Booting in 64-bit-only mode

All Macs running Mojave (and late High Sierra) can be started up in 64-bit-only mode. To do this, start up in Recovery mode, open Terminal there, and enter the command
nvram boot-args=”-no32exec”
then restart normally. macOS should disable all 32-bit software, emulating the change expected in 10.15. To return to normal running, enter Recovery again and use the command
nvram boot-args=””

This is an excellent and perhaps the only reliable way to test whether an app or any other code will run in 64-bit-only mode, but it isn’t a way of discovering what’s still 32-bit unless you have a lot of time on your hands to test everything out.

Summary: ideal for testing specific apps and software, but of no use in listing what is still 32-bit.

3. Spotlight Search

Thanks to Rich Trouton @rtrouton for posting this suggestion on Twitter:
Ahead of #WWDC, it’s a good idea to check where you have 32-bit code remaining. You can use Spotlight for this: mdfind “kMDItemExecutableArchitectures == ‘*i386*’ && kMDItemExecutableArchitectures != ‘*x86*'”

I therefore tried
mdfind "kMDItemExecutableArchitectures == '*i386*' && kMDItemExecutableArchitectures != '*x86*'" -onlyin /Applications > Documents/Found32bits.txt
and an equivalent command for /usr as examples.

Unlike some other methods, this returns a result almost instantly, and does find the great majority of 32-bit apps and command tools. However, it has two major limitations. The more obvious is that it only works in folders which aren’t excluded from Spotlight metadata indexing. What I found more concerning, though, is that it doesn’t actually search thoroughly, and misses some important cases.

Testing on /Applications here showed that it didn’t pick up the following as having potential problems:

  • FileMaker Pro 14 Advanced, in which two frameworks are still 32-bit;
  • Current Final Cut Pro, iMovie and Motion, in which there are several 32-bit components in the Flexo framework and Compressor plugin;
  • MacTerm, in which there’s a 32-bit framework;
  • Skype Meetings App, in which SkypeForBusiness plugin 16.2 is still 32-bit;
  • iPhoto, in which there are plugins, frameworks and XPC services which are still 32-bit.

Whilst it appears fairly reliable on main app bundles and command tools, it doesn’t seem to work so well on other code, such as frameworks and plugins. You should therefore expect it to return some false negatives.

Summary: very quick, requires Terminal, not comprehensive though.

4. 32-bitCheck and ArchiChect

I first released 32-bitCheck over a year ago, in mid-April 2018, in an effort to help myself and other users discover what needs attention. It iterates exhaustively through a chosen folder and checks every potential app bundle to see if it is 32-bit only, and every file’s ‘Magic’ number to see if it’s a 32-bit executable. It doesn’t use other metadata, and doesn’t abandon its search just because it has found an executable bundle.

32-bitCheck06

archichect01

ArchiChect is a more recent drag-and-drop implementation of the same fundamental checks on individual apps.

32-bitCheck is slow, very slow in comparison to Spotlight search. It can be performed on any folder you wish, and is just as thorough checking your ~/Documents folder as it is when going through /bin or any other folder. If you prefer, you can let it only check app bundles, or exclude Mach-O executables.

Because 32-bitCheck checks everything (when Check all bundles and Check Mach-O are enabled), and records them all into a saved text report, its number of hits is correspondingly high. For instance, when checking /Applications it found 3922 32-bit items out of 34504 scanned there, against Spotlight search which found only 404 32-bit items in all.

Summary: slow but complete; ArchiChect is the only tool for checking individual apps.

5. What’s the problem?

When I was developing and improving 32-bitCheck, I looked very hard for a robust and reliable way in macOS of telling whether any item, folder or file, was a 32-bit executable, and failed to find it. The underlying problem is the great diversity in objects and structures which can be executable. One call works for app bundles, but is of limited use on other types of executable; another call works well on Mach-O executables but not on any bundle. I was unsuccessful in finding a single item of metadata which covered all eventualities, and then there’s the problem of bundles which support multiple architectures too.

Neither is there any illuminating documentation that I could locate. Apple doesn’t appear to specify what Spotlight classes as a 32- or 64-bit executable which might be picked up on search, for instance.

This is complicated by the fact that, even though an executable bundle may contain 32-bit code, that isn’t necessarily going to be called, and thus cause a problem in macOS 10.15. In many cases, apps contain frameworks which are supplied in both 32- and 64-bit form, and you must presume that when running in 10.15 they won’t try accessing the 32-bit version.

In short, macOS 10.15 asks a simple question of all the code it will run. Knowing in advance what the answer will be is far from certain, but I’ll put my trust in 32-bitCheck and ArchiChect as being the closest and most complete guides. They’re both available from their product page.

Rider: I wrote 32-bitCheck and ArchiChect. They’re both absolutely free (I don’t even have a Patreon) and don’t contain ads or anything else which you might object to.