Forums > MaxMSP

Max apps in new Apple Mac App Store?

October 21, 2010 | 6:11 pm

Before I go spending $99 to become an official Apple Mac developer, does anyone know if the new "Mac App Store" that Steve Jobs announced yesterday will support apps built as standalones by Max/MSP? In other words, do they have any restrictions with respect to what languages/libraries/etc.. are used to create the apps (as they did for some time on the iPhone side of things?)


October 21, 2010 | 6:24 pm

Partially answering my own questions – I’ve found some useful tidbits here:

http://www.appleinsider.com/articles/10/10/20/apple_issues_review_guidelines_for_mac_app_store.html

So far, so good (as long as I stay away from Java, how lame of Apple). I guess for more details than this, I’ll have to sign up for an account…


October 21, 2010 | 6:25 pm

Something tells me they won’t exactly be delighted to see applications that utilize MXJ

http://www.macrumors.com/2010/10/21/apple-discontinuing-java-installation-packages-for-mac-os-x/


October 21, 2010 | 6:29 pm

Woops… missed ya!

anyway… so much for the application I’ve been working on for 4 years.


October 21, 2010 | 6:37 pm

Like I said, how lame of them on the Java stuff – though like it says in that Macrumors link you posted, it does seem in line with their other recent stances (e.g. Flash).


November 5, 2010 | 1:14 pm

The thing with java is because it implies you have to download java to use the app, though I am in the dark with embedded runtime engines like Max runtime. I can;t find anything that contradicts installing a runtime like Max runtime. Anyone found anything on this?


November 5, 2010 | 1:22 pm

Maybe we should start a Max app store :-)


November 5, 2010 | 2:01 pm

With regards to max apps, I don’t see why they would want them and not java apps. They are even higher lever and don’t adhere to apple UI laws. Also I can judy see it: "doesn’t perform any function"

Max app store is a great idea.

/iPhone typing


November 5, 2010 | 3:11 pm

Max app and object store. This would be awesome, although it would perhaps have to rely on the honesty of the community in terms of licensing for paid apps.


November 5, 2010 | 3:16 pm

Re: bundling the Max runtime – I think this is OK, because it gets bundled within the .app bundle. Apple dislikes/forbids if you want to install something elsewhere though (to be included in the forthcoming store, anyway).


November 5, 2010 | 6:29 pm

@ David :Im not sure how they are going to stop people copying stuff on the app store, is there a top level api that copyrights the app on the app store?

Personally the whole Mac App store smells of an attempt to dissolve the idea that there are more useful apps on the Win platform than on OsX and make Mac computers seem funkier because of all these cheap "cool" apps, like the million fart apps on the iOs. Come to Apple OsX who have millions of cool apps.

The more I think about the Max App store the more I like it.

It would be one way to attract attention to the fact that the Graphical Dataflow Programming environments are actually really powerful and useful.


November 9, 2010 | 8:47 pm

[quote]The more I think about the Max App store the more I like it.

It would be one way to attract attention to the fact that the Graphical Dataflow Programming environments are actually really powerful and useful.[/quote]

+1


November 9, 2010 | 9:33 pm

"Maybe we should start a Max app store :-)"

exactly.


November 10, 2010 | 1:31 am

yes, graphical and dataflow environments are great. I mean, when you start learning computer programming and logic in general, that’s one of the main ways to get the brain up to speed with flow, conditionals, branching logic, etc. So when it’s abstracted to patch cords, it’s pretty damn cool…you can understand what’s usually a linear and syntax-based set of steps as an all-in-one graphic. Picture worth a thousand words, of code…?


November 11, 2010 | 3:06 pm

Can we work out a ‘frame work’ for this project?


November 11, 2010 | 3:18 pm

Ok I’ll throw this out. A max application that used jweb to surf around a normal shopping cart site (maxojbects.com plus?). Then when the user checked out, the application would download the stuff and distribute it to the right place on your drive.

That way you could include youtube demos, images, or soundbites of all the applications, objects, and patches.


November 12, 2010 | 6:13 pm

@Dan
I found this article. Aplle is going for open source JDK

http://www.macsimumnews.com/index.php/archive/oracle_apple_announce_openjdk_project_for_mac_os_x/


November 12, 2010 | 7:38 pm

Hi Hans,

Thanks, yeah, I saw the post on Apple’s site earlier today – I started a new thread this AM:

http://cycling74.com/forums/topic.php?id=29486


December 11, 2010 | 12:21 pm

Hi,
Will it be possible to submit an application made as a max standalone app ? I mean if i don’t have any kind of experience with Xcode ? (On the link posted by Dan, the real meaning of this sentence is not clear to me : "Apps must be packaged and submitted using Apple’s packaging technologies included in Xcode – no third party installers allowed.")
Also, could i use the fingerpinger* external object from anyma.ch in it ? (it says GNU GPL 2.0 in its maxhelp) * knowing also that the function of this object might be considered as some kind of "hidden-feature-not-to-be-used" by Apple..?


December 12, 2010 | 12:32 pm

> On the link posted by Dan, the real meaning of this
> sentence is not clear to me : "Apps must be packaged
> and submitted using Apple’s packaging technologies
> included in Xcode – no third party installers allowed."

