Your Max Standalone on Mac App Store
Many people enjoy sharing their Max creations with others in the form of a standalone application. To reach a broader audience, we would like to be able to submit standalone applications to Apple’s Mac App Store. Regular Cycling ’74 forum readers will likely recognize a long running thread called “Max apps in new Apple Mac App Store?” that was started in 2010 and still receives new postings. That thread documents our efforts, together with Cycling ‘74, to navigate Apple’s various guidelines and restrictions in order to get Max standalones into the Mac App Store.
Between that thread and a recent story that appeared on Create Digital Music, we’ve received lots of requests for more information on the process. This article will attempt to fill in the details so other Max creators can get in on the App Store action!
First off, you must use Max 6 to create a standalone that will satisfy Apple’s requirements, primarily because in Max 6, app-specific preference files are saved in a location permitted by Apple.
It’s also probably a good idea to make sure that your standalone has some of the basics down (custom icon, appropriate menus, etc...) before embarking on the steps below. Dan covered many of these topics in his 2011 Expo ‘74 presentation entitled “Making A Slick Max Standalone." The slides for the presentation are available here.
After you are in the program, you will be required to follow Apple’s guidelines before your application will be accepted for inclusion. Here are some of the rules that are most likely to affect Max-based applications:
- No use of Java (so no mxj use in your standalone)
- No demo or limited functionality versions of your app
- No file access (read or write) beyond “approved” locations, without specific end-user request for such (via file dialog box for example). These approved locations are:
- ~/Library/Application Support/
- ~/Library/
- ~/Library/Caches/
Setting Up the Preferences File
To ensure that your application stores its preferences in one of these approved locations, do the following:
- Include a standalone object in your patch.
- Open the inspector for the standalone object, and change the “Preferences File Name” attribute to the same name as your application. For example, if your application will be called My Cool App, the Preferences File Name must also be My Cool App. This will create a folder the first time your app is launched at ~/Library/Application Support/My Cool App, and all Max’s will subsequently be stored within that folder. You can also use this folder if your app needs to store any other files (such as a custom preferences file).
Stripping Out PowerPC Code
If you are using any third party Max externals, they may contain PowerPC (PPC) code. which is not allowed in the App Store.
If you want to verify whether you have any third-party externals containing PowerPC code, you can use the following command in the Terminal that will list any problematic objects. Before executing the command, set the current directory to a folder containing your third-party externals.
find . -type f -exec lipo -info '{}' 2>/dev/null \; | grep ppc | grep MacOS | sed -e 's/.*MacOS\///g' -e 's/ are.*//g'
To get rid of the PowerPC code, you can use an application called TrimTheFat; just drop the .mxo external in question onto the TrimTheFat icon, and it will strip away the PowerPC part of the binaries. You’ll need to do this before building your application, because a Max standalone stores external object executable code in a proprietary format that can’t easily be modified. However, you need only remove PowerPC code once.
By the way, if you are using other people’s work, check to make sure the license terms are compatible with the App Store’s, and that you are allowed to use it in a closed source product (if that is your intention).
Modifying Your Standalone
The next few changes involve tweaks within your application’s bundle folder. You’ll need to make these changes after building your standalone.
To access the bundle, ctrl- or right-click on your application’s icon in the Finder, and choose Show Package Contents. This will open a new window that shows you the set of files inside the application bundle, which is actually a folder. All the items in an application bundle are inside a folder called Contents.
Apple apparently doesn’t like underscore (_) characters to be part of any bundle identifier. Within the support folder inside the Contents folder, open the ad folder where you’ll find the Core Audio driver object called ad_coreaudio.mxo. Ctrl- or right-click on the .mxo file and choose Show Package Contents. Double-click on the Info.plist file, at Contents/Info.plist and change the Bundle Identifier from com.cycling74.ad_coreaudio to com.cycling74.adcoreaudio.
You also have to add some specific entries within your app’s Info.plist file located in the Contents folder. These include a valid bundle ID, bundle version, copyright string, and application category (LSApplicationCategoryType). More information is available in the Mac App Store Developer document, in the “Requirements” section. You may wish to copy the Info.plist file to another location once you modify it, then you can replace the standard one Max puts into your standalone if you ever want to make an updated version of your application and submit it to Apple.
Once you’ve got your app completely ready to go, you need to “sign” and package it using certificates that Apple issues to you. More information on how to get those certificates on your computer is available on the Apple Developer site.
Once you’ve downloaded the certificates to your computer, you’re ready to sign your app. Within your standalone, you’ll need to sign the .app itself as well as any Max frameworks, audio drivers, midi drivers and/or extensions included within your application bundle. Here are examples of the code signing commands (to be run within the Terminal) for an app that includes the Core Audio audio driver, Core MIDI driver, and the setplugpath extension:
codesign -f -s "3rd Party Mac Developer Application: DEVELOPER_NAME" PATH_TO_YOUR_APP
codesign -f -s "3rd Party Mac Developer Application: DEVELOPER_NAME" PATH_TO_YOUR_APP/Contents/Frameworks/MaxAPI.framework/Versions/A
codesign -f -s "3rd Party Mac Developer Application: DEVELOPER_NAME" PATH_TO_YOUR_APP/Contents/Frameworks/MaxAudioAPI.framework/Versions/A
codesign -f -s "3rd Party Mac Developer Application: DEVELOPER_NAME" PATH_TO_YOUR_APP/Contents/support/ad/ad_coreaudio.mxo
codesign -f -s "3rd Party Mac Developer Application: DEVELOPER_NAME" PATH_TO_YOUR_APP/Contents/support/mididrivers/coremidi.mxo
codesign -f -s "3rd Party Mac Developer Application: DEVELOPER_NAME" PATH_TO_YOUR_APP/Contents/support/extensions/setplugpath.mxo
Once the signing is done, you need to package your application using the productbuild command, again using a Terminal command and with an Apple-provided certificate. Here is example that’s worked for us. This command will place the final package file at the root of your home directory:
productbuild \
--component PATH_TO_YOUR_APP /Applications \
--sign "3rd Party Mac Developer Installer: DEVELOPER_NAME" \
--product "PATH_TO_YOUR_APP/Contents/Info.plist" APP_NAME.pkg
Now all that’s left is application screenshots and other details which you’ll need to provide on Apple’s iTunesConnect site, and uploading the .pkg file you created in the last step using the Application Loader utility, which should be provided within Apple’s Developer tools on your hard drive.
We hope this covers most of the unique aspects of getting a Max application distributed via Apple's Mac App Store – we look forward to seeing more Max creations available there!
Oli Larkin: pMix - A sound design, composition and performance tool that allows you to morph between VST plugin presets using an intuitive graphical interface.

Dan Nigrin: Audio Plugin Player - A lightweight VST and AU instrument plugin host, that allows you to play these instruments using either your mouse, computer keyboard, or MIDI device, with support for VST and AU effects too.

Dan Nigrin: General MIDI Player - An easy way to turn your Mac into an instrument, using its built-in General MIDI support, with options for mouse, computer keyboard, or MIDI input.

James Howard Young: TapNTempo - A fully featured metronome that offers customizable sounds, real-time tempo tapping, and beat and division capabilities.
