macOS pkg Installed by MDM Shows Success but App Is Missing
Diagnose a macOS pkg that MDM reports as installed while the app is missing, using install.log and pkgutil receipts, then redeploy safely.

This playbook covers
Table of Contents
Table of contents
#Current method
Many teams treat the MDM status as proof of an installed app. The console shows a green result, the ticket is closed, and the missing app is discovered later by the user. That approach confuses two different facts: the installer ran and finished without error, and the expected application bundle exists where the team expects it. The documented platform context is Apple Platform Deployment; confirm version-specific behaviour of your MDM and macOSThe KBY LexiconmacOSmacOS is Apple's Unix-based operating system for Mac hardware, forming the platform layer beneath endpoint management, security enforcement and application lifecycle tooling. release in the vendor documentation listed in the sources.
The operating context has three layers: the MDM delivers the package, the macOS installer service processes it, and the package payload writes files to a target volume and path. A fault in any layer can produce a success status with no app. Common causes (inferences, not guaranteed for every fleet) include a payload that installs somewhere other than /Applications, a component package that is relocatable and moves an existing bundle, a payload that is empty or contains only scripts, and a postinstall script that exits with zero after failing silently.
#Improved workflow
Replace status-based confirmation with evidence-based confirmation. The reasoning is simple: the receipt database and the installer log record what the installer actually did, so they are better evidence than a console label.
- Pick one affected Mac and record its macOS version, the package identifier and the MDM deployment name.
- Read the installer log for the install time window and look for the package name, payload errors and script output.
- Query the receipt for the package identifier and list the files it claims to have installed.
- Compare the listed paths with the filesystem to see whether the app exists, was moved or was never written.
- Inspect the package itself on an admin Mac to confirm what the payload and scripts contain.
- Fix the package or the deployment, then redeploy to a pilot group and verify before widening.
Rendering diagram...
#Implementation
Start with read-only diagnosis on a single device. Each step has a reason, expected evidence and a stop condition.
- Search the installer log for the package name. Reason: it shows whether the installer processed the payload and whether scripts failed. Expected evidence: lines for the package identifier with a completion entry. Stop if the package never appears; the problem is then delivery, not payload, and the MDM check-in path should be investigated instead.
- Run a receipt query for the package identifier. Reason: a receipt proves the installer database recorded the package. Expected evidence: version, install location and install time. Stop if there is no receipt; the installer did not complete for that package.
- List the files recorded under that receipt and test whether the app bundle path exists. Reason: this separates a never-written payload from a moved or removed one. Expected evidence: a path under an Applications directory that either exists or does not.
- Expand the package on an admin Mac into a temporary folder and inspect the payload and scripts. Reason: it reveals an empty payload, a wrong install location or a script that masks errors. Stop if the package is signed and must not be modified; rebuild from source rather than editing it.
- Rebuild the package with the correct payload root and install location, disable bundle relocation if a component plist is used, and make scripts return a non-zero status on failure.
- Redeploy to a small pilot group, then confirm using receipt and filesystem evidence, not the console label alone.
#Guardrails
- Use an isolated or non-production group first, and confirm the product version and your permissions before changing a deployment.
- Run diagnostic commands as read-only; do not delete receipts or app folders to force a reinstall.
- Do not forget least privilege: deployment edits need a scoped administrator role, and diagnostic access to logs may expose user data, so limit what is copied into tickets.
- Do not redeploy the same package unchanged; it will usually reproduce the same result.
- Stop the rollout if pilot devices show the app absent after the corrected package.
#Validation
Define success as observable on the device, not in the console. A pilot device passes when all of these hold:
- A new receipt exists for the corrected package version.
- The app bundle exists at the expected path and launches for a test user.
- The installer log shows no script errors for the install window.
- The MDM status and the filesystem agree on a second check-in.
#Common mistakes
- Trusting the MDM label as proof of presence.
- Checking only for a receipt; a receipt can remain after the app has been removed or moved.
- Leaving relocation enabled so the installer updates a bundle found elsewhere on disk.
- Ending a postinstall script with a hard-coded zero exit.
- Testing only on a Mac that already has the app, which hides payload problems.
#Recovery
If the corrected package misbehaves on the pilot, halt the assignment in the MDM and return affected devices to the previous known state. Keep the previous package version available in the MDM so it can be reassigned. Where the app was moved by relocation, restore it from your standard deployment source rather than by manual copying. Re-run the receipt and filesystem checks to confirm the recovered state, and escalate to the MDM vendor or Apple support if the installer itself reports errors that the package does not explain.

