Max Standalone in the App Store (2019)

James Howard Young's icon

I got my metronome app approved and on sale in the App Store in November of 2019. In addition to the excellent article provided here, there are a few adjustments that need to be made (or at least updates) in order to get a standalone into the app store. Here are my thoughts / experiences

1) Downgrade to Max 8.0.8 to build the app. This is because later 8 updates provide Implicit frameworks which are not able to be successfully submitted at this point. More on this later, if relevant

2) Max 7 will not work at all as at least Catalina can't open the .mxo's

3) Notarization for the app store is not necessary, however codesigning with entitlements is

4) It is only necessary to codesign once using the --deep and --force flags. Max has its own signatures so --force will overwrite them. Signing with --deep on your entire app will also sign all the nested frameworks and .mxo's You do not need to sign each individually

5) You can ( though I do not recommend this - I did it after a while to prevent going insane) make adjustments to the underscore in ad_coreaudio in your Max 8.0.8 and it will flow through to your app build. You can even add the Identifier lines to the .mxos but I would not advise tampering more with Max than necessary, although you will presumably only be using it to build your apps. I also kept a spare .dmg with the complete and untampered 8.0.8 on my desktop and had to use it several times.

6) xattr is necessary to fix the resource fork error caused by many custom .icns files but you only need to use it once with xattr -lr -cr

7) IMPORTANT - hardened codesigning is not necessary unless you need your app notarized, which is not necessary for the app store as appstoreconnect and the manual review provide all the checks that notarization would. Hardened codesigning will likely brick your app.

8) Apps made with Max 8 load much slower than those built with 6 and my menubar kept crashing after codesigning. I realized that this might have been specific to my machine so I submitted the app anyway. Time will tell if this continues to be a problem. I'm working on this at the moment so more to come later.

9) As another commenter pointed out, building and codesigning is not advisable on iCloud folders. To be safe, build to your app to your local directory.

10) It's a good idea to add "Copyright (human-readable)" key to your main app's plist. I'm not sure this is necessary yet. Also you need to increase or change bundle versions every time you upload a package to appstoreconnect. The frameworks' plists should have a bundle name too but apparently that's not necessary as I did not want to go through the loops involving adding that row as it messed up the symlinks for some reason.

billyanok's icon

Hello James,
Thx for the info, super helpful.
What are the minimum steps for distribution of a standalone, not using the App store.
Do I need to use a entitlements.plist?
Thx!
Bill

James Howard Young's icon

Hi Bill,
Unfortunately, if you want to distribute your app you (I think) will need to take all of these steps in addition to notarizing it, otherwise other users won't be able to open it. I think Catalina prevents users from opening unsigned and unnotarized apps not from the app store but you should try it out yourself first on a new machine to see. It's possible you can alt-click to bypass gatekeeper but I'm not sure. Let me know how the new machine works out.

This means you would need entitlements.plist but that's not a big problem. Let me know if you need help. There's also a great app to streamline all of this that I can recommend if you need it.

billyanok's icon

James,
thanx for the quick reply!
I wouldn't mind having a look the app you mentioned to help streamline this.
Bill

James Howard Young's icon

Sure thing. https://www.ohanaware.com/appwrapper/ There's a free demo. I never do anything without it. You'll still need to use the lr command above to fix your app icon but this app will handle codesigning and entitlements for you as well as make a package for distribution.

billyanok's icon

Thanx for that James,
I’m almost there, would it possible to contact you off list for a bit of paid work?
Thx, Bill

James Howard Young's icon

Hi bill that would be great. jhy@jnote.com

Iain Duncan's icon

This is super helpful, thanks for doing this James. I may also wind up contacting you in the future!

James Howard Young's icon

Sure thing, Iain!