it means that it is for example not allowed to use compression
and install aps from alladdin or vise.

-110


December 12, 2010 | 12:50 pm

Ok, so it will be possible to submit an application made directly from a max standalone ?


December 12, 2010 | 1:07 pm

I have not been actively trying to submit a Max app, but my read of the guidelines seems like it should be OK, as long as it doesn’t write files to any weird places. Also still unclear to me whether using mxj in your application will violate the terms or not, but I think it will.


December 12, 2010 | 3:18 pm

What a pity for mxj. Stupid question : Wouldn’t exist some king of java compiler to c that would help to convert a .java into an .mxo ?


December 12, 2010 | 4:01 pm

Would be nice, but doesn’t exist to my knowledge…


May 17, 2011 | 12:33 pm

I had my max-built app rejected from the mac app store because it writes it’s preferences in an area that isn’t one of apple’s approved locations

~/Library/Application Support/
~/Library/

~/Library/Caches/

with the current version of max you cannot change this, so for the time being Max Apps are probably not going to make it onto the app store.

oli


May 17, 2011 | 12:56 pm

Out of interest, what goes in your preference files?


May 17, 2011 | 2:33 pm

They’re automatically created when your standalone is run – I don’t think there’s anything you can do to stop them from being created even if you wanted to. They store things like audio and MIDI preferences, information about the Max window, recently used fonts, etc…

And BTW, thanks again Oli for testing these waters!


May 17, 2011 | 2:55 pm

Hi Oli, you mean ~/Library/Preferences is not an approved location for writing preferences? Or is it that max creates a folder, which is forbidden. Thanks for the info.


May 17, 2011 | 4:47 pm

2.30 Apps that do not comply with the Mac OS X File System documentation will be rejected

The application is creating files in, writing to, or opening for Read/Write access the following location(s):

‘~/Library/Preferences/MyStandalone Preferences Folder/’

Except as noted below, unless a user explicitly chooses to save data in an alternate location (using a Save As file dialog), your application should write only to the following locations:
~/Library/Application Support/
~/Library/

~/Library/Caches/

so yes i think you can’t write anything to ~/Library/Preferences , which seems strange since lots of apps put a plist there


July 12, 2011 | 12:31 am

Oli,

I want to personally thank you for testing the waters for the rest of us. I am sorry to hear that Max apps would be rejected, but your information is very valuable to have. Thank you for taking the time to report back your findings.


October 19, 2011 | 6:04 pm

Preferences folder location Fixed in Max 6


October 19, 2011 | 6:10 pm

Yes, Oli and I have been pestering the Cycling folks plenty about this, and happy to say that they delivered! The only thing you have to be careful about is in the standalone object, to specify (exactly) your app’s name in the Preferences File Name field….


October 19, 2011 | 6:27 pm

I noticed Oli got his Endless Series app approved in the App store. I’m wondering how, or if, he got around the trashed files problem. I tried sending him an email but it bounced.


October 19, 2011 | 6:37 pm

He’ll probably chime in himself… But he re-wrote the application natively – it’s not a Max application anymore.


October 19, 2011 | 6:48 pm

Ok. Thanks for the info


October 19, 2011 | 7:05 pm

yeah the first standalone I submitted was a vst~ object hosting the Endless Series plugin (which was already written in c++). When it got rejected i built a standalone version in c++.

FWIW, since Apple rejected several versions I sent to the appstore even once it was all native, I can imagine that there might be further problems to do with the specifics of what goes in the Info.plist file, exactly what goes in the menus etc… I really hope not, but apple have been really fussy and thoroughly unhelpful in my experience – so I expect the worst!

—-
Endless Series v3 out now – A unique synthesis and effect plugin based on the Shepard Tone auditory illusion.

http://www.olilarkin.co.uk


October 20, 2011 | 6:20 am

ok good to know. i’m tempted to pay the 100$ just to get their feedback.


October 20, 2011 | 10:03 am

Well, since this thread comes up again, I would like to express my frustration about the fact that cycling has not come up with a ‘build in synthesizer’ of good quality. This has two dimensions to it. The first one is that for stand alone projects which are based on algorithm there is no good sounding instrument which can be included. Second, as a sophisticated software company based on DSP, it is just a very obvious shortcoming to my opinion. I can go around it but it would be nice to make stand alones which can include a synthesizer.


October 21, 2011 | 1:50 pm

Well, your idea of a "good quality" synth might not be someone else’s idea of a good quality synth. Should it be subtractive? One oscillator? Two oscillators? Sync? What kind of filter did you want? Or should it be a sampler? Or an additive synth? Or a mixture? And why stop there?

While I can see the value of a simple demo synth to help understand how Max works, I don’t see how it it’s up to the Max developers to provide your "goto" synth any more than the developers of the C++ compiler that I use should include an accounting package and a word processor.

Max is after all a development environment. There are gazillions of free (and pretty decent) VST soft synths to be found that can be easily used via the VST~ object, many of which can be redistributed with the proper attribution.

Why is that not a suitable solution?


October 21, 2011 | 5:33 pm

@dhjdhjdhj

the point of my complaint, if you want was that you can not integrate a 3rd party synth in a stand alone project!!! That was it.

