Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Discover Intel-Only Applications & Components for Developer Feedback

discover_macos_intel_components_feedback.sh helps Mac admins discover Intel-only binaries inside macOS applications and installer packages before rollout.

It is designed for compatibility discovery and vendor follow-up: you get a local terminal summary for quick triage and a support-friendly Markdown fix summary you can send to application developers and support teams.

Apple has already transitioned the Mac product line to Apple silicon, and current Intel app compatibility on Apple silicon Macs depends on Rosetta 2 translation. For long-term readiness, Intel-only binaries should be treated as technical debt and replaced with arm64 or Universal binaries before future macOS updates increase compatibility risk.

Apple references:

Intel app warnings and future macOS behavior (Apple published guidance):

MacAdmin Fleet Discovery Tools And Scope

Jamf Pro approach for fleet discovery:

  • Use Extension Attributes to collect app architecture signals (for example, Apple silicon, Universal, or Intel) from endpoints.
  • Build Smart Groups from those Extension Attribute results to find Macs with Intel-only apps or components.
  • Use policies and dashboards to prioritize remediation for business-critical apps first.
  • Jamf Pro product docs: https://learn.jamf.com/

Popular Extension Attribute script sources:

Note: these repositories are broad EA collections and are not all specifically focused on Intel architecture discovery.

Ready-to-use Jamf Pro Extension Attribute examples for Intel app discovery:

  1. Count Intel-only applications:
#!/bin/bash

# Data Type: Integer
# Inventory Display: Extension Attributes

intel_count="$(/usr/sbin/system_profiler SPApplicationsDataType 2>/dev/null | /usr/bin/awk '
  /Kind: Application \(Intel\)/ { c++ }
  END { print c+0 }
')"

echo "<result>${intel_count}</result>"
  1. Return a compact list of Intel-only app names (first 20):
#!/bin/bash

# Data Type: String
# Inventory Display: Extension Attributes

intel_apps="$( (/usr/sbin/system_profiler SPApplicationsDataType 2>/dev/null || true) | /usr/bin/awk '
  /^[[:space:]]+[^:][^:]*:$/ {
    app=$0
    sub(/^[[:space:]]+/, "", app)
    sub(/:$/, "", app)
  }
  /Kind: Application \(Intel\)/ {
    if (app != "") print app
  }
' | /usr/bin/head -20 | /usr/bin/paste -sd '; ' -)"

if [[ -z "${intel_apps}" ]]; then
  intel_apps="None"
fi

# Basic XML escaping for Jamf EA result output.
intel_apps="$(printf "%s" "${intel_apps}" | /usr/bin/sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g')"

echo "<result>${intel_apps}</result>"

You can scope Smart Groups like:

  • Extension Attribute Intel App Count is greater than 0
  • Extension Attribute Intel App List is not None

Other MDM solution example:

  • Kandji: use Custom Scripts and Smart Lists to collect Intel app counts/lists from endpoints and scope remediation workflows.
  • Kandji docs: https://support.kandji.io/

These MacAdmin tools are commonly used:

How this script is different:

  • This script is intentionally focused on one application or installer package at a time, not a full inventory of everything installed across your Mac fleet.
  • It performs deep component-level Mach-O inspection (.app, .pkg, .mpkg, .dmg, .zip) to identify Intel-only executables and libraries before rollout.
  • It generates a support-friendly fix summary designed for application developers and support teams.

What It Checks

The script scans macOS .app, .pkg, .mpkg, .dmg, and .zip inputs for Mach-O files, then classifies each detected binary as:

  • Apple Silicon only
  • Universal
  • Intel only
  • Unknown or unsupported

The primary concern is any Intel only result, because those components do not contain native arm64 or arm64e support.

Safety Boundary

The script performs static inspection only.

It does not:

  • Install packages
  • Copy apps to /Applications
  • Write package payloads to /Library
  • Run installer scripts
  • Launch the app being checked
  • Run vendor uninstallers

When a URL, DMG, ZIP, or package is expanded, the work happens in a temporary workspace that is removed automatically unless --keep-expanded-package is used.

Requirements

The script uses standard macOS command line tools:

  • file
  • lipo
  • codesign
  • find
  • awk
  • sed
  • curl
  • pkgutil
  • hdiutil
  • ditto

Package audits also require the Suspicious Package CLI:

  • spkg

Where to get Suspicious Package:

Install and expose the CLI:

  1. Install Suspicious Package to /Applications.
  2. Verify the embedded CLI exists:
ls -l "/Applications/Suspicious Package.app/Contents/MacOS/spkg"
  1. Optional: add it to your shell PATH:
export PATH="/Applications/Suspicious Package.app/Contents/MacOS:$PATH"
  1. Confirm the CLI is callable:
spkg --help

If spkg is not in PATH, set SPKG_BIN to the full executable path:

SPKG_BIN="/path/to/spkg" ./discover_macos_intel_components_feedback.sh --help

Example with the default app bundle location:

SPKG_BIN="/Applications/Suspicious Package.app/Contents/MacOS/spkg" ./discover_macos_intel_components_feedback.sh --help

Basic Usage

Interactive mode:

./discover_macos_intel_components_feedback.sh

Audit a vendor download URL:

./discover_macos_intel_components_feedback.sh \
  --name "Application Name" \
  --url "https://example.com/Application.pkg" \
  --non-interactive

Audit a local app:

./discover_macos_intel_components_feedback.sh \
  --path "/Applications/Application.app" \
  --name "Application Name" \
  --url "https://example.com/download"

Audit a local package and keep the expanded workspace for review:

./discover_macos_intel_components_feedback.sh \
  --path "/path/to/Application.pkg" \
  --name "Application Name" \
  --url "https://example.com/download" \
  --keep-expanded-package

Write output to a custom directory:

./discover_macos_intel_components_feedback.sh \
  --name "Application Name" \
  --url "https://example.com/Application.pkg" \
  --output-dir "/tmp/apple-silicon-audit" \
  --non-interactive

Generate a PDF copy of the fix summary:

./discover_macos_intel_components_feedback.sh \
  --name "Application Name" \
  --url "https://example.com/Application.pkg" \
  --non-interactive \
  --pdf

Manual Interactive Session Example

Run the script with no flags:

./discover_macos_intel_components_feedback.sh

Example prompt flow (URL workflow):

Apple Silicon Compatibility Check
1 - Download URL
2 - Local Install Path
Choice [1]: 1

Enter the vendor download URL for this app or installer.
This URL will be included in the compatibility report so the exact app or installer is clear.
Download URL: https://example.com/Application.pkg

Application name: Application Name

2026-08-05 12:06:49 : Downloading audit source to temporary workspace
2026-08-05 12:07:22 : Inspecting package components with spkg
2026-08-05 12:07:27 : Expanding package payloads for Mach-O inspection
Apple Silicon compatibility check complete.
Result: Needs attention. One or more inspected components are Intel-only.

Example prompt flow (local path workflow):

Apple Silicon Compatibility Check
1 - Download URL
2 - Local Install Path
Choice [1]: 2

Enter the local path to audit.
Local path: /Applications/Application.app

Enter the vendor download URL for this app or installer.
This URL will be included in the compatibility report so the exact app or installer is clear.
Download URL: https://example.com/download

Application name: Application Name

Output Files

Default output format:

  • Primary report format: Markdown (.md)
  • Primary report file: *_apple_silicon_fix_summary.md

Other output options:

  • Plain text summary: *_summary.txt
  • Structured tabular data: *_components.tsv and *_problem_components.tsv
  • Optional PDF report: *_apple_silicon_fix_summary.pdf when --pdf is used
  • Custom output location: use --output-dir "/path/to/output"

By default, reports are written to:

/tmp/apple-silicon-audit-reports

The most useful file for vendor or support feedback is:

*_apple_silicon_fix_summary.md

That Markdown file is intentionally written for developer or support teams. It includes:

  • A friendly introduction
  • Application name
  • Download URL
  • Application or package version
  • Bundle or package identifier
  • Intel-only component count
  • Unknown or unsupported component count
  • Affected app bundles with example binaries
  • Full table of components to fix
  • Requested remediation

It intentionally excludes internal testing details such as temporary paths, audit method, package expansion details, spkg output paths, and safety-boundary text.

The script also writes helper files for local review:

  • *_summary.txt
  • *_apple_silicon_fix_summary.pdf when --pdf is used
  • *_components.tsv
  • *_problem_components.tsv
  • *_seen_paths.txt
  • spkg_* files when package metadata is collected

Exit Codes

Exit code Meaning
0 Every inspected Mach-O component supports Apple Silicon.
1 One or more Intel-only components were found.
2 One or more components could not be classified, or no Mach-O components were found.
3 Invalid arguments or unsupported input.
4 spkg is missing or package expansion failed.
5 Unexpected audit or reporting error.

Session Example: DYMO Connect

Command:

./discover_macos_intel_components_feedback.sh \
  --name "DCDMac1.6.1.4-Arm64.pkg" \
  --url "https://dymoreleasecontent.blob.core.windows.net/dymo-release/DCDMAC/DCDMac1.6.1.4-Arm64.pkg" \
  --non-interactive

