Wrestling Adobe CC into Munki

Adobe Creative Cloud is one of those things that admins just can’t escape. Sooner or later some creative or smart person at any given organization is going to stop and think, “Wow, I could really go for some Photoshop right about now,” and then there’s budget THIS and committee THAT and one way or another, you, the admin, end up with 20 GB of Adobe products sitting in your lap and a request to give everyone exactly what they want.

Then of course you discover that Adobe isn’t very good at packaging, and that they expect you actually do all the work yourself. Of course they’ll provide you the basic tool – Creative Cloud Packager – to download and create these packages for you. But it’s still on you to get those all ready.

That’s kind of annoying.

I recently went through this process and boy do I have annoyance enough to share with the whole class. Since I suffered through this, I wish to hopefully make it easier for future generations to deploy Adobe CC using Munki without having to reinvent the wheel completely.

First and foremost, read this page I wrote on the Munki wiki. It describes the process of importing CCP packages into Munki, along with importing updates using Timothy Sutton’s aamporter.

Missing from this wiki page, however, are two things that may be of use to Munki admins: icons, and descriptions.

Icons

Getting icons for 25 different Adobe applications is a royal pain. Independently opening up each app bundle and searching through Contents/Resources/ for the right .icns file is not fun, because, well, there are a lot of them.

I got tired of doing that after the first one, so I tried to figure out a way I could speed up the process.

