Apple is Rejecting Its Own Advice

Posted on November 30, 2009

We’re not sure where to begin, so we’ll pick up the story from our last post: Static Analysis Rejection? That post has been referenced in a number of other articles about App Store rejections by RogueSheep, Daring Fireball, and App Rejections, just to name a few. We’ve had many e-mail conversations with concerned developers asking us for advice before they submit an app that takes advantage of new iPhone features while retaining compatibility with older OS versions. Unfortunately, we’re not sure what to recommend, because as soon as someone like us is rejected for following the rules, someone else reports that Apple has been extra lenient. Of course, this inconsistent behavior is nothing new.

Nobody who’s followed our story will be surprised to learn that our yet-to-be-approved (and new) app was rejected—again—on November 14th. This time, we didn’t receive a rejection e-mail; instead, we happened to login to iTunes Connect and noticed the “Rejected” status. We immediately sent an e-mail to the app review team to ask why we were rejected:

After logging-in to the portal this evening, I see that [new app name] was rejected this morning. However, I have not received an e-mail nor a reason why it was rejected. Can someone please let me know the reason so we can make necessary changes?

For what it’s worth, 16 days later, we have yet to receive any response from Apple.

We speculated that the rejection may have been for the same reason we’ve been rejected many times before…namely that Apple (and/or its static analysis tool) thinks we’re calling private APIs. So, very reluctantly, we decided to create a version that only works on iPhone 3.1 or later, and we’ve submitted it for approval. The new app changed status to “In Review” yesterday morning (November 29th), and we’ll see what happens over the coming days. We’d really like to support customers who haven’t yet upgraded to iPhone OS 3.1 or later, but it appears that Apple is giving us no choice.

Separately, we submitted an update to our existing free app, 3D Camera Lite, on November 20th. It’s a very minor update that adds frequently-requested “Save to Album” and “Send to Facebook” features. While there were no changes at all to the camera functionality from the version that is currently available in the App Store, it was rejected today. You’ll never guess the reason:

Thank you for submitting 3D Camera Lite to the App Store.  Unfortunately it cannot be added to the App Store because it is modifying or extending an undocumented API, which as outlined in the iPhone Developer Program License Agreement section 3.3.1 is prohibited:

“3.3.1 Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.”

There is no documentation for creating custom subclasses of UIImagePickerController, the organization or layout of the view hierarchy managed by UIImagePickerController, and any of the custom classes managed by UIImagePickerController in iPhone OS 3.0.1.

Camera APIs are available in the iPhone OS 3.1 SDK that allow applications to take pictures, provide camera view overlays, and add custom camera controls.  Please review these APIs to determine if they provide the functionality you require in your product.  If your product requires additional functionality that is not provided by the Camera APIs in the iPhone OS 3.1 SDK, please file an enhancement request using the Apple Bug Reporter, <http://bugreport.apple.com>.

Our speculation is that we’ve been bitten yet again by the static analysis tool. 3D Camera Lite runs on iPhone OS 3.0 or later, and we check the OS version before calling any of the new 3.1 APIs…exactly as Apple recommends in its own documentation. For 3D Camera Lite, we’re not sure what to do, so we’ve written e-mail to the app review team hoping for a useful response. We don’t want to require that users upgrade to OS 3.1 just to use this minor update. If we are left with no other choice, we may have to cancel this update, and that will only hurt our users.

Perhaps you’re wondering what Apple’s documentation has to say about using newer API features while remaining compatible with older versions. Well, in a post to the iPhone Dev Center on November 20th (how timely) titled “Adding iPhone OS 3.x Features to Your iPhone OS 2.x-compatible Apps,” they state:

By using “weak linking” in your Xcode project, you can include frameworks you’ll need for the newer features, and check for API availability when your application is running. This technique provides you with the broadest possible audience for your application.

Later, the same post references Apple’s SDK Compatibility Guide. In a section titled “Checking for Undefined Method and Function Calls” they state:

To run successfully, your code must avoid calling methods and functions in system versions that do not support them. It can do this either by checking the system version at run time and globally taking a different code path based on the version, or by checking for the existence of each Objective-C method or C function before calling it.