#Measurable outcome
Track the share of deployments where the console status and device evidence agree after the first check-in, and the count of tickets about apps reported installed but missing. Record a baseline before the change and review it at a regular cadence, such as monthly. No improvement figure is claimed here; use your own measured baseline.
Related reading: retiring manual app repackaging with AutoPkg patch pipelines and ending application-in-use update failures on managed Macs.
#Checklist
- Affected device version and package identifier recorded.
- Install log reviewed for the install window.
- Receipt queried and listed paths compared with the filesystem.
- Payload, install location, relocation and scripts inspected.
- Corrected package piloted with rollback assignment ready.
- Device-side evidence confirmed before wider rollout.
- Next safe decision: widen in stages only after the pilot passes; otherwise stop and escalate.
#Prerequisites and permissions
#Access needed before diagnosis
Agree the access model before anyone touches a device. Read-only diagnosis needs an administrator account on the affected Mac, or a remote session approved by the device owner. Reading the system installer log normally requires no change to the machine, but it may include usernames, hostnames and script output. Record who approved the access and where extracted log lines will be stored.
On the admin Mac used for package inspection, confirm that the Xcode command line tools or an equivalent standard toolset are present, and that you have a scratch folder with enough free space for an expanded package. Confirm that you hold a scoped MDM role that can edit and assign packages but cannot alter unrelated policies. If the role also allows wiping devices, request a narrower one for this work.
#Information to gather first
- The exact package filename, its checksum and the identifier the build system assigned.
- The assignment scope, including any smart group or filter, and the time of the last check-in for the test Mac.
- Whether the Mac has a second volume, a user-relocated Applications folder or a security tool that quarantines new bundles.
#Implementation detail for evidence gathering
#Commands for the single-device check
These commands are read-only. Replace the placeholder identifier with the one recorded in your ticket.
1grep -i "com.example.app" /var/log/install.log | tail -n 50
2pkgutil --pkg-info com.example.app
3pkgutil --files com.example.app | head -n 40
4pkgutil --pkgs | grep -i example
5ls -ld "/Applications/Example.app"
6mdfind "kMDItemKind == 'Application'" | grep -i exampleNote that pkgutil --pkg-info reports the volume and install location recorded, and --files prints paths relative to that location. Join the two before testing existence, otherwise you will test the wrong path and wrongly conclude the payload is empty.

