Skip to content

@carlashley carlashley released this Aug 29, 2019


  • Issues 7 and 8.
  • Minor adjustments to debug logging.
Assets 3

@carlashley carlashley released this Aug 22, 2019 · 3 commits to master since this release


  • Issue #6


  • Tweaks to some message outputs.
Assets 3

@carlashley carlashley released this Aug 21, 2019 · 9 commits to master since this release


  • #5 (no, seriously, it does. You didn't see that error in v3.0.0, v3.0.1, v3.0.2, v3.0.3, and v3.0.4)
Assets 3

@carlashley carlashley released this Aug 21, 2019 · 10 commits to master since this release

Fixes for:

  • Issue #5
Assets 3

@carlashley carlashley released this Aug 20, 2019 · 11 commits to master since this release

Fixes for:

  • An issue where disk space checks would fail.


  • -f/--force-destination <destination> flag to re-download package files instead of skipping them if they're already in the destination folder.
Assets 3

@carlashley carlashley released this Aug 20, 2019 · 16 commits to master since this release

Fixes for:

Prep work for supporting installation of optional packages based on 'option pack' names.

Edit: 2019-08-20 16:39 AEST
Re-built v3.0.2 to include missing fixes/tweaks from earlier build.

Assets 3

@carlashley carlashley released this Aug 17, 2019 · 17 commits to master since this release

Fixes for:

  • Deleting a file after installing fails. See #2.
  • Permissions fix. See #1.
  • Basic disk space check when deploying.
  • Mounts a DMG as read only when deploying from DMG.
Assets 3

@carlashley carlashley released this Aug 16, 2019 · 19 commits to master since this release

A hole new whorl

This is a re-write to implement Python 3 support. For full info, please view the README file.

What's New in v3.0.0+

  • Supports Python 3 (tested on Python 3.7.3) and Python 2.7.10 (as ships with macOS).
  • Now ships as a prebuilt zipapp.
  • Pre built installer package is available. Installs to /usr/local/bin.
  • Now using /usr/bin/env python. Beware of Python versions when deploying!.
  • Supports deploying packages from a DMG file hosted over HTTP/HTTPS (use the --pkg-server flag and supply the full HTTP path to the DMG).
  • Building a DMG file now uses a temporary sparse image file to download packages directly into, the converts it to a DMG.
    • APFS file system supported with the --APFS flag. Defaults to HFS+ file system.
    • DMG's are now read only, and compressed.
    • DMG's will be written over if the same filename is specified.
    • Specifying a custom volume name is not allowed. Volume name defaults to appleloops to facilitate deploying via DMG.
  • Supports deploying packages for a specific application when using --deployment - use the -a/--apps <appname> argument.
  • Downloading now replicates the source folder structure, regardless.
  • Improved handling of scenarios where one package is considered mandatory for one application, but optional for another.
  • Implemented additional file path check based on the information in the property lists to determine if the package is installed.
  • Added flexibility to handle scenarios where Apple's "mirrored" source property list files are not kept updated inline with the file that ships with specific apps.
  • Pure silent mode. No output at all (well, there shouldn't be any).
  • Makefile to build a package file for distribution (a package will be pre-built).
  • Added new --compare argument to enable a basic comparison of one package 'release' to another 'release'.
  • No longer requesting Content-Size header when analysing installed pacakges. This saves a teeny-tiny bit of time, but worth it.
  • Logging will now default to ~/Library/Logs/appleloops.log unless sudo is invoked, in which case the log output is /var/log/appleloops.log.
    • Logs automatically rollover on each run.
  • Invoking DEBUG logging now requires using --log-level DEBUG.
  • Default paths for package downloads should default to /tmp/appleloops
  • Temporary working path for any downloaded property list files is /var/folders/<incomprehensible gibberish>/com.github.carlashley.appleloops.
    • This gets cleaned up once work is finished.
  • No longer relying on sourcing the property list files from Apple's audiocontentdownload server when deploying or if the app is installed on the same system.
    • Note, if you do need to target the packages for a specific release, use the --supported-plists argument to identify which property list files can be used when using the -p/--plist argument.

Whats Deprecated in v3.0.0+

A number of previous features are being deprecated from v3.0.0 onwards to avoid certain complexities.

  • Hard-linking to already downloaded files (due to now replicating the Apple source folder path when downloading).
  • "Flat" directory structures for downloaded content no longer supported.
  • Specifying a disk space threshold to reserve.
    • When deploying, the goal is to ensure all the packages of either mandatory/optional types get installed.
  • No longer a fully self contained script (script is now split out into a python package).
  • Specifying a log path is no longer supported.
  • Will install all mandatory packages in deployment mode or will not install them at all. Same for optional packages (but I'm exploring some options for the optional packages for possible future version).
  • --debug hard deprecated for --log <level>. For example: --log DEBUG.
  • Python 2.x support will be dropped in a future release in keeping with Apple's stance on Python shipping in future macOS releases. Will require Python 3.x to be installed (I don't currently have plans to write this in Swift).
  • Determining the --pkg-server path based on the munki configuration on a machine that is managed with munki is no longer supported.
  • Automatically determining a Caching Server source to use is no longer supported. Specifying the server will be required if the -c/--cache-server argument is used.
Assets 3
You can’t perform that action at this time.