I simplified the extraction process using an ugly find:
find /Applications/Adobe\ Dreamweaver\ CC\ 2014.1/*.app/Contents/Resources -name "*.icns" -execdir sips -s format png '{}' --out ~/Desktop/$(basename '{}').png \;

That copies all of the .icns files out from inside the Dreamweaver app bundle onto my Desktop, converting them to png format using sips. I still needed to manually sort through all the icons to figure out which one corresponded to the .app bundle’s actual icon.

Being Adobe, they’re not all named consistently, so I can’t just look for the same filename in each application. Some of them are named the same (commonly “appIcon.icns”), so I also can’t extract each of the different applications’ icons into the same folder, because then I’d overwrite some of them.

I realized, ultimately, there was no pretty way to do this.

Instead, I dutifully recorded all the icon names for each Adobe CC application, and wrote a script that would use sips to copy them out into PNG format to a folder of my choice (such as the icons directory of my Munki repo).

That project can be found in my Github repo here.

The script follows as well, for convenience:


#!/bin/bash
[ -z "$1" ] && echo "This script requires a path to output the app icons in PNG format."
# Use /usr/bin/sips to copy the app icon out of the App bundle for each of the Adobe CC products
# and convert into png format
# Acrobat Pro 11
APP="/Applications/Adobe Acrobat XI Pro/Adobe Acrobat Pro.app"
APP_ICON="ACP_App.icns"
OUTPUT_PNG="AdobeAcrobatPro11.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# After Effects CC 2014
APP="/Applications/Adobe After Effects CC 2014/Adobe After Effects CC 2014.app"
APP_ICON="App.icns"
OUTPUT_PNG="AdobeAfterEffectsCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Audition CC
APP="/Applications/Adobe Audition CC 2014/Adobe Audition CC 2014.app"
APP_ICON="appIcon.icns"
OUTPUT_PNG="AdobeAuditionCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Bridge CC
APP="/Applications/Adobe Bridge CC/Adobe Bridge CC.app"
APP_ICON="bridge.icns"
OUTPUT_PNG="AdobeBridgeCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Dreamweaver CC
APP="/Applications/Adobe Dreamweaver CC 2014.1/Adobe Dreamweaver CC 2014.1.app"
APP_ICON="Dreamweaver.icns"
OUTPUT_PNG="AdobeDreamweaverCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Edge Animate
APP="/Applications/Adobe Edge Animate CC 2014.1/Adobe Edge Animate CC 2014.1.app"
APP_ICON="appIcon.icns"
OUTPUT_PNG="AdobeEdgeAnimateCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Edge Code
APP="/Applications/Adobe Edge Code CC.app"
APP_ICON="appshell.icns"
OUTPUT_PNG="AdobeEdgeCodeCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Edge Reflow
APP="/Applications/Adobe Edge Reflow CC.app"
APP_ICON="reflow_appicon_hidpi.icns"
OUTPUT_PNG="AdobeEdgeReflowCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Extendscript Toolkit CC
APP="/Applications/Adobe ExtendScript Toolkit CC/ExtendScript Toolkit.app"
APP_ICON="ExtendScriptToolkit.icns"
OUTPUT_PNG="AdobeExtendscriptToolkitCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Extension Manager CC
APP="/Applications/Adobe Extension Manager CC/Adobe Extension Manager CC.app"
APP_ICON="ExtensionManager.icns"
OUTPUT_PNG="AdobeExtensionManagerCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Fireworks CS6
APP="/Applications/Adobe Fireworks CS6/Adobe Fireworks CS6.app"
APP_ICON="fireworks.icns"
OUTPUT_PNG="AdobeFireworksCS6.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Flash Builder 4.7 Premium
APP="/Applications/Adobe Flash Builder 4.7/Adobe Flash Builder 4.7.app"
APP_ICON="fb_app.icns"
OUTPUT_PNG="AdobeFlashBuilderPremium.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Flash CC
APP="/Applications/Adobe Flash CC 2014/Adobe Flash CC 2014.app"
APP_ICON="appIcon.icns"
OUTPUT_PNG="AdobeFlashCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Illustrator CC
APP="/Applications/Adobe Illustrator CC 2014/Adobe Illustrator.app"
APP_ICON="ai_cc_appicon_hidpi.icns"
OUTPUT_PNG="AdobeIllustratorCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# InDesign CC
APP="/Applications/Adobe InDesign CC 2014/Adobe InDesign CC 2014.app"
APP_ICON="ID_App_Icon@2x.icns"
OUTPUT_PNG="AdobeInDesignCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Media Encoder CC
APP="/Applications/Adobe Media Encoder CC 2014/Adobe Media Encoder CC 2014.app"
APP_ICON="ame_appicon.icns"
OUTPUT_PNG="AdobeMediaEncoderCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Muse CC
APP="/Applications/Adobe Muse CC 2014/Adobe Muse CC 2014.app"
APP_ICON="mu_appIcon.icns"
OUTPUT_PNG="AdobeMediaEncoderCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Lightroom
APP="/Applications/Adobe Photoshop Lightroom 5.app"
APP_ICON="App.icns"
OUTPUT_PNG="AdobeLightroom.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Prelude CC
APP="/Applications/Adobe Prelude CC 2014/Adobe Prelude CC 2014.app"
APP_ICON="pl_app@2x.icns"
OUTPUT_PNG="AdobePreludeCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Premiere Pro CC
APP="/Applications/Adobe Premiere Pro CC 2014/Adobe Premiere Pro CC 2014.app"
APP_ICON="pr_app_icons.icns"
OUTPUT_PNG="AdobePremiereProCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# Scout CC
APP="/Applications/Adobe Scout CC.app"
APP_ICON="appIcon.icns"
OUTPUT_PNG="AdobeScoutCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi
# SpeedGrade CC
APP="/Applications/Adobe SpeedGrade CC 2014/Adobe SpeedGrade CC 2014.app"
APP_ICON="SpeedGrade.icns"
OUTPUT_PNG="AdobeSpeedGradeCC.png"
if [[ -d "$APP" ]]; then
/usr/bin/sips -s format png "$APP/Contents/Resources/$APP_ICON" –out "$1/$OUTPUT_PNG"
fi

The script will check for the existence of each of the Adobe CC products that can be packaged with Creative Cloud Packager (as of writing time), and then pull out the icon if it’s present.

That made it a bit easier for me to give all of my separate Adobe CC apps in Munki nice shiny icons.

The two exceptions are Adobe Exchange Panel CS6, and Gaming SDK. Neither of them install an app with an icon contained inside as their primary executable, so I had to manually download logos from Adobe’s website.

Descriptions

Sadly, descriptions are a bit more work to come by. The best I’ve found so far is from this page on Adobe’s website. I simply copied and pasted those blurbs into my pkginfos.

Update: Pepijn Bruienne brought to my attention that MacUpdate.com also makes a great source of descriptions, that are generally more verbose than the blurbs on the Adobe site I mentioned above.

Here’s an example from MacUpdate for Adobe Acrobat Pro:

Adobe Acrobat allows users to communicate and collaborate more effectively and securely. Unify a wide range of content in a single organized PDF Portfolio. Collaborate through electronic document reviews. Create and manage dynamic forms. And help protect sensitive information.

2 thoughts on “Wrestling Adobe CC into Munki

  1. Hey Nick, this is great! Since the script mentions for ex. “APP=”/Applications/Adobe Acrobat XI Pro/Adobe Acrobat Pro.app” does it means that all the applications must be installed on the system that the script runs?
    Best regards
    Kostas

    Like

    • Yes, this must be run on a machine (or VM) that has the applications installed. I made some effort to try and extract icons from the installer package, but Adobe’s installer payloads are byzantine nightmares of illogical crap, and I gave up. I haven’t found a better solution than installing all of Adobe CC into a VM and extracting them that way yet.

      Like

Leave a comment