Skip to content

Managed Deployment

Carl edited this page Apr 14, 2026 · 5 revisions

Managed Deployment via MDM or DDM

The Swift version of loopdown supports (in theory) an MDM profile targeting the com.github.carlashley.loopdown domain as a configuration of which content and apps to deploy content for. Please note that this is considered an experimental feature.

This managed deployment mode must be invoked using loopdown deploy --managed - see loopdown deploy -h for more information.

When this managed deployment mode is called and no configuration data exists, a number of sane defaults are used to deploy content, these are:

  • ignore all arguments other than -n/--dry-run, --cache-auto-retries, --cache-retry-delay, and --log-level
  • default to deploying content for all installed apps
  • default to deploying only the essential/core content for apps
  • default to using -c/--cache-server auto if no mirror server or caching server is provided
  • installs modern content packs to /Users/Shared/Logic Pro Library.bundle

Targeted Deployments

The managed deployment mode supports more nuanced deployment arguments, for example, if you want to deploy GarageBand and the modern Logic Pro, you can deploy just the core content for GarageBand and just the essential content packs for Logic Pro 12+. See the appPolicies section of the Payloads documentation below.

Payloads

Target the com.github.carlashley.loopdown preference domain for MDM deployed profiles; if using DDM or you do not have an MDM and can deploy a Property List file through alternative means, ensure /Library/Managed Preferences/com.github.carlashley.loopdown.plist exists with applicable keys and values.

apps:
  type: [String]
  default: []        # empty = all installed apps
  values: garageband, logicpro, mainstage

essential:
  type: Bool
  default: true      # inferred true when essential, core, and optional are all absent
  # Selects essential content packages (ecp* — Logic Pro 12+ / MainStage 4+ only).

core:
  type: Bool
  default: true      # inferred true when essential, core, and optional are all absent
  # Selects core content packages (ccp*; equivalent to required for legacy apps).

optional:
  type: Bool
  default: false

appPolicies:
  type: [{app: String, essential: Bool, core: Bool, optional: Bool}]
  default: []        # empty = use top-level flags for all apps
  # Per-app overrides. Apps not listed fall back to the top-level flags.
  # Example:
  #   - app: logicpro
  #     essential: true
  #     core: true
  #     optional: false
  #   - app: garageband
  #     essential: false
  #     core: true
  #     optional: true

forceDeploy:
  type: Bool
  default: false

skipSignatureCheck:
  type: Bool
  default: false

logLevel:
  type: String
  default: info
  values: debug, info, notice, warning, error, critical

cacheServer:
  type: String
  default: auto      # inferred when both cacheServer and mirrorServer are absent
  values: auto, http://host:port

mirrorServer:
  type: String
  default: ~         # absent; overrides cacheServer when present
  values: https://host

dryRun:
  type: Bool
  default: false     # also overridable by --dry-run CLI flag

quietRun:
  type: Bool
  default: false

libraryDest:
  type: String
  default: /Users/Shared/Logic Pro Library.bundle
  # Destination directory for modern Logic Pro 12+ and MainStage 4+ content.

Clone this wiki locally