Terminal output:

2026-08-05 12:06:49 : Downloading audit source to temporary workspace
2026-08-05 12:07:22 : Inspecting package components with spkg
2026-08-05 12:07:22 : Generating spkg manifest
2026-08-05 12:07:27 : Expanding package payloads for Mach-O inspection
2026-08-05 12:07:31 : Scanning for Mach-O components under: /tmp/apple_silicon_audit_<run_id>/expanded_1_DCDMac1.6.1.4-Arm64.pkg
Apple Silicon compatibility check complete.
Result: Needs attention. One or more inspected components are Intel-only.

Application: DCDMac1.6.1.4-Arm64.pkg
Overall result: FAIL
Apple Silicon-only: 0
Universal: 11
Intel-only: 60
Unknown or unsupported: 0

Fix summary: /tmp/apple-silicon-audit-reports/DCDMac1.6.1.4-Arm64.pkg_<run_id>_apple_silicon_fix_summary.md

The script exited with code 1, which is expected when Intel-only components are found.

Developer Or Support Feedback Example

The generated fix summary for the DYMO session starts like this:

# Apple Silicon Compatibility Fix Summary

Hi,

I wanted to share a potential Apple Silicon compatibility concern we found in your application, so your team can review it before it affects future macOS releases.

## Summary

- Application name: DCDMac1.6.1.4-Arm64.pkg
- Download URL: https://dymoreleasecontent.blob.core.windows.net/dymo-release/DCDMAC/DCDMac1.6.1.4-Arm64.pkg
- Application or package version: 1.6.1.4
- Bundle or package identifier: com.dymo.DYMO-Connect-Support-Tool
- Intel-only components: 60
- Unknown or unsupported components: 0

One or more inspected Mach-O components are Intel-only and do not contain native Apple Silicon support.

## Affected Areas

The affected components include Intel-only executables and libraries in these app bundles:

- DYMO Connect Support Tool.app (14 affected components), including:
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect Support Tool.app/Contents/MacOS/DYMO Connect Support Tool`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect Support Tool.app/Contents/MonoBundle/libcoreclr.dylib`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect Support Tool.app/Contents/MonoBundle/libSystem.Native.dylib`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect Support Tool.app/Contents/MonoBundle/libSystem.IO.Compression.Native.dylib`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect Support Tool.app/Contents/MonoBundle/libSystem.Globalization.Native.dylib`
  - ... and 9 more

- DYMO Connect.app (18 affected components), including:
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect.app/Contents/MacOS/DYMO Connect`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect.app/Contents/Library/LaunchServices/com.dymo.dymo-connect.helper`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect.app/Contents/Library/SystemExtensions/com.dymo.dymo-connect.usb.dext/com.dymo.dymo-connect.usb`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect.app/Contents/MonoBundle/libe_sqlite3.dylib`
  - `dymo-connect.pkg/Payload/Applications/DYMO Connect.app/Contents/MonoBundle/libcoreclr.dylib`
  - ... and 13 more

- DYMO.WebApi.Mac.Host.app (28 affected components), including:
  - `webapi-host.pkg/Payload/Applications/DYMO.WebApi.Mac.Host.app/Contents/MacOS/DYMO.WebApi.Mac.Host`
  - `webapi-host.pkg/Payload/Applications/DYMO.WebApi.Mac.Host.app/Contents/Resources/Firefox/libfreebl3.dylib`
  - `webapi-host.pkg/Payload/Applications/DYMO.WebApi.Mac.Host.app/Contents/Resources/Firefox/libsoftokn3.dylib`
  - `webapi-host.pkg/Payload/Applications/DYMO.WebApi.Mac.Host.app/Contents/Resources/Firefox/libplds4.dylib`
  - `webapi-host.pkg/Payload/Applications/DYMO.WebApi.Mac.Host.app/Contents/Resources/Firefox/libnssdbm3.dylib`
  - ... and 23 more

The full generated file continues with a Components To Fix table containing each affected component, its architecture, relative path, Mach-O type, parent app bundle, signing identifier, and signing status.

It ends with:

## Requested Fix

Please rebuild or replace every affected executable component with an arm64 or Universal binary.

Notes For Sharing Results

For vendor or support communication, share the *_apple_silicon_fix_summary.md file.

Avoid sending local helper files unless they are specifically requested. The fix summary is the intended vendor-facing artifact.

About

A focused macOS compatibility script that discovers Intel-only binaries in apps and installer packages, then generates clear, support-ready reports for developer and support-team remediation before rollout.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages