The 60days and counting app review

Disclaimer: This is a venting post with no happy ending, so feel warned and don’t get disappointed at the end. Also this is a very personal opinion, as this is a personal blog.

I have an app at the App Store called “Fun Photo Booth” and me and my designer are releasing content updates around major holidays with some new content so people would find it more relevant at the exact times. On the 16th of January I uploaded a St.Valentain’s content update and a major bug fix. I thought one month in advance will be enough for the review to go through.

The app got rejected later on on few counts. I was pretty surprised because the only updates to the app itself were adding few images and changing one line of code. So here comes:

Apple Fail #1: App which is currently live gets rejected on multiple accounts, which went through approval already 2 times. Great way to build trust with developers…

One of the accounts were that my app update with desired name “St. Valentains’s Photo Booth” is infringing Apple’s patent on the name “Photo Booth”. I actually tried to argue with Apple on that account. I felt incredibly unfair that they are rejecting “St. Valentain’s Photo Booth” to the App Store, while there are present hundreds and hundreds of apps containing “Photo Booth” in their name for example “Photo Booth+”, “Photo Booth Classic” and “PhotoBooth” etc. etc. etc. Well … Apple decided exactly “St.Valentain’s Photo Booth” is infringing their patent. For some reason.

Another account on which the app was rejected was “What are you using iCloud for? iCloud cannot be used as storage.” Literally. The app reviewer literally rejected my application because it was using iCloud for storing files in the cloud. This is ridiculous! I actually sent them back a link to apple.com’s iCloud page.

Apple Fail #2: The particular app reviewer either didn’t understand English language or didn’t have any idea what iCloud is. From the way the message sent to me was written I’d guess it was the former and the latter

After we exchanged several messages through the Resolution center, Apple called on the phone. I spoke with a nice girl, who said everything was alright and after I emphasized on the fact it was an update for St.Valentain’s she said they’ll look into resolving the matter if I change the name of the app. So I did. I changed the name of the app, so I could go online for St.Valentain’s.

I didn’t hear anything from Apple for about 3 weeks. St.Valentain’s was long due, when I got a message from them in the Resolution’s center that they tried to call me but didn’t find me. I sent them my new phone number, and so they gave me another call. I’d like to mention again that St.Valentain was long due at that point and my update was killed by them.

I spoke with a guy this time, again very polite (as Apple is always on the phone btw)

He told me they cannot let the app to the App Store the way it is. “Well my update is killed now” I said “so just tell me what exactly is the problem, so I can solve it and start thinking about the next update”. “We cannot let you save to iCloud with a gesture” he said. That was totally incomprehensible to me. “What are you talking about?” I inquired. “You save to iCloud by using a gesture, we cannot allow this” he responded. This went for a while like that. It turned out the reviewer of my app, rejected it on the grounds he believed he had to use some kind of a gesture to save to iCloud (I honestly don’t know what he/she had in mind) – my app saves to iCloud when the user taps a button with an iCloud logo on it.

Apple Fail #3: The app reviewer didn’t figure out a button is to tap on.

The guy on the phone who was some kind of manager, excused himself for killing my app update and promised to work with the review team to resolve the problem and helping me out to get my next update to the App Store. I never heard from Apple about my app anymore.

The app is still rejected. I didn’t have any feedback about it. I don’t know what is the problem with it.

My previous version is still live on the App Store. It still has the major bug I wanted fixed with this update.

It’s been more than 60 days since January the 18th when I submitted the update to Apple.

None of the apps infringing Apple’s patent on the “Photo Booth” name have been removed from the App Store.

The things from my perspective look like this:

People who either don’t speak the language or are not familiar with the Apple products and services have the say whether my product goes to the App Store or not. Apple is very slow during the whole process and usually sends out canned responses. And it’s not the first time they kill one of my apps …

I really love Apple and the App Store, but way too many things in the story above feel just wrong. And I really know it’s not acceptable to say Apple is not perfect, but it’s just how it is


iOS5 by Tutorials is complete, last chance to snag it at lower price

iOS5 by Tutorials is officially finished now, with all tech reviews and refinements done. All of us are extremely happy the way we decided to publish it (only online) and I myself am very grateful to Ray Wenderlich to inviting me in as a co-author of the book. In the last months while the book was still undergoing additions and refinement we met a ton of amazing people on the book owners’ forum and we’ve helped them in using the book in the best possible way and just casually chat and make friends.

As per our initial announcement once the book is complete it’ll get it’s final price too – 54$ and we’ll explore options to spread it also via other platforms like Amazon, iBooks, etc.

But hey! Buying directly from us gives you so much more :) Reach out to the authors on the forums, discuss with other book owners and more. So if you still don’t own “iOS5 by Tutorials” you have about less than a day until we bump up the price, so right now might be a good time to check the book out : http://www.touch-code-magazine.com/iOS5ByTutorials


How to write code which is ARC, non-ARC, iOS5.0 and iOS4.x compatible

I’ve been trying to use only ARC 3rd party libraries ever since iOS5 came out and I still stand by this decision. The new features are the future, not the old features – believe me. Couple of days after I was desperate to make AFNetworking working (non-ARC btw) at all and had this unpleasant taste in my mouth after the encounter with it I stumbled upon another library which totally amazed me.

Enter MBProgressHUD.

I want to say that this is a very carefully crafted API. I liked it instantly and loved the way they put it: no matter what’s your project just include the .h and .m and it’ll work – now, ain’t that just nice?

Being compatible with everything

So why would you like to write code which is compatible with both ARC and pre-ARC? If you work on a project of yours it’s highly unlikely you’ll need that. On the other hand if you’re writing a library for others to use – that might be a good choice.

Let’s just have a look at a short piece of code, to see how it all works for MBProgressHUD:

#if __has_feature(objc_arc_weak)
	id __weak delegate;
#elif __has_feature(objc_arc)
	id __unsafe_unretained delegate;
#else
	id delegate;
#endif

You can see that the author cared about the quality of his code just by these few lines. Now as you see the features are as follows: objc_arc_weak means you’re on ARC and iOS5, otherwise if you at least have objc_arc then you’re on ARC and iOS4.x and finally if non of the above – it’s good old (more old the good of course) non-ARC and doesn’t matter which iOS.

In your actual code you can check only for objc_arc – that’d be when you have retain/release etc.

Well, this covers how to make your code compatible if you care for the people using your stuff … and if you need a HUD class for your app’s loader/spinner do checkout MBProgressHUD – it just works, no matter arc/pre-arc :) ))


Alright – here’s the deal, after the cumulative update of Lion (10.7.3) the Application Loader is broken.

Perfectly good Icon.png which is actually 57 by 57 pixels in size gets rejected during the validation process from within Xcode before submitting to the App Store. At present there’s quick way around this issue (just tested it and it works perfectly for me).

Download the latest Application Loader from here and install the application.

Then just restart Xcode, clean and archive again. It should be clean and no warnings this time.


CGPointMake, CGSizeMake, etc. shortcuts

I don’t come from a C background (when it was the time to choose I went with Pascal – it was pretty hot at the time), so some C style stuff in Objective-C are kind of mysterious to me – and I guess also for many of you.

One of those oldies are the structures. Unfortunately they are all over the place – CGPoint, CGSize and CGRect for example. And it always annoys me to have all these long function names to write like CGPointMake, CGSizeMake and CGRectMake. While digging through some 3rd party libraries I noticed something that looks like the ultimate solution for me and my functions hurdle. [...]

ASIHTTPRequest is dead, now what?

We all loved the magnificent networking framework by Ben Copsey, but in a heartfelt post he said it doesn’t make sense for him to continue updating it and converting it to ARC. So … ASIHTTPRequest is dead now what? We will have to find another networking framework to work with. I for one have been [...]

Unit testing for blocks based APIs

In this article I’m not going to explain how unit tests work and so on, but I’d rather cover how to overcome some obstacles if you are writing unit tests for block based APIs.

Unlike your iPhone apps the unit test suite is being started, it runs the code of all tests and then when there’s nothing more to run it just exists. If it didn’t spit any exception, the test was successful. End of story.

So let’s see how that pairs up with using blocks.

How to deal with copycats?

When you create an application in iTunes connect it automatically checks whether an app with the same name exists and doesn’t allow you to create your new app if yes. However you can always add an exclamation mark in the end of the app name or “HD” or “Lite” or whatever else and you are [...]