I've just successfully submitted a standalone Max Mac App.
Since I read many useful articles in this Forum (which helped me a lot), and many others in many other net-places, I thought that maybe making my own summary could be of some interest.
- My App's name is MAX4LIFE
- In making my patch, I used some JavaScript and i developed an external Object in C Language. So i did not used Java.
- In making my patch I embedded all the other patches I used.
- This is my build script (I replaced the original Max.icns icon with my own one, same file name. The mxo is my external object and the js is my JavaScript code):
open thispatcher
appicon Elements:/proveRecAbleton/life/MAX4LIFEmac/Max.icns
include "Macintosh HD:/Users/den/Music/Ableton/User Library/Presets/MIDI Effects/Max MIDI Effect/MAX4LIFE.maxpat"
include "Macintosh HD:/Users/den/Music/Ableton/User Library/Presets/MIDI Effects/Max MIDI Effect/bigLife1.maxpat"
include "Macintosh HD:/Users/den/Music/Ableton/User Library/Presets/MIDI Effects/Max MIDI Effect/GlobalTransport1.maxpat"
include "Macintosh HD:/Users/den/Proj/max-sdk-7.0.3/externals/max4life1.mxo"
include "Macintosh HD:/Users/den/Music/Ableton/User Library/Presets/MIDI Effects/Max MIDI Effect/myShowNote.js"
- At this point I got a file named MAX4LIFE.app
- I signed everything using the script you can find below
- I built the package using:
productbuild --component ./MAX4LIFE.app /Applications --sign "3rd Party Mac Developer Installer: Ware's me srl (EDFE5X75WY)" --product "./MAX4LIFE.app/Contents/Info.plist” MAX4LIFE.pkg
- At this point I got a file named MAX4LIFE.pkg
- I used ApplicationLoader to submit the pkg, after creating all the needed stuff in iTunesConnect
- I got errors from ApplicationLoader, and i had to do the following adjustments
- The main info.plist file was missing the following entry:
LSApplicationCategoryTypepublic.app-category.music
- The main info.plist file had errors in the executable name and in the version short name, which I corrected manually
- The exe name was wrong also in another info.plist file located here: MAX4LIFE.app/Contents/Resources/C74/interfaces
- Each mxo file included in the package happens to have its own info.plist file
- ALL these files DO NOT contain the following entry (here is one of them as an example):
CFBundleIdentifiercoremidi.mxo
- But a Bundle Identifier itself cannot contain ~ and _
- So all the files whose name contains those two characters must be renamed
- There are two entries that must be accordingly edited (in the various info.plist files mentioned above): the newly added CFBundleIdentifier and the CFBundleExecutable
- Last but not least, there is and exe file inside each mxo (use "Show Package Content" as usual), and its name must be changed too
OK, that's all.
Please note that these are my notes about SUBMITTING. I guess that having the App approved would be another story.
Again, I hope this could be of some interest for somebody else.
Nick
=============
Code signing script:
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Frameworks/MaxAudioAPI.framework/versions/A --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Frameworks/JitterAPI.framework/versions/A --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Frameworks/MaxAPI.framework/versions/A --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Frameworks/MaxLua.framework/versions/A --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Frameworks/libmozjs185.dylib --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/jitter/glstatus.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/m4l/live.guilib.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/autohelp.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/debugwindow.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/fseventwatcher.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/maxurl.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/maxxslt.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/maxzlib.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/objectview.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/pianoroll.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/qtimage.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/querylib.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/setplugpath.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/sqlite.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/synophrys.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/yaml.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/max/zoomer.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/msp/max.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/msp/polybuffer.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/extensions/msp/sfplay32.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/externals/ad/adcoreaudio.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/externals/ad/adnonreal.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/externals/ad/adportaudio.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/externals/ad/adrewire.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/externals/mididrivers/augraph.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/externals/mididrivers/coremidi.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" ./MAX4LIFE.app/Contents/Resources/C74/externals/mididrivers/midiadrewire.mxo --deep
codesign -f -s "3rd Party Mac Developer Application: Ware's me srl" --entitlements ./MAX4LIFE.entitlements ./MAX4LIFE.app --deep
=============
Entitlements file:
com.apple.security.app-sandboxcom.apple.security.device.microphonecom.apple.security.files.user-selected.read-write