In the interest of full disclosure, here’s the relevant code from 3D Camera Lite and the yet-to-be-released app:

// If running OS 3.1 or newer, add overlay view
if (osVersion >= 3.1f)
{
    imagePicker.showsCameraControls = NO;

    // Add overlay view and controls
    imagePicker.cameraOverlayView = cameraView;
}

The showsCameraControls and cameraOverlayView properties are only available in iPhone OS 3.1 and later, which is why we follow Apple’s advice and check for the correct OS version before using them.

Frustrating.

Update on 12-1-2009: This morning, we received a response from Apple regarding 3D Camera Lite:

Thank you for your email. It would be appropriate to set the minimum OS to 3.1.  Once the needed changes have been made to your application, please resubmit your binary to iTunes Connect. Thank you.

Based on this response, it sounds like Apple’s own documentation is misleading at best. Our takeaway is that Apple isn’t interested in supporting users who haven’t upgraded to the latest iPhone OS version. So, reluctantly, we’ll resubmit a version that requires OS 3.1 or later.

Second update on 12-1-2009: This evening, Apple approved our new app called Spy Pix. While we’re thrilled to have it released, we’re disappointed that it requires iPhone OS 3.1 or later. Unfortunately, this appears to further confirm our suspicions.

6 Responses to “Apple is Rejecting Its Own Advice”

  1. Erotsppa
    Dec 01, 2009

    So require user to upgrade to 3.1, it’s not that hard. Do what Apple says or you’re just asking for it.


  2. Alex
    Dec 01, 2009

    @Erotsppa, you must be joking.

    He IS “doing what Apple says” and that’s just the problem. Apple is rejecting it ignoring their own advice to developers. Read the article again if you don’t understand that. He is not using private API.

    This is very legitimate and it’s documented (and recommended) by Apple how you should do that.

    What about those developers that wish to support OS 2.x while taking advantage of 3.x features?

    Consider that many iPod users still use 2.x and can not upgrade the OS without paying $10 to Apple. There are MANY iPod users who use apps but don’t want to upgrade and shouldn’t be forced to.

    If a developer can support 2.x users they should be free to do so, following Apples own advice with “weak linking”.

    Should a user be forced to pay $10 for an upgrade they don’t want so they can use an app that they like, which would normally work for them on 2.x following Apples advice on “weak linking”?

    Developers are only asking Apple to be consistent with their own rules and advice. We are trying to run a business.


  3. [...] got it approved – situation explained, problem solved! Or … is it? It would seem that Apple reviewers are playing silly games again: we submitted an update to our existing free app, 3D Camera Lite, on November 20th. It’s a very [...]


  4. Michael David
    Dec 03, 2009

    So, it did get approved? What are you “suspicions” – that Apple is forcing people to upgrade to 3.1?


  5. admin
    Dec 03, 2009

    @Michael: As stated above, Spy Pix did get approved, but only when the minimum OS was changed to 3.1. A new version of 3D Camera Lite has been submitted for approval, and it requires OS 3.1 too. It hasn’t been approved yet, though we think that it will be.

    As to “suspicions,” I don’t think they’re forcing upgrades. I simply believe that their processes are very inconsistent and unreliable, their documentation is misleading, their communication (when it exists) is terrible, and I’m sure they’re overwhelmed. But being overwhelmed is only a viable excuse for some period of time. Eventually, you’d think they would adapt to the situation.

    It’s certainly not a realistic or long-term way to run a business for either the seller (us) or Apple.


  6. Sherwin
    Dec 06, 2009

    This is horrible… I proposed weak-linking to my team so we can still support 2.X iPhone OSes, just without some of the advanced features like in-app purchases. If they’re going to reject it even though we followed their advice, that doesn’t make any sense! I hope this gets cleared up soon.



Trackbacks/Pingbacks

  1. [...] got it approved – situation explained, problem solved! Or … is it? It would seem that Apple reviewers are playing silly games again: we submitted an update to our existing free app, 3D Camera Lite, on November 20th. It’s a very [...]

Leave a Reply