I first submitted Acorn 2.6.2 to the app store within 48 hours of it being possible to (this was early November). After a couple of plist mistakes, and fixing some signing errors, it was accepted and was there on day one.

Since then I've been trying to get an update out for the MAS which includes some bug fixes, as well as changing it's category from Photography to Graphics and Design (which hadn't been created yet when I first submitted Acorn).

So I'm going to list the various ways it's been rejected so far, in the hopes that my fellow developers won't get bit by the same problems I've run into.

Jan 6th I uploaded Acorn 2.6.3, and on Jan 12th it went into review. I also uploaded VoodooPad on Jan 6th and it was rejected on Jan 13th for linking against Sparkle, even though the VP didn't use it. I was under the impression that this was OK since Acorn 2.6.2 was accepted and it linked against Sparkle- but I guess the rules had changed at some point. So on the 14th after agonizing about it for a while, I rejected Acorn 2.6.3 myself to fix the "Sparkle problem".

How to fix the Sparkle problem:
Since Acorn and VoodooPad use build scripts for everything, making a version that didn't link against Sparkle was going to be a little interesting. I solved it by creating a mostly empty framework named "Noop.framework", and putting that in the same folder that Sparkle.framework lives in. Then when my build script is run for App Store builds (-s) it'll use /usr/bin/sed against Acorn's project.pbxproj and replace all instances of Sparkle.framework with Noop.framework. Then the automated build takes place, and Noop.framework gets copied in instead of Sparkle.

Problem solved- I made that fix for VoodooPad and Acorn, and VoodooPad was accepted to the App Store on the 17th. (VoodooPad was rejected one more time though, for making its "Save PDF in VoodooPad" in ~/Library/PDF Services/. Totally understood - it wasn't following the guidelines here. If your app does that- don't.)

In total VoodooPad was rejected 4 times by Apple. Each time there was something different. The most frustrating thing was- why not tell me what's wrong with it all at once? It's in though. Onward.

Acorn still had a bumpier road ahead of it. I uploaded Acorn with the Sparkle problem fixed on Jan 14th, and it was rejected on Jan 25th. This time it was rejected for making a JSTalk folder in ~/Library/Application Support/. Ok, yes- Acorn wasn't respecting the user's file system. But why wasn't I told about this in the previous rejection?! Why was it accepted in the first place? That's 11 days wasted waiting for a review for something that I could have been told previously.

If you're a dev using JSTalk, make sure to grab the latest version which contains this fix.

It was an easy fix, and I uploaded Acorn again on the 25th of Jan. It was rejected again today (Feb 1) for a couple of reasons - private APIs. Acorn had a hidden pref (by default off) that would use _LSSetStrongBindingForRef when saving a file to associate it with Acorn. Remember when creator codes were killed in the Finder? This was for those folks who cared. Quick fix, easy to delete code that's hardly ever used.

Acorn was also using NSActionCell's _controlView instance in a couple of places. Wish I could remember why I did that, but it was an easy fix as well).

Harder problem: Acorn uses the BWToolKit framework, which uses a bunch of private APIs. Ugh. Specifically NSTokenAttachmentCell's _tacFlag and NSScroller's sFlags. I didn't even want to get into these problems, so I just deleted the classes which used those calls from the framework and rebuilt (Acorn didn't use any BWToolKit classes which used those private APIs). So if you're using BWToolKit- make sure to clean it up before submitting.

Acorn also used a non-public Framework which grabbed NSEvent's _modifierFlags. That was another simple cleanup + recompile.

This latest update was also dinged for one more thing- which I don't completely understand and which is probably just a mistake on Apple's part: "2.26 Apps that are set to auto-launch or to have other code automatically run at startup or login without user consent will be rejected".

Acorn doesn't do this at all. It has a startup window which there's a preference to show or hide at launch, but that's it. I've written back for an explanation, hopefully it's just confusion on the reviewers part.


I don't write this so that other folks will get foamy at the mouth at Apple. I honestly hope it'll help people avoid the problems I've run into because it's been extremely frustrating getting piecemeal rejections; why oh why can't Apple just report everything at once? And why do I need to submit a new binary to change categories? Ugh.

Anyway- I've submitted 2.6.4 today (I'm skipping 2.6.3 for MAS- since that went out to direct customers weeks ago and I've got some new bug fixes). Hopefully I'll have some good news to write about in the coming weeks.