-
Notifications
You must be signed in to change notification settings - Fork 3
Logs and Troubleshooting
All log files are written to /Library/Logs/Patcher/.
| FileName | Written By | Contents |
|---|---|---|
Patcher_General_<YYYY-MM-DD>.log |
patcher |
Scan, check, stage, apply activity |
Patcher_Updates_<YYYY-MM-DD>.log |
patcher |
Installomator Label updates |
scheduler_stderr.log |
LaunchDaemon | Unexpected stderr / crash output from patcherscheduler
|
Enable verbose logging for more detail:
sudo defaults write /Library/Preferences/com.gilburns.patcher LogVerbose -bool trueOr via MDM:
<key>LogVerbose</key>
<true/>Verbose mode logs every label evaluation, version comparison, and file I/O operation. It generates significant output during a scan. Turn it off in production once your issue is resolved.
# Follow patcher activity in real time
tail -f /Library/Logs/Patcher/Patcher_General_<YYYY-MM-DD>.log
# Follow update of Installomator label files
tail -f /Library/Logs/Patcher/Patcher_Updates_<YYYY-MM-DD>.log
# View recent LaunchDaemon error output (Hopefully there are none)
cat /Library/Logs/Patcher/scheduler_stderr.logSymptom: patcherscheduler.log shows "no labels version" or all phases are skipped.
Causes and fixes:
- No network access to GitHub — check firewall rules for
api.github.comandraw.githubusercontent.com. -
InstallomatorLabelsDisable: trueand no Managed Labels present — add managed labels or disable the key. - The labels folder exists but is empty — delete
/Library/Application Support/Patcher/Installomator/and let the scheduler re-download.
Symptom: Discovered/ folder is empty or contains far fewer apps than expected.
Causes and fixes:
-
IgnoredLabelspattern is too broad — review the pattern (wildcards apply). - Apps are installed in home folders and
IgnoreAppsInHomeFolder: true— either move apps to/Applicationsor setConvertAppsInHomeFolder: true. - Apps installed in unusual paths — add a Managed Label with the correct
targetDir. - Run
patcher scanmanually withLogVerboseenabled to see why each label was skipped.
Symptom: patcherreport broken lists the label, or the label shows version "" in labelDetail.
Causes and fixes:
- The label uses
appCustomVersionbut the function fails silently — test the label in isolation. - The app is not installed in any standard path — check
targetDirin the label. - Set
IgnoreUnknownVersionLabels: trueto skip these labels entirely.
Symptom: patcher.log shows the same installer being downloaded and discarded repeatedly.
Cause: The label reports a newer appNewVersion that doesn't match the installed version after the update is applied (e.g. Spotify shows a promotional build version).
Fix: This is handled automatically by VersionMismatchThrottleDays. If you see it happening frequently, check whether the label's appNewVersion logic is accurate, or increase the throttle duration.
Symptom: Users are not prompted even though blocking processes are running.
Causes and fixes:
- swiftDialog not installed — run
sudo /usr/local/bin/tpp/patcher ensure. -
SwiftDialogEnabled: false— check your configuration profile. - The daemon runs as root but cannot reach the user's session — verify
SessionCreate: truein the LaunchDaemon plist. - The hard deadline has passed — no prompt is shown after
DeadlineDaysHard.
# Check status
sudo launchctl print system/com.gilburns.patcher.schedulerIf the daemon is not loaded:
sudo launchctl bootstrap system /Library/LaunchDaemons/com.gilburns.patcher.scheduler.plistIf it was loaded but crashed, check scheduler_stderr.log:
cat /Library/Logs/Patcher/scheduler_stderr.log# Force an immediate run of all due phases
sudo launchctl kickstart system/com.gilburns.patcher.scheduler
# Run a specific phase directly (bypasses interval checks)
sudo /usr/local/bin/tpp/patcher scan
sudo /usr/local/bin/tpp/patcher check
sudo /usr/local/bin/tpp/patcher stage
sudo /usr/local/bin/tpp/patcher apply/Library/Application Support/Patcher/
├── Cache/
├── Config/
│ └── config.json ← scheduler state (last run times, label version)
├── Discovered/
│ └── <label>.plist ← per-app metadata; delete to force re-scan of one app
├── Installomator/
│ ├── Labels/ ← downloaded label files; delete folder to force re-download
│ └── Version.txt
└── Managed/
├── Labels/
└── Version.txt
Deleting a specific Discovered/<label>.plist forces that label to be re-scanned on the next scan cycle. Deleting Config/config.json resets all phase timers, causing all phases to run on the next scheduler wake.