I use 3rd party synth because my life is not long enough to be a composer a programmer and what else it takes to be at this edge…sorry

I admire of course Tim who has been born much later than me and who is good composer and programer. It depends how you think and at what angle you get into something. Max was the best to happen to me as a composer who integrates live electronics but I could not make it into the programmers league. Sorry for that.


October 21, 2011 | 5:52 pm

I understand — but my comment stands — no matter what Cycling might provide, it almost certainly will not suit everyone’s (if indeed anyone’s) particular needs. However, I guess I don’t understand the underlying issue. If you have Max, then why do you need standalones? And if you want to distribute a standalone to others, then a simple installer could be used to put a 3rd party redistributable VST into the right folder. Or (and probably better), the standalone could have an option to allow the user to select which VST synth they want to use.


October 21, 2011 | 6:25 pm

thanks for the view you take on this matter. Maybe it opens the way to discuss standalones. I think that a good standalone would be a new way of creating music and a new platform to distribute it. Cd’s are one way little apps another to present music. I am pleased with what I have under Max but I can see some things in the distance…..
Thanks for your comment


October 22, 2011 | 3:33 am

"Preferences folder location Fixed in Max 6"
This is great ! Thanks.


October 22, 2011 | 2:26 pm

so what you guys are saying is we can now make a max app and have that be the basis for an ios app now? how would this work exactly? are there max/javascript frameworks to import into the xcode file or…?


October 22, 2011 | 2:31 pm

no… Max can’t make IOS apps. But maybe now Max6 OSX standalones will be viable on the Mac App store


October 22, 2011 | 3:03 pm

haha i think i have a one-track(ios) mind, guess i was hearing what i wanted to hear;)
thanks for the clarification!


October 22, 2011 | 5:09 pm

Those of you who attended Damon Holborn’s presentation at the "Columbia Night" reception/festivities for Expo ’74 will have seen that a max-msp –> iOS pathway is coming soon! It will be limited in specific ways, but it will be possible. And possible in such a way that it will pass the restrictions of the App store.

brad

http://music.columbia.edu/~brad


October 22, 2011 | 11:00 pm

Brad,

Although I was at the Expo, I couldn’t make the Columbia event – can you (or Damon) expand on what you mention above? Is it an RJDJ-like approach?


October 24, 2011 | 1:33 pm

I think the Recovered Files problem will prevent Apple from approving any Max standalone. i can’t get them to go away, but maybe someone has some experience with this.


October 24, 2011 | 1:59 pm

James, can you provide a simple patch that when built into an application displays this problem? I’ve never had the problem myself, but I know others have, and I’m curious…


October 24, 2011 | 2:16 pm

Hi,

from my part, you need no patch. If I simply install Max 5 on a brand new computer with OS X (10.5 or 10.6) and start Max, then each time after rebooting, I’ll have some Max-related files in the Trash in a folder called ‘Recovered Files’. This happened to me with each Mac I had until now, and it happened even if I didn’t install any third-party externals (I tried it out that way the last time I bought a new computer — which was a bit more than a year ago –, just out of curiosity). Actually it is a surprise to me to hear that there is someone who actually doesn’t have this problem…

Best,
Ádám


October 24, 2011 | 2:22 pm

Dan –

I had to miss your Expo ’74 presentation also, although I was very interested (a lot of my little apps (mm2, mlooch, even the larger "My Book of Dreams" are max standalones). Thanks for putting your slides on-line, I’m probably going to use them as a resource in The Future.

Regarding our iOS system, it’s more like c74/TouchOSC except that all audio and DSP is handled on the device. Damon has built a set of interface objects that translate from Max/MSP into XCode. The other trick is to use rtcmix~ for the audio processing (not hard). Damon’s scripts then build an XCode project from the max-patch layout. Then you simply hit "build and run" in XCode and off you go! (< --- this is the step that allows it to be accepted into the App Store for iDevices.)

You can also further modify the XCode project — all the stubs are there for building your own iOS interface objects, etc. — to produce a more ‘customized’ app.

We tested this out in a grad seminar Damon and I did last Spring, and we’re putting the final tweaks on it now. Look for a public announcement in the next month or so.

brad

http://music.columbia.edu/~brad


October 24, 2011 | 2:41 pm

@Ádám – Do standalones built by Max display the same behavior?

@Brad – That’s *awesome* – please do keep everyone posted!!


October 24, 2011 | 2:55 pm

Dan – I tried one of your Synths and still got the problem so now I am wondering if the problem is machine-based. I could send you a patch, but that wouldn’t help too much I don’t think, since all my builds have the problem, it would just be an ordinary Max patch I sent.


October 24, 2011 | 3:04 pm

Thanks for the info – definitely weird!


October 24, 2011 | 7:29 pm

@Brad, I’d love to hear about that when it’s ready.


October 24, 2011 | 8:59 pm

This is a great thread! Same spirit as Dan’s workshop at Expo! Thanks.


October 25, 2011 | 5:53 pm

As if the problems weren’t enough, it seems as though the menubar object in the Max 6 Beta doesn’t include the "Help" menu item. I’ve sent a bug report.


October 25, 2011 | 6:02 pm

actually my app doesn’t have that and I seem to have got away with it


October 26, 2011 | 6:59 am

Hmmm that’s good to know. Turns out the "Help" problem is really a bug so I guess it’s worth it.


October 26, 2011 | 6:24 pm

I just forked over the 99$ and joined the program, but have now found several more hoops to jump through including signing the App, and the installer (provided one has one, which I don’t). Ugh.


October 26, 2011 | 6:35 pm

Oli can probably speak to the signing stuff as I haven’t delved into that yet, but as for the installer, isn’t being able to provide the app as a .dmg , which you then mount, and then your app gets dragged onto the Applications folder enough? If you have other files that need to go other places, using the Apple tools is not that hard anyway to build a "real" installer…


October 26, 2011 | 7:03 pm

I’m not sure the .dmg is enough since it can’t be signed like the installer (apparently) can.


October 26, 2011 | 11:33 pm

here is my bash shell script to codesign the .app and build the .pkg . You need to get the appropriate certificates installed in your mac keychain. All the info is in the app store documentation. Once you build the .pkg you upload it with "/Developer/Applications/Utilities/Application Loader.app"

#! /bin/sh

BASEDIR=$(dirname $0)

cd $BASEDIR

APP="/Applications/APP_NAME.app"

echo "code signing app"
echo ""
codesign -f -s "3rd Party Mac Developer Application: DEVELOPER_NAME" $APP

echo "building pkg for app store"
productbuild
–component $APP /Applications
–sign "3rd Party Mac Developer Installer: DEVELOPER_NAME"
–product "/Applications/APP_NAME.app/Contents/Info.plist" APP_NAME.pkg


October 27, 2011 | 2:01 am

Thanks Oli, very helpful – I also sent to James earlier the link on Apple’s developer site where this info is housed.

One more question Oli – did you strip your app of the PowerPC code prior to submission? I thought I read somewhere that only Intel code was allowed…


October 27, 2011 | 7:50 am

Thanks for the info Dan and Oli. I’m not on the c74 boards enough to know if this is a candidate for longest thread ever, but it must come close. I did get as far as installing the certificates but had gotten stuck there. Anyway, it’s good to know that it should be possible, I’ll hack away at it.


October 29, 2011 | 8:15 am

>One more question Oli – did you strip your app of the PowerPC code prior to submission? I thought I read somewhere that only Intel code was allowed…

yes, but that shouldn’t be a problem with Max6… unless you are using third party UB objects with PPC code


October 29, 2011 | 10:40 am

Max App store!
huge :)

I can host thing there:
http://designthemedia.com
but it wouldn’t be the way to follow

what c74 think about a max app store like that?

@Brad/About Xcode stuff, I’m interested about the Damon’s tool. is it available ?


November 1, 2011 | 6:46 pm

Dang, finally got my app signed, sealed, and delivered, only to discover a puzzling problem: I can’t write my preferences once I make a pkg and unpack it again. I am using max sendapppath location and sprint symout – works as an .app but not once it’s been put into a .pkg. Any ideas? Is there a better way to store preferences with Max 6?


November 1, 2011 | 9:04 pm

Can you post the Max code you’re using to define the location of where you are writing your prefs to?


November 2, 2011 | 7:36 am

Hi Dan, Here it is. I’ve got the loadbangs on a short delay.

– Pasted Max Patch, click to expand. –

November 2, 2011 | 7:41 am

James, firstly, I’d check the deferlow object, instead of delay.
It deals with priority threads in the scheduler.

Secondly, I’d suggest this one.
It works fine to find path inside standalone.

It isn’t from me but by Guillaume Evrard.
(http://cycling74.com/forums/topic.php?id=29263)

– Pasted Max Patch, click to expand. –

November 2, 2011 | 11:24 am

I highly doubt that Apple is going to let you write things in the application itself for the preferences. You should figure out where the Application Support folder is since this is apparently where Apple wants you to put your preferences.


November 2, 2011 | 1:25 pm

The easiest way to find that folder is with something like this (Max6 only):

– Pasted Max Patch, click to expand. –

November 2, 2011 | 1:32 pm

Thaaaaaaaaank you all – I think that will do it.


November 2, 2011 | 1:54 pm

IF you wanted to have a more generic stuff (I mean, one codebase but multiple target: win + osx), you could use this one

– Pasted Max Patch, click to expand. –

November 2, 2011 | 2:38 pm

Agree with above suggestion, to not write your file to within the app bundle – Apple may not allow it, and I even think it might fail because of a permissions problem. Tim’s approach will get you to an Apple "approved" place, and one that should work when the app is sitting in the Applications folder too.


November 2, 2011 | 2:47 pm

It seems that Max6 has a jolly good future.


November 2, 2011 | 11:13 pm

Hmmm, just got a message from Apple that starting next March, all apps submitted through the AppStore will have to support sandboxing. I think this is going to make the Mac a less viable platform for exploratory applications, at least for anyone trying to sell through the AppStore.

Sigh


November 3, 2011 | 8:05 am

I think it should be possible to sandbox a Max-app, by adding entitlements to the info.plist before codesigning.

http://bit.ly/neBM5z

oli


November 3, 2011 | 7:49 pm

Thanks to this list and especially Oli and Dan, I have gotten my Max 6 Standalone successfully posted to Apple for review. I will be sure to let everyone know how it goes here.


November 3, 2011 | 7:52 pm

COngrats, — what does your app do?


November 3, 2011 | 7:57 pm

it would be a nice benefit to be distributed/deployed by App Store.
btw, there are a lot of other system (through basic https server web with a payment system) which provide more benefits vs the % grabbed by Apple.

but I ‘d like your idea/experience sharing etc
I’ll follow your infos :)


