GarageBand Audio

GarageBand splash screen
Deploying GarageBand audio content

On the 16th of May, Apple released an updated version of GarageBand, and shortly after, updated the “core content” that is downloaded the first time GarageBand is launched.

If you run a managed Mac environment, such as classrooms/labs, you usually want to avoid end users going through the process of downloading this content, typically you build packages using a tool like Iceberg, or by using tools like AutoPKG and then deploy them to the Mac/s. In this post, I’ll walk through how I’ve packaged the “core audio content” for deployment.

First, you’ll need to get the loops. There are many different ways to get this content, such as using Charles Proxy, or you can use a nifty command line tool such as the one I created, available here.

Previous versions of GarageBand 10 required content from the 2013 and 2015 “release” years. GarageBand 10.1.2 doesn’t; it only requires the content released in 2016. All testing has been done with Mac OS X 10.11.4, 10.11.5, and fresh installs of GarageBand 10.1.2.

To grab the 2016 content, I run :

./get_audio_content.py -y 2016 -p garageband -o ~/Desktop/loops/

This grabs the content for GarageBand, and saves it within the loops folder on my desktop. At time of writing, there are 91 packages to download, totalling approximately 9.2GB, so if you’ve got a slow Internet connection, you might want to do this overnight.

Once the content is downloaded, you can then use your favourite packaging tool to bundle the packages for deployment. This may be munki, Casper, or other similar deployment tool.

** Update June 2, 2016 **

It appears that in some circumstances, if you package the loops by wrapping them in any type of package, and use a postinstall script, some or all packages do not install properly. /var/log/install.log indicates this with the following error:

Jun  2 10:19:45 mithrandir installer[866]: PackageKit: Install Failed: (null) (null)

These packages install correctly when a simple for loop is called directly from the command line.

I’ve fallen back to the snapshot method, using logGen to take a pre install and post install snapshot of the OS, and then used pkgGen to gather all the files that it finds have been added or changed; then building a package that drops those files directly in place, with the correct permissions.

You can see in the screenshot below an example of building the package – this includes all the 2013-2016 content.

Iceberg Package for GarageBand 10.x
GarageBand 10.x content package build

Test the package on a virtual machine, or other test setup, to verify the install process works correctly. Any errors from the install run are found in /var/log/install.log.

When the package has passed deployment tests, move the package into your deployment workflows, and you’re ready to rock on; GarageBand won’t prompt to download the content, and the loops will be indexed the first time the app is launched, this index is created per user and will re-index anytime new loops are added to GarageBand.

GarageBand Loops UI
GarageBand 10.1.2 with 2016 audio content installed

** Update September 2, 2016**

Morgs from #anzmac in the macadmins Slack group has recently pointed me towards this excellent post by Alan Siu; it covers how to import these packages into munki without having to create a single installer as I’ve outlined here. I’m in the process of moving the deployment system in my workplace to munki, so I’ll be sure to use this process in my deployment, rather than building a single monolithic package.

Incidentally, if you haven’t already, I highly recommend joining the 6600+ strong macadmin community on Slack. You’ll find plenty of help from fellow Mac admin’s around the world, as well as make new friends!

I also recommend subscribing to the macadmins podcast.