As Apple introduces its new Apple Silicon Macs, it’s important that Mac admins be able to identify if their environment’s software will be able to run natively on both Intel and Apple Silicon as Universal 2 apps or if they’ll need Apple’s Rosetta 2 translation service installed first on their Apple Silicon Macs to allow their apps to run.
To assist with this identification effort, Apple has provided two tools:
Both have been around for a while and initially helped identify the original Universal binaries, which were compiled to support both PowerPC and Intel processors. They’ve now been updated for this new processor transition and either will be able to identify if an app’s binary was compiled for the following:
- x86_64 (Intel)
- arm64 (Apple Silicon)
- Both x86_64 and arm64 (Universal 2)
For more details, please see below the jump.
To identify if an app is Intel-only or Universal using the lipo tool, please use the command shown below:
lipo -detailed_info /path/to/binary
For example, on macOS Catalina 10.15.7 Apple’s Safari browser is an Intel-only binary, since macOS Catalina won’t run on an Apple Silicon Mac. Running lipo on macOS Catalina 10.15.7’s Safari should produce output similar to what’s shown below:
username@computername ~ % lipo -detailed_info /Applications/Safari.app/Contents/MacOS/Safari input file /Applications/Safari.app/Contents/MacOS/Safari is not a fat file Non-fat file: /Applications/Safari.app/Contents/MacOS/Safari is architecture: x86_64 username@computername ~ %
Likewise, Jamf Pro 10.25.2’s jamf binary now supports both Intel and Apple Silicon. Running the lipo command described above should produce output similar to what’s shown below:
username@computername ~ % lipo -detailed_info /usr/local/jamf/bin/jamf Fat header in: /usr/local/jamf/bin/jamf fat_magic 0xcafebabe nfat_arch 2 architecture x86_64 cputype CPU_TYPE_X86_64 cpusubtype CPU_SUBTYPE_X86_64_ALL capabilities 0x0 offset 16384 size 6441136 align 2^14 (16384) architecture arm64 cputype CPU_TYPE_ARM64 cpusubtype CPU_SUBTYPE_ARM64_ALL capabilities 0x0 offset 6471680 size 6121168 align 2^14 (16384) username@computername ~ %
To identify if an app is Intel-only or Universal using the file tool, please use the command shown below:
file /path/to/binary
Running the file command described above on macOS Catalina 10.15.7’s Safari should produce output similar to what’s shown below:
username@computername ~ % file /Applications/Safari.app/Contents/MacOS/Safari /Applications/Safari.app/Contents/MacOS/Safari: Mach-O 64-bit executable x86_64 username@computername ~ %
Running the file command described above on the Jamf Pro 10.25.2 jamf binary should produce output similar to what’s shown below:
username@computername ~ % file /usr/local/jamf/bin/jamf /usr/local/jamf/bin/jamf: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64] /usr/local/jamf/bin/jamf (for architecture x86_64): Mach-O 64-bit executable x86_64 /usr/local/jamf/bin/jamf (for architecture arm64): Mach-O 64-bit executable arm64 username@computername ~ %
For more information about app testing, Howard Oakley has a blog post discussing the lipo tool in more detail which I recommend checking out. I’ve linked to it below:
Magic, lipo and testing for Universal binaries:
https://eclecticlight.co/2020/07/24/magic-lipo-and-testing-for-universal-binaries/