GarageBand, Logic Pro X, MainStage 3, Oh my!

Apple have a great EDU deal going for their ‘Pro Apps’, consisting of Final Cut Pro X, Logic Pro X, Motion 5, Compressor 4, and MainStage 3, all up, this deal in dollarydoos is $299.99. That’s a nice saving of $727 (and any unused redemption codes can be converted to codes for managed devices for use in VPP).

But, that’s not the point of this post…

I recently re-wrote the get_audio_content.py script that downloaded the loop packages that GarageBand and Logic Pro X come with, the new tool is now called appleLoops and has moved. The new tool will now download loop packages for GarageBand, LogicPro X, and MainStage 3. More information can be found in the README.

Some observations about these loops based on my experiences:

  • GarageBand, Logic Pro X, and MainStage all have a plist file contained within the app that lists all the packages required for that particular release.
  • There is no specific order that the loop/content packages need to be installed in.
  • This same file is also hosted on Apple servers, and is fetched by each app.
  • After upgrading from one version to another, where loop packages have changed, the apps will only download those that are required for the newest version.
  • Loop packages don’t change with each release, so there are some app updates that won’t have new loop contents, in that instance, deploy the latest content that you have. For example, content in GarageBand versions 10.1.2 to 10.1.4 didn’t change until Apple released GarageBand 10.1.5.
  • There are a lot of loop packages that are common to all three apps; this content is Caching Server aware, and will be cached if you have a Caching Server on your network.
  • Additional content in GarageBand, Logic Pro X, and MainStage is now a free “in app purchase”; although this purchase is not handled via in app purchase mechanisms, it’s just a straight up download. You are prompted on first use to download the additional content after downloading and installing the essential content packages.
  • Loops are indexed as required. You can copy ~/Music/Audio\ Music\ Apps/Databases/LoopsDatabaseV09.db from an existing install to skip this step. Loops are re-indexed when they are updated. Thanks to neilmartin83 in the macadmins Slack for pointing this out.
  • You can disable the ‘Whats new in Logic Pro X’ on a fresh install by running
    touch ~/Library/Preferences/com.apple.logic10.plist
  • The GarageBand welcome screen can be disabled by running
    defaults write ~/Library/Containers/com.apple.garageband10/Data/Library/Preferences com.apple.garageband10 welcomeScreenShown -bool true
  • The GarageBand prompt to download additional optional content can disabled by running
    defaults write ~/Library/Containers/com.apple.garageband10/Data/Library/Preferences com.apple.garageband10 ShowMoreDownloadsDialogGB -bool false

Deploying these loops can be a pain in the neck, so to make it a bit easier, the appleLoops tool will download content and store it in a fairly straight forward set of folders; it will also attempt to reduce the amount of data downloaded by copying a file from another folder within the specified download directory if it already exists. The tool will also skip over already downloaded content and resume from the last partial file downloaded.

An example of the folder structure is as below.

[foo@valkyrie]:loops # ls -lha
drwxr-xr-x   4 foo  staff   136B 16 Feb 19:39 logicpro1030
[foo@valkyrie]:loops # ls -lha logicpro1030/
drwxr-xr-x  3 foo  staff   102B 16 Feb 19:39 2013
drwxr-xr-x  4 foo  staff   136B 16 Feb 19:35 2016
[foo@valkyrie]:loops # ls -lha logicpro1030/2016/
drwxr-xr-x   31 foo  staff   1.0K 16 Feb 19:29 mandatory
drwxr-xr-x  544 foo  staff    18K 16 Feb 21:37 optional
[foo@valkyrie]:loops # ls -lha logicpro1030/2016/optional/
-rw-r--r--    1 foo  staff    20M 16 Feb 20:03 MAContent10_AssetPack_0002_AlchemyOrgans.pkg
-rw-r--r--    1 foo  staff    99M 16 Feb 19:54 MAContent10_AssetPack_0003_AlchemyBrass.pkg
...
-rw-r--r--    1 foo  staff   912K 16 Feb 21:02 MAContent10_AssetPack_0625_AlchemySettingsTexturesNEffects.pkg
-rw-r--r--    1 foo  staff   908K 16 Feb 19:46 MAContent10_AssetPack_0626_AlchemySettingsVintageSynth.pkg

If you’re a munki user, the easiest way to import these into munki is with a for loop in a shell script that does this for you. A simple example to import loops for Logic Pro X is below. In this instance, you’d need to run it in all the folders that the loops are found in.

#!/bin/sh
# Bulk import loop/content packages into munki. Modify to suit your munki setup, etc.

pkg_category="Audio" # Category you want to have the loops available in.
pkg_developer="Apple" # Developer of the loops.
import_path="logic_pro" # Folder within the munki repo pkgs folder you want these to go in. I use seperate folders as this helps me keep the loops manageable, even if disk space is used up.
update_for="LogicProX" # The munki pkginfo name the loop package is for.
requires="LogicProX" # This ensures that the app is installed before the loop package is installed.

# Note, the --update_for="foo" flag must be used multiple times if you need to specify the package as an update for more than one application. In this instance, I suggest manually specifying the apps rather than using the variable update_for

for i in *.pkg; do
    /usr/local/munki/munkiimport ${i} --nointeractive --unattended_install --category="${pkg_category}" --displayname=$(basename -s .pkg ${i}) --developer="${pkg_developer}" --subdirectory="${import_path}" -c "testing" --update_for="${update_for}" --requires="${requires}"
done

Another thing I do as part of managing these loops in munki, is to make a manifest that contains all the loops for a given application, as a managed install, so that if I ever needed to use it, the manifest is available. So far I haven’t needed it, as setting the package as an update for a given application has worked for me.
Keeping these packages managed in a mixed version environment can get tricky when there are loop/content changes, so try and keep your clients on the same app version; if you do have to upgrade, try and upgrade all the clients simultaneously.

One of the great resources any Mac admin should have in their arsenal is the Mac Admin’s Slack – if you haven’t already, sign up (it’s free!) and check out #garageband or #logicpro – they’re quiet, but any questions can be asked in there. If you’re an Aussie or Kiwi Mac admin, join the #anzmac channel for shenanigans.