#Inspecting the package on the admin Mac
1pkgutil --check-signature Example.pkg
2pkgutil --expand Example.pkg /tmp/example-expanded
3ls -R /tmp/example-expanded | head -n 60
4pkgutil --payload-files Example.pkg | head -n 40
5cat /tmp/example-expanded/Scripts/postinstallFor a flat package with several components, run the payload listing against each component package inside the expanded folder. Remove the temporary folder when finished, since it may hold licensed software.
#Expected evidence by outcome
- Never written: the receipt exists, but the payload listing is empty or shows only scripts.
- Written elsewhere: the receipt lists the bundle under an unexpected location, and a search finds the app there.
- Moved by relocation: the receipt exists and the app is found at an older path outside the intended folder.
- Removed later: the receipt and log are consistent, but the bundle is absent; check for cleanup tools or user removal.
#Monitoring after the fix
Add a device-side check that reports the presence of the bundle and its version, rather than relying on the deployment label. Many MDM products can run a script or custom attribute for this; confirm what yours supports. A minimal test is shown below.
1#!/bin/sh
2app="/Applications/Example.app"
3if [ -d "$app" ]; then
4 defaults read "$app/Contents/Info" CFBundleShortVersionString
5else
6 echo "absent"
7fiReview the results at the first and second check-in after deployment. Flag any device that returns the absent value while the console shows success. Keep the report scoped to the pilot group until its output is trusted.
#Realistic failure symptoms
- The console shows success, the Dock shows no icon and the log has a script failure message for the install window. This points to a postinstall problem that did not change the exit status.
- The receipt lists a different version than the one expected, and an older bundle remains in an unusual folder. This suggests relocation updated the wrong copy.
- No package entries appear in the log at all. Treat this as a delivery fault and look at check-in timing, assignment scope and device enrolment state.
- The app appears briefly and then vanishes. Look for a security or clean-up tool acting on the new bundle, and ask its owner for event records.
- The package installs on a clean test Mac but not on the affected one, which indicates a dependency on existing state such as a prior bundle or a missing folder.
#Change-control records
Open a change record before rebuilding the package. Include these items so a reviewer can reconstruct the decision later:
- The ticket reference and the evidence that justified the change, such as the log excerpt and receipt output with personal data removed.
- The old and new package versions, checksums and signing identity.
- The component settings changed, for example relocation and install location, and the script changes made.
- The pilot group name, its size, the planned observation period and the named approver for widening.
- The rollback package version and the person who can reassign it.
Store the expanded-package listing for both versions alongside the record, so that reviewers can compare payloads without redeploying anything.
#Escalation thresholds
Set thresholds before the pilot begins so the decision does not depend on judgement under pressure.
- Stop and hold: any pilot device shows the app absent after the corrected package, or any script error appears in the install window.
- Escalate to the packaging owner: the payload listing differs from what the build was meant to produce.
- Escalate to the MDM vendor: the package reaches the Mac and the log shows a clean install of a correct payload, yet the console status and the device disagree on repeated check-ins.
- Escalate to Apple support: the installer reports a failure that neither the package nor the MDM explains, supplied with the log window and package details.
- Escalate internally to security: a bundle is removed shortly after install by a tool you do not own.
#Safe rollback actions
- Pause the assignment of the corrected package; do not delete it, as it is needed as evidence.
- Reassign the previous known-good package to the pilot group only, and wait for a check-in.
- Run the device-side presence check and the receipt query to confirm the restored state.
- If a relocated bundle was altered, reinstall from the standard deployment source instead of copying files by hand.
- Record the outcome in the change record, including the time of rollback and the devices confirmed healthy.
Avoid forgetting receipts or removing application folders as a shortcut. Those actions destroy the evidence you need and can leave the installer database inconsistent with the filesystem.
About this page
Credited to
Dates
Published
Sources
Corrections
No corrections are listed for this page. Some review sweeps corrected pages without naming each one; those are in the corrections log.
Related articles
Application Lifecycle
Retiring Manual App Repackaging With AutoPkg Patch Pipelines
Stop stale-installer support tickets by automating macOS third-party app packaging and patch compliance with AutoPkg, JamfUploader and Jamf Pro.
Systems Engineering
Linux Disk Full but df Shows Free Space: Inode Exhaustion Fix
How to tell inode exhaustion from deleted-but-open files when Linux reports 'No space left on device' although df shows free space, and how to recover safely.
Software Architecture
API Returns 429 Too Many Requests: Fixing Retry Storms with Backoff
How to diagnose persistent HTTP 429 responses and replace synchronised retries with Retry-After handling, jittered backoff and client-side throttling.
Discover more
Ops Playbook
Lexicon Definitions
Learn More About KBY
About KBY
Learn about our mission, how our content is produced, and how we handle corrections.
Why Trust KBY
How KBY content is produced with AI, what is checked automatically, and how errors are corrected.
The KBY Brief
A short email about twice a week with new runbooks, configuration traps and fixes from KBY Technologies.
Was this useful?
Reports go to the site owner and are used to correct pages. Corrections are listed at /corrections.
Operate smarter, with fewer recurring tickets.
Receive new operational playbooks, incident-prevention guidance, automation scripts and recovery runbooks.
Comments
Add a thoughtful note on macOS pkg Installed by MDM Shows Success but App Is Missing. Comments are checked for spam and held for moderation before appearing.