November 3, 2011 | 8:07 pm

I know it’s pretty advantageous to get the app distributed through private websites and places like MacUpdate and Cnet, but I do think that Apple does provide a good bit of "coverage". Back when Apple.com allowed pretty much anything to be listed there, I could see that most of the traffic for one of my apps came from them, with MacUpdate coming in 2nd and Cnet coming in 3rd. It might be true about the %, though. I suppose it depends upon how visible the app is when push comes to shove.

Thanks for the support – my app is a metronome with customizable sounds, tapping, beat function and selectable subdivisions. I’ll be sure to post its status here. It could take a while….


November 3, 2011 | 8:10 pm

I’m convinced, targeting to put a couple of apps for iOS there for sure.
I’d suggest to sell by their channels + by your own website too.

for instance, http://www.sparrowmailapp.com/ does that.


November 3, 2011 | 8:12 pm

Wow that’s a great website you posted.

I’m not so worried about the profit part since I am only working in Freeware at the moment. I might get some Ad revenue but that’s about it.


November 3, 2011 | 8:17 pm

in my experience, selling on both the appstore and my website has been a bit of a headache. Firstly because I wanted people who bought on the app store to be licensed to use the plugin versions too (apple won’t let you put plugins on the appstore or hide them anywhere in the app bundle). There is no way to find out who bought your app on the appstore, so I couldn’t email the customers to offer them the plugins. Secondly, because you have to wait for your app to be reviewed (can take 2 weeks) it makes it hard to synchronise the version you put on your own site and the version you put on the appstore.

however, it is good for publicity


November 3, 2011 | 8:21 pm

@oil larkin: you are right. using invision power board system, pushing a version takes… around 3 min. you can wait for the D-Day from Apple, the pushing it (not automatically, indeed) on your website.

This thread is full of experiencies, I love that :)


November 4, 2011 | 4:07 pm

@Howard
my congrats too!!
You work very fast.
Would you mind posting what was involved to get the patches to be app ready?

I have not purchased Max6 yet nor do I have signed in for $99 to Apple dev, but I have something I could turn into an app…..

Well done!


November 4, 2011 | 4:16 pm

AFAIK the app hasn’t actually been reviewed yet, just successfully submitted for review… so hold your horses before anyone else gives apple $99 – there is still yet to be a Max-built app on the app store!


November 4, 2011 | 8:41 pm

Yes, this is true. The app hasn’t been approved for the store, it just made it through to the app review queue. Although this required quite a bit of tweaking, it is far from finished. But at least I’ll be getting some feedback that I can hopefully do something with and then we shall see. I would also strongly advise against joining the Apple Dev for 99 bucks until we know more.

Hans, I can give a quick overview of what is involved.

1) build app
2) tweak package contents – include custom json file, custom plist, custom icon, delete extraneous files and folders plus some other things with the bundle I won’t go into too much detail here.
3) codesign app and make pkg
4) test install pkg
5) add info through iTunes connect and upload pkg.


November 9, 2011 | 7:42 am

Hello folks,

I’ve got my Max Standalone approved and ready for sale in the App Store. You can view it here:

http://itunes.apple.com/gb/app/tapntempo/id477043682?mt=12

Thanks to all for the help. Found a strange bug, where the "hide" and "Quit" menu options don’t include the app name, but rather the name "Max runtime". I hadn’t even noticed this before I submitted it, but apparently it didn’t bother Apple too much. I have submitted a bug report to Cycling.


November 9, 2011 | 8:36 am

nice one! I think you can change those things by editing the maxinterfaces.json file


November 9, 2011 | 9:16 am

Thanks. I’m not sure it can be changed there because neither the term "Max Runtime" nor any string for "quit…" or "help…" occurs in that file. The same problem occurs in the menubar help patch for Max 6 where in Max 5 it was fine.


November 9, 2011 | 12:49 pm

CONGRATULATIONS!! I think you are the first to get a Max app on the Apple Store James.

Re: the bug, good that your reported it, it does seem like it’s an oversight that Cycling might be able to address.

Now I gotta get to work on MY app (especially before the March deadline when everything’s gotta me sandboxed… we’ll see what happens at that point!).


November 9, 2011 | 1:26 pm

Ditto — thanks for showing the way.


November 9, 2011 | 3:57 pm

@Howard
well done!!
Congratulations.


November 14, 2011 | 1:11 am

This is really great info in this thread, thanks all.

I’m still baffled by this restriction:

2.30 Apps that do not comply with the Mac OS X File System documentation will be rejected

The application is creating files in, writing to, or opening for Read/Write access the following location(s):

‘~/Library/Preferences/MyStandalone Preferences Folder/’

Except as noted below, unless a user explicitly chooses to save data in an alternate location (using a Save As file dialog), your application should write only to the following locations:
~/Library/Application Support/
~/Library/

~/Library/Caches/

so yes i think you can’t write anything to ~/Library/Preferences , which seems strange since lots of apps put a plist there

Haven’t found an explanation online as to why writing to ~/Library/Preferences isn’t allowed. Anyone?

Leigh


November 14, 2011 | 3:55 am

‘cos Apple doesn’t want you to anymore! It’s probably related to permissions and sandboxing goals


November 14, 2011 | 7:32 pm

That’s not a new thing, but it’s not so important for the purposes of Max 6, since the preferences are now stored in an acceptable directory.


November 14, 2011 | 10:35 pm

Permissions-wise, everything within ~Library/Preferences (again, that’s the *user’s* Library folder) should have the user as the owner, with read/write privileges.

And looking in my ~Library/Preferences, there are hundreds of plist files from various applications.

So, in some sense it *is* a new thing, and I’m curious when this change was made and why. Is the entire Preferences folder being phased out? For, if applications can’t write to it, then what else would?

Leigh


November 16, 2011 | 10:04 am

I believe I found my answer about the Preferences directory. Scroll down to "The Library Directory Stores App-Specific Files":

http://developer.apple.com/library/mac/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html

As they explain, "This directory contains application-specific preference files. You should not create files in this directory yourself. Instead, use the NSUserDefaults class or CFPreferences API to get and set preference values for your application."

So, your application is still allowed to utilize Preferences, you just can’t write to it directly. When I get into Max 6 (haven’t had time yet) I’ll see what solution they decided on for getting that to work (someone mentioned Max 6 now writes to the "correct" location).

Leigh


November 28, 2011 | 4:34 pm

Thanks James Howard for your app.
Just downloaded your TapNTempo and it works great !

Was just wondering : do you think there would be a way to do an .ipa in order to open the app on an iPhone ?


December 1, 2011 | 6:16 pm

Thanks, Florent. I would love to make an iPhone version but it will take me a while to get it going.


December 1, 2011 | 7:39 pm

You’re welcome.
What’s the process to do that iPhone app ?
I guess you can’t build an .ipa from Max, so is there some kind of converter ?
Thanks


December 2, 2011 | 8:53 am

Hi Florent,
It’s not posible to just build to iPhone, but there are some people working on a bridge between Max and XCode that will open up some possibilities. But I doubt that we will be able to build complete IOS ready apps in Max any time soon.


December 15, 2011 | 5:05 pm

Just a quick note to let folks know that I too now have an app "In Review" on the App Store – hopefully within 1-2 weeks (holidays notwithstanding), it will be available on the Mac App Store.

It's called Audio Plugin Player – and it does what it sounds like: let's you play your VST or AU instrument plugins, using either the mouse, computer keyboard, or MIDI device (software or hardware).

[attachment=179467,3089]

Attachments:
  1. AudioPluginPlayerSS.png

December 16, 2011 | 6:32 am

very good Dan, congrats!!


January 13, 2012 | 7:49 am

I was really lucky… passed the review first time!

http://itunes.apple.com/us/app/pmix/id492576037?ls=1&mt=12

(maybe it's because they gave me such a hard time the first time I submitted an app)

oli

[attachment=182002,3202]

Attachments:
  1. kvrpMix.png

January 13, 2012 | 4:53 pm

Congrats Oli!!! Such a wonderfully designed piece of software…


January 18, 2012 | 2:57 am

Took a little bit longer than I hoped, but my Audio Plugin Player is now up there in the App Store too:

http://itunes.apple.com/us/app/audio-plugin-player/id489844081?ls=1&mt=12

$0.99 till the end of the month! :-) Many thanks to Oli and James for their help….as the original poster of this thread, it makes me really happy to get to this point of getting through all the Apple hoops!


January 18, 2012 | 9:32 am

Congratulations, Dan! Nice to see the Max apps taking over Apple one app at at a time.


January 31, 2012 | 10:38 pm

Code re-use is a wonderful thing! Announcing App Store app #2 for me, General MIDI Player:

http://itunes.apple.com/us/app/general-midi-player/id498787769?ls=1&mt=12

$0.99 till Feb 7!

[attachment=183974,3286]

Attachments:
  1. GeneralMIDIPlayerSS.png

February 2, 2012 | 1:42 am

I don’t know whether this was mentioned yet, and it’s a little off-topic, but if anyone’s interested in development for iPhone and Android, check out

http://www.anscamobile.com/

It uses a "write once, build to multiple devices" paradigm by wrapping the gory details in the Lua language (rather than having to write in multiple languages). For me it’s made development a serious possibility…Lua is very clean and so many of the laborious details for elements like UI and media-handling are already worked out.


March 15, 2012 | 12:40 pm

Hello everyone

I’m wondering if a patch does contains java externals will be accepted on mac store as well

Pierre


March 15, 2012 | 12:50 pm

My guess is that it would not be approved, as Java is explicitly mentioned as "not allowed" in Apple’s guidelines… Silly of them, but that’s the way things stand at the moment. That said, I’m not sure that any of us have actually *tried* to submit something with mxj in it to see if it would in fact be rejected.


March 15, 2012 | 12:54 pm

Ok, I will try and let you know

Pierre


April 19, 2012 | 6:28 pm

FYI, Cycling has posted an article co-written by me, Oli and James on the specifics that we collectively learned regarding getting our apps up on the Mac App Store: http://cycling74.com/2012/04/19/get-your-max-standalone-on-apple’s-mac-app-store/


April 19, 2012 | 6:47 pm

Nice


April 20, 2012 | 9:52 am

Brilliant news


April 20, 2012 | 10:26 am

Thanks a lot!


April 22, 2012 | 1:47 pm

Any further hints and updates on how to port your mac apps to iOS as they come would be great. This seems like a much more complex process, however.


April 23, 2012 | 1:59 pm

For iOS-related stuff, still waiting on Damon Holborn’s work to be announced… (see earlier in this thread for more info).


April 23, 2012 | 2:55 pm

I really hope we hear something soon. With options available for Pd, Csound and Processing it would be nice if Max could play too.


April 23, 2012 | 3:03 pm

Yeah, I recently designed an app for the iPhone/iPad, but am currently having to pay someone to re-program it in libpd…


April 26, 2012 | 11:50 pm

Just made my entrance to the App Store myself! It’s a small utility called MATRIK Check it out.

Attachments:
  1. 03.png

April 26, 2012 | 11:54 pm

Attachment added:

[attachment=192269,3778]

Attachments:
  1. Tags.png

April 27, 2012 | 2:56 am

Very nice looking, congratulations!!


April 27, 2012 | 3:59 am

Question for Dan and/or James and/or Juan: How did you guys get your apps down to about 5 MB? Or is that the compressed size? The MacOS folder itself in my recently built app is 11.2 MB, and as far as I know, that’s not changeable.


April 27, 2012 | 7:12 am

You need to remove the PPC code (with http://www.splook.com/Software/TrimTheFat.html for instance).

p


April 27, 2012 | 9:01 am

Hmm, I tried doing this with all of the unix exec’s in my standalone’s contents folder including the MacOS exec, and it just said no change was made to the file. I got the impression from reading the app store article that you only need to do that if you are using third-party externals with PPC code, and that you would have to do it before you build your application. What files specifically are you talking about removing the code from?


April 27, 2012 | 9:29 am

You should simply drop the .app on TrimTheFat. Look at the differences between a fat and an intel version of the same standalone:

[attachment=192296,3783]

Attachments:
  1. Screenshot20120427at11.26.54.png

April 27, 2012 | 11:27 am

An application built using only native Max objects (in Max 6) should not yield a Universal application as you show above Patrick; it will be an Intel-only app already. Stripping the PPC code (using TrimTheFat or similar utility) is only necessary if you use Universal 3rd party externals (that include PPC code).

@John Cassidy – the apps on the App Store are compressed; in Audio Plugin Player’s case for example, what you download is 5.1 MB, but after installation, the app on your hard drive is 17.3 MB.


April 27, 2012 | 12:55 pm

Sorry, I always forget about Max6 (switching to 6 was such a bad experience that I’m happy to be back under 5, but I will soon give 6 another try as it has a lot of nice features)… The example I showed was indeed developed with Max5.


April 27, 2012 | 10:46 pm

Three questions:

1. When I quit my application the first time, OSX fills the ~/Library/Application Support//AuUnits folder with .auinfo files for all of my installed Audio Units. Why? And does OSX maintain this .auinfo files? I know users who have more than 400 AUs …

2. I guess there is no (allowed) way to let Max create subfolders within ~/Library/Application Support/ ?

3. Is it forbidden to keep my own files (help, preferences etc) in the application itself, for write and read access? Otherwise updates would get complicated. At least I don’t know how to update the content of the Library folder of the user (rename or delete outdated files for example). And where to store those files for deployment? In the application, not? Then they could remain there anyway.


April 28, 2012 | 7:09 am

Thank you, Patrick and Dan, for your responses.

@Dan Nigrin: That makes much more sense that they’re compressed. I must confess I was getting inverse file size envy… It would be nice if there were an option to compile an app to include only the code it uses, so that the minimum file size for a simple max app could be less than about 12 MB. But with new developments with gen and such, it seems like cycling is potentially moving that direction.


April 28, 2012 | 4:06 pm

@Peter Ostry:
1) That’s how Max deals with AU files – Max automatically takes care of updating that folder when you use a vst~ object. If anyone from Cycling wants to elaborate, feel free!

2) I think you *can* make subfolders there. I’ve only placed individual files there myself, but I believe subfolders are allowed there as well.

3) I don’t think you can write to files within the application bundle, no. But you *can* read from there. See my slides from the Expo ("How To Make a Slick Max Standalone") where I show (page 23) how to use a folder within the support folder (within the application bundle) for storing a documentation .pdf for example.


April 28, 2012 | 4:08 pm

@John Cassidy: Agree that would be a nice option! What I generally do is make a trimmed down set of files/folders that belong within the application bundle, and then for each new build of an app I create (as I’m working on it), I can just remove the ones that Max bundles automatically, and replace them with my "trimmed down" one and/or custom ones. I believe Oli actually scripts this, to make the process even faster.


April 28, 2012 | 8:26 pm

Dan Nigrin wrote
2) I think you *can* make subfolders there.

But I cannot create a folder from within Max, can I?

Dan Nigrin wrote
3) I don’t think you can write to files within the application bundle, no.

Technically I can. Not via a user dialog of course, but an absolute filepath saves also to the MyProgram.app/Contents/… folders and to folders I created there manually.


April 28, 2012 | 8:46 pm

@Dan Nigrin: Ah yes, fantastic ideas. That will save me a lot of time. Thanks!


April 28, 2012 | 9:08 pm

But I cannot create a folder from within Max, can I?

You can using 3rd party externals.

3) I don’t think you can write to files within the application bundle, no.

Technically I can. Not via a user dialog of course, but an absolute filepath saves also to the MyProgram.app/Contents/… folders and to folders I created there manually.

Yes, for sure you *can*; but Apple will not let you. That’s what I meant.


May 24, 2012 | 10:36 am

Hi all

Seeing as Apple have hidden the App Store guidelines document to members of the Mac Developer programme, I can’t actually see it to check something. Just wondering if anyone has any idea if using the [shell] object would be allowed in an App? I’m only using it to call ‘osascript -e’ and pass in commands directly from Max?

Many thanks

DiGiTaLFX


May 24, 2012 | 12:40 pm

Haven’t tried that myself, so not sure…. I can’t imagine that an app would not be allowed to run an Applescript, but I’m also wondering if in the new sandboxing guidelines that will soon take effect, if an app needs to ask for specific entitlements to run an Applescript??? Just wondering out loud….


May 24, 2012 | 1:04 pm

There are no entitlements that prevent you from running an Applescript that I know of (unless I’m very wrong). [shell] should be fine.

I think the main point regarding Mac App Store and Max standalone apps is now to overcome the sandboxing model imposed by Apple. I’ve been doing some testing and it doesn’t seem to be an easy job, maybe because of Max’s methods of accessing audio (I’m referring to the microphone entitlement needed when your app needs to access any audio input stream). I’ve opened a support ticket for this… we’ll keep you posted on the results.


May 24, 2012 | 1:16 pm

Oli mentioned to me another concerning thing that he noticed WRT the sandboxing guidelines – the need for sandboxed apps to now store their prefs in (yet another) new place:

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/MigratingALegacyApp/MigratingAnAppToASandbox.html

Legacy location
~/Library/Application Support//

Sandbox location
~/Library/Containers//Data/Library/Application Support//

I hope Cycling comes to our rescue (again) and allows us to have Max standalones save their prefs to this place… It’s going to be trickier though, as the standalone will need to know the app’s bundle_id. Perhaps a new attribute could be placed in the standalone object, to store this bundle_id? And if null, then the app saves its prefs in the legacy location??


May 24, 2012 | 2:08 pm

I think the pref location is taken care of automatically. There is a migration routine one can use to move prefs from the old location to the new one, and as far as I tested it, it works fine.

Take a look at https://developer.apple.com/library/mac/documentation/Security/Conceptual/AppSandboxDesignGuide/MigratingALegacyApp/MigratingAnAppToASandbox.html#//apple_ref/doc/uid/TP40011183-CH6-SW1

Later today I’ll test this again.


May 24, 2012 | 2:25 pm

Yeah, saw that, but I was unsure if the migration was a "one-time" thing only, upon an app’s first launch? Will the system somehow *always* know to write the Max prefs to the new location, each time the Max app tries to write to the old?


May 24, 2012 | 2:33 pm

I believe so, yes. At least my first tests on Matrik showed that the app was able to read/write from/to the container location. So, it seems to be done automatically. I’ll try it again, just to be 100% sure.


May 24, 2012 | 5:03 pm

@DiGiTaLFX: I found the answer about Applescript and sandboxing in an Apple FAQ. Basically, to send an Apple Event to another app, it says that "For each app you want to send Apple events to, specify the app’s bundle identifier, in all lowercase characters, as a string value for this entitlement key’s value array. For example, to enable sending Apple events to iPhoto from your app, use the string value com.apple.iphoto".

Hope this helps.


May 24, 2012 | 8:03 pm

I can confirm that reading / writing preferences in the new sandbox container location is working without any problems. Make sure the migration process worked and all your preferences were moved (not copied) to the new container.

In case you need it, the migration process is very simple:

1- Make a file named "container-migration.plist" with the following contents (more complex examples are available in Apple’s documentation):


< ?xml version="1.0" encoding="UTF-8"?>

< !DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

Move

${ApplicationSupport}/YOUR_APP

(YOUR_APP is basically the name you’ve given to your App’s preferences folder name in the [standalone] inspector window)

2- Move this file into the Resources folder inside your standalone

3- Codesign your app (with the appropriate entitlements)

4- Test

You should see that the old location is gone and a new folder with your app identifier (normally com.yourcompany.yourapp) has been created in ~/Library/Containers

That folder is all your app sees (as far as file system goes) from now on, in the sandbox model.


Viewing 150 posts - 1 through 150 (of 157 total)