Skip to content

Managed Labels

Gil Burns edited this page Jun 13, 2026 · 3 revisions

Managed Labels

Managed Labels allow you to supply your own Installomator-compatible label files, either to override existing Installomator labels or to add support for applications not in the public Installomator repository.


Directory Structure

/Library/Application Support/Patcher/Managed/
├── Labels/
│   ├── myapp.sh
│   ├── googlechrome.sh     ← overrides the Installomator googlechrome label
│   └── internalapp.sh
└── Version.txt
  • Labels/ — contains your .sh label files, one per application.
  • Version.txt — a version string you control. Changing this value signals Patcher that labels have been updated, triggering a re-scan and recheck of any previously broken labels.

How Label Resolution Works

When Patcher needs to process a label named googlechrome, it looks in this order:

  1. Managed LabelsManaged/Labels/googlechrome.sh — if this file exists, it is used.
  2. Installomator LabelsInstallomator/Labels/googlechrome.sh — used only if no managed file exists.
  3. Not found — the label is skipped.

This means a managed label always wins over the Installomator equivalent for the same name.

If InstallomatorLabelsDisable is true, step 2 is skipped entirely.


Writing a Managed Label

A managed label is a standard Installomator label fragment — a case block for a single application. Use any existing Installomator label as a template.

Minimal example (internalapp.sh):

internalapp)
    name="Internal App"
    type="pkg"
    downloadURL="https://deploy.example.com/InternalApp-latest.pkg"
    expectedTeamID="ABCDE12345"
    appNewVersion=$(curl -sfL "https://deploy.example.com/version.txt")
    appName="Internal App.app"
    ;;

The file name (without .sh) is the label name. It must match the case target inside the file.


Overriding an Installomator Label

To override an existing label, create a file in Managed/Labels/ with the exact same filename as the Installomator label. Patcher will use your version and ignore the Installomator one.

Common reasons to override:

  • Pin to a specific version instead of latest.
  • Change expectedTeamID for a re-signed enterprise build.
  • Override downloadURL to point to an internal mirror.
  • Adjust blockingProcesses for your environment.
  • Add targetDir for a non-standard install path.

Version File

The Version.txt file is a plain text file containing any string you choose. Its purpose is to let Patcher detect when managed labels have changed.

1.3

or a date:

2026-04-19

When to update Version.txt:

  • After adding, removing, or modifying any label file.
  • After fixing a broken label that previously failed to resolve.

When Patcher sees a new value in Version.txt, it:

  1. Re-evaluates any labels that were previously marked as broken.
  2. Triggers an immediate re-scan if ScanOnLabelUpdate is true.

If you never update Version.txt, broken managed labels will remain broken and will not be retried. Always bump the version after fixing a label.


Deploying Managed Labels via MDM

The recommended approach is to deploy managed labels as a package:

  1. Place your label files in a staging folder mirroring the target structure.
  2. Package them to install into /Library/Application Support/Patcher/Managed/.
  3. Include an updated Version.txt in the package.
  4. Deploy the package via your MDM. On install, the postinstall script (or launchd) will pick up the new version automatically.

Alternatively, use your MDM's file deployment capability to push individual .sh files and Version.txt directly.


Using Only Managed Labels (No Installomator)

Set InstallomatorLabelsDisable to true in your configuration profile:

<key>InstallomatorLabelsDisable</key>
<true/>

Patcher will then:

  • Not download or update Installomator labels.
  • Not read from the Installomator Labels folder.
  • Use only the files in Managed/Labels/.

This is appropriate for fully air-gapped environments or when you have a complete set of custom labels and do not want the public Installomator repository involved.

Warning: If InstallomatorLabelsDisable is true and no Managed Labels are present, Patcher has no labels to work with. The scheduler will log a warning and all patching phases will be no-ops.


Logging

Patcher logs label resolution at the start of each scan. Look for lines like:

📦 Labels version: 10.7+managed:1.3
🔀 googlechrome: using managed label (override)
➕ internalapp: using managed label (addition)
  • override — a managed label replaced an Installomator label of the same name.
  • addition — a managed label has no Installomator equivalent; it's purely custom.

See Logs and Troubleshooting for log file locations.

Clone this wiki locally