iOS is the Worst Platform for Development

Releasing an application on the App Store is ridiculously inconvenient.

Reason 1: Review Time

The Apple Review period is the greatest and dumbest obstruction facing App Store development. There is no reason for it. The system of human review is inherently inconsistent and unfair. There exists some dry bullshit about “app quality” – a fundamentally flawed approach from the perspective of App discovery. Users don’t discover bad quality apps. If they do, they don’t keep them. It’s a simple system and it works. Google Play works like this.

Why does Apple really have a review board? My theory is a theory for (partly) why Steve Jobs didn’t want Flash on iOS – also a similar reason of why Apple became so loved and Microsoft so hated: Public ignorance.

Early versions of Windows involved very little security measures for executable applications in comparison to today. Who did people blame when their application crashed? Would they say, “Oh no! Sim City just froze! I wish the developers of Sim City would fix these bugs!”

No, people never used to say that. They would say, “Oh no! Sim City just froze! Windows sucks!”

My theory is that Steve Jobs looked at Flash the same way. If someone ended up visiting a buggy Flash website, they would blame the IPhone. The public a decade ago mostly didn’t distinguish between software and operating systems. Today the public is much more aware and educated about this difference. If an App is slow, people are less likely to complain about  their smartphone or mobile OS and more likely to complain to the App developer.

Only a theory, but I think it extends to the App Store review process. Steve Jobs and Apple were afraid that if there were buggy/poor apps in the App Store, people would associate bugs and poor quality with Apple – something very counter to their brand and message.

But with changing times, Apple hasn’t adapted. Guess how long it took me to get my Android app published and available on the Google Play Market? I simply upload the IPA and hit publish. I absolutely love developing for Android because it’s almost as easy as it possibly can be.

Apple’s review process is bloated with inefficiencies. The smallest changes often times involve a brand new week long review process.

Fairness? LOL. How is it fair that one person (reviewer) has complete power over your app publishing. Frustration is a nice word for the feeling one gets seeing their app rejected for a reason that was apparently ignored for another app.

According to Apple’s Responding to an App Rejection pop-up window, “Note that while other currently available apps may appear to be non-compliant, citing these will not be considered a valid reason for overturning a rejection.”

That’s swell of you Apple; looks like so many people reported these inconsistencies that you had to put a response.

Here’s the real problem with this pretentious system. Apple is saying their individual reviewer knows better than the public about which apps are “quality” and which apps aren’t.

The ironic truth of the App Store review process is that it actually creates an ecosystem of bad quality apps. Find a critical bug in your app? You can’t just replace the app – you have to go through the entire review process again! What if you have a bug that deletes all users data? What if your server that your app connects to becomes compromised? You still have to wait a week to get that update to your users! Absurd! In a week you can lose your users due to a critical bug.

How does Google approach this problem? There isn’t a problem. On Google Play you can simply replace the app with a new version from their developer console and within hours your users get the new update.

Reason 2: Application Loader

There are multiple tools out there for developers to export IPAs (Phone Gap, Unity, Adobe Air, etc). However, it is impossible to submit your App to the Apple Store unless you use the Application Loader tool that is in XCode. Have Windows? Use Linux? Looks like you’re going to have to open your wallet some more to buy a Mac computer or virtual machine to run Mac OS so you can download XCode and install this stupid Application Loader.

Here’s an obvious question… Why doesn’t Apple allow users to simply use a website upload form to upload their IPA? Is it to sell more OSX licenses?

Can you imagine if Google required users to buy a Chromebook in order to upload Apps using some “application loader” only available on Chrome OS?

Let me also point out the ineptitude of the Application Loader software itself. The Application Loader fails to checks for many issues (missing screenshots etc). For example, I recently uploaded an IPA and received a “green check mark” from the Application Loader indicating the IPA was submitted for review successfully. An hour later I happened to check my email only to see that the IPA was “automatically rejected” because it was missing a screenshot for IPhone 5 size devices… Why didn’t the Application Loader detect this issue? Even more importantly, why didn’t ITunes Connect allow me to get to a “Ready for Upload” state in the first place if I didn’t upload that screenshot?

“So what’s the big deal? Just reupload and resubmit”

Well considering that just building a “signed” IPA can take 20 minutes and submitting an IPA through the Application Loader can take 20 minutes, it is quite annoying to have to go through all of that multiple times throughout the day.

The thing I hate most in iOS development is the time wasted on bullshit. Spending an entire freaking day just trying to get my app submitted then a week to get it on the app store is ridiculous.

19 thoughts on “iOS is the Worst Platform for Development”

  1. I agree about Apple being quite frustrating. There is only 1 thing I like better about their store from the developer point of view: The massive app size limit. Android apps are limited to 50mb without splitting up the APK is separate files, because it has to work on old Android 1.6 (I believe) phones. There is no option like “Only for tablets” to allow for larger sizes in the app store.

  2. As a non-developer, the human approval process is something that I appreciate. As a former manager of a Verizon store, I’ve seen too many people get their equipment whacked out by a less-than stellar droid app.

  3. Danny, by writing this post you’ve really abused your own status of ‘engineer and entrepreneur’.

    Being myself both android and ios developer here are the few things which are unambiguous realities:

    1. Appstore review process is good and is really required. This helps Apple to not keep useless apps ( increasing their database in vain. ) + bad apps of appstore will cause good apps to hide in back pages while a user makes a search. Imagine 20 bad apps and 5 good apps ( 20:5 is actually the ratio of apps quality on android ). Now imagine if the initial search page hold only a list of 20. Then the probability of user seeing the bad:good apps is 17:3 approx. Plus imaging users wasting their time on downloading/using and deleting the bad apps. I hope you get the idea. Hence, its better to wait for human review process, than just let the users add crass quality apps in 1 hour ( approx app visibility time on android store ). Also, kindly do a thorough check of apps in each category of android, you’ll find android store loaded with crass and useless apps in tons.

    2. Development platform of iOS is smooth and organised. Android platform sucks! There is no standardization between hardware and code. Everything is different on different devices. Companies keep manufacturing different devices in context of hardware and dimensions + Android’s OS keeps performing enormous amount of changes in their classes. Tons of classes will get introduced and tons will be removed. If the classes are not removed then tons of news methods will be added and tons will be deprecated. This only indicates their super dis-organized pile of codes making the android os. It has the shittiest UI management style. The funniest stuff that I noticed on android in that when you use Android pre 3.0’s heavily fragmented and complicated Animation classes, you end up moving a View ( say button, etc. ) nicely with animation, but the touch area will remain at the initial position without any changes. I mean who the f*** was the admin panel there in android who gave the permission to release such useless classes. If at all android is stable today, then its only due to Linux Kernel, Sweet Java Language, Sweet OpenGL and robust hardware ( even though fragmented ) created by electronic companies. If you remove all this then you’ll be left with the shittiest, dis-organized pile of codes, nothing else. One set of code never works on all the devices and this is the reason Android developer’s can never be confident of a particular code that whether or not it will work on all devices. Lol. On the other hand, look at iOS in this case. All the animation working in iOS 2.0/3.0 still works till iOS 6.0 and above. If there are any changes in iOS, then it will be only to a factor of 1-2%. During the releases of higher iOS version, I never say iOS came up with any additional requirement of backward compatibility library, like the one that we see in android “android_support_v4.jar”. The reason android requires you to add this library only profounds the fact that they din’t even think of developing a backward compatible code. And you say iOS is the worst!!?

    You’re blaming the whole iOS platform for just due to your own dissatisfaction of its app uploading procedure. I mean I seriously am surprised an engineer + entrepreneur would think and write such blog.

    1. Rahul,

      Thanks for your thorough reply. Here are my thoughts regarding your main points:

      “Imagine 20 bad apps and 5 good apps ( 20:5 is actually the ratio of apps quality on android ). Now imagine if the initial search page hold only a list of 20. Then the probability of user seeing the bad:good apps is 17:3 approx.”

      Not sure where this ratio comes from, but even if it were true, you are assuming the results from a search are in random order. The Google play store shows the most relevant and popular apps for a search term. Considering there are more than 20 apps for a given search term in the play store, the first 20 apps will probably have more than 10 “good apps”

      Also, you are assuming that the “bad and useless apps” in the play store wouldn’t pass in the apple app store (which isn’t true). People leave reviews on apps in the android store just like in the play store which also helps filter for good apps.

      Plus, if an app IS broken, at least a developer has the chance to replace the app.

      Arguing that the by not having a review process the play store has worse apps is like arguing the web is bad because there isn’t a review process for people to publish websites.

      “Development platform of iOS is smooth and organised. Android platform sucks!”

      The pervasiveness of android is the reasons you are having these issues. There are definitely compatibility quirks as new devices with new hardware come out – but that is expected. Just like when new retina interfaces came out for iPhone and iPad developers had to redo their layouts and apps. But this is just the nature of mobile development. If there are some specific deprecated methods of doing things in Android that has caused you issues I’m sure that has been frustrating; however, consider that you have the ability to make an android app that only jailbreak ‘ed iOS devices could run – to me it is no contest what is more fun to develop on.

    2. google has forked webkit to blink, optimizing and surpassing its predecessor. apple used to restrict all 3rd party browsers to use a crippled internal webkit much like htmlhelp on windows except microsoft never shackles anyone.
      now they relaxed it alllowing the same engine as safari except that google has a better engine in the works namely blink.

      so the way i see it, when you do a search on browsers, you’ll get 100% bad apps. as a developer, would you in any good conscience support a platform as such.

  4. The reason android requires you to add this library only profounds the fact that they din’t even think of developing a backward compatible code. And you say iOS is the worst…Thanks for sharing all that great information..

  5. As an iOS developer I love to develop an app for iOS. Even today, with the help of mobile app development platforms like Phonegap, Telerik, Configure.IT etc ., iOS app development is on top.

    You can see the features of an app development tool here:

    Just take a look on above link. As per an article, a 12 year old boy has developed an iOS app with the help of mobile app development platform.

    After reading the features, you will surely love the iOS app development, that’s for sure.

  6. What if your server that your app connects to becomes compromised? You still have to wait a week to get that update to your users!

    Not true, you can ask for an expedite review, which is usually granted within a day max.

  7. Thanks for your article. Having developed an application for Android I have to port it to iOS and I can tell you it’s no fun.

    Here is what I dislike about Apple:

    I think Apple’s tools are not only extreme incompatile but also horrible to use. Android Studio offers you much better help in editing the code. Even open-source tools like Eclipse or NetBeans work much better than XCode. Moreover, creating activities and fragments using XML works like a charm in Android, whereas iOS developers are constantly pushed to use those blinky-blinky layout editor.

    In addition, Android uses the great and straightforward Java language which simply feels much more elegant than Swift and more modern than Objective-C (okay, it is 15 years younger). I am looking forward for Java 8 support.

    Furthermore, Google supports the use of different programming languages/JavaScript engines. In contrast, Apple tries to hold them back at any cost. So much about “think different”.

  8. Hate the Apple Development Environment too. Just today I had to add a Russian translation to the App store’s app description. In Google Play, it was just a few clicks and you’re done. In Apple’s iTunes Connect you have to publish an entire new app version just to add a App Store translation. This is just one of the many annoyances that makes the entire experience suck.

  9. I hate to admit it, but slowly, I start to agree with stuff like this. A few years ago, I still used to be very “forgiving” for anything Apple did, because their mobile software was actually very good and stable, so was the entire experience (which the App Store review process is part of), so I thought “what the heck, at least it works!”.

    Now that quality has gone incredibly downhill starting with iOS 7, 8, and especially 9 (which was supposed to be the “Snow Leopard” release of iOS!), I’ve become much less forgiving. Like, something as simple as the Weather app has now been completely broken for the past 3 iOS releases or so (part of the background visible at the top, no updating, etc.). This wouldn’t have been possible “when Steve still was here”.

    Given that iTunes Connect also grows ever more bloated and slower, and developing apps for iOS becomes ever harder and more convoluted, I’m very pleased to announce my pending purchase of my first Android (which I used to hate!) device. Yay!

    (OK, the Audio stack on Android still royally sucks (pretty strange for a … phone, right?), but I’ll be as forgiving with this as I used to be with Apple for their review and codesigning and certificate shit).

  10. In general I think iOS development sucks a lot more. I have come to hate Apple’s obsession with certificate’s and profiles. Things that are dead easy on Android(Google) like Push Notifications are way over engineered on Apple’s platform. Also Xcode has plenty bugs to make your development process unpleasant.

  11. “time wasted on bullshit” — like, implementing a huge bunch of ridiculous workarounds to get the most basic things going — like, a WKWebView being able to access the Documents folder (not possible, you have to copy everything to the tmp directory first!)

    Or, incredibly ridiculous function names like copyItemAtPathIfItNotAlreadyExists: toPathIfWeatherIsGood:

    etc. 😉

  12. …this just in: iTunes Connect, where the “+” button next to “Build” suddenly disappears forever and you simply can’t assign a binary anymore to your Update. GR8!

  13. IMO the App Store is loaded with Bad apps. So the review board allows a lot of waste code to enter store. If the review board which is already allowing bad apps to enter I would NOT wanna know how bad an app has to really be to become rejected !

    That said – if the reason for rejection is political it would suck but I don’t think Apple would dare that.

  14. Apple review process is hateful. They don’t care to offend you with harsh words. They will call you copycat and say that you are misleading users if they think you are copying some other app even if your app has nothing to do with the other one. Apps that are references for other apps, like courses or reference guides for software like Audocad and others have to use the word FOR. Imagine having to name your course using a bullshit name like COURSE FOR BEGINNERS FOR AUTOCAD. You are not allowed to use AUTOCAD COURSE FOR BEGINNERS but at the same time, this rule is only valid for indie developers. Big names like Apress and others can name their books with the titles they like and Apple put their tail between their legs. Apple is just courageous with regular people. See what they did to Uber after discovering a massive fraud? Call the CEO for a talk and that’s it. A regular Joe would be expelled from the store and burnt live on their campus.

    Other hateful thing about the review process is that they never talk to you directly what was the reason for the rejection. They fucking copy and paste from their bible of bullcrap rules and mail you. But they do not copy the full explanation, just fragments. Example:

    “1.3. Copycat or misleading.”

    and fuck you trying to discover what they mean by that. So, you guess, change something, and they reject again, and again, again… this is a game for them. They love to reject. One reviewer rejects and tells you one thing. You change and another reviewer rejects the change saying that it should be as before. Ah, and if you complain about a rejection they will find more bullcrap reasons to reject.

    I removed one app of mine from the store because they demanded the app to follow a path that was not the idea I had for the app. My problem was creating an app that was better to deal with pictures than their app Pictures. So they did the hell to screw my app and they won. I removed the app from the store because I will not disfigure my app and piss users to please the gods of bullcrap.

  15. 2 years ago, I had no mobile app development experience and I taught myself hybrid app development, using Cordova/Ionic, for both Android and Apple. At that time, I had no dog in this Apple v Android discussion.

    But I do now!

    1. On my windows machine I could build everything for Android and Windows phones. For iOS I had to go out and buy a used iMac.
    2. I do everything now on my windows computer, developing all my code and content for Android. And when ready, I finally port all the code over to the iMac and pray it works. It usually doesn’t. I build the project then load it into Xcode…and cross my fingers on the first compile. 90% of the time it fails.
    3. The failures on iOS are typically always related to needing the latest version of XCode or which devices Xcode is aware of. I then have to download the latest version of Xcode….ONLY to find out the latest version won’t run on the current operating system. So I try to download the latest version of the OS ONLY to find out that version OS won’t run on my current iMac. So i have to go out and buy another iMac – GENIUS APPLE!
    4. Ok ok ok…so I finally get the new iMac, get the latest OS, download and install the latest Xcode – only to find that Xcode is missing components and buggy. I hook up my newly purchased $350 used iPhone (for testing you know) to find out that Xcode can’t port the app the phone because it doesn’t have a profile ID for the phone.
    5. I have to go log into and add the UDID to the approved “devices” developer list. Then I have to allow “this computer” access to the phone I just physically connected to it – and then find a way to stop f’n iTunes from opening everytime I connect the iPhone to iMac. Ok…PHONE FINALLY HOOKED UP.
    6. Compile app to phone…”FAILED” – Xcode doesn’t recognize the latest version of the iPhone device type running the latest iOS version – I have to go find a dev code type file that matches THIS iPhone to THIS iOS and copy that file into XCode…restart Xcode and recompile.
    7. Compile….and FAIL. Ah forgot to load a Developer Provisioning file…lets go sign the developer app on the developer computer for the developer iPhone.
    8. Ok, Recompile…and…WOW…the app compiled…usually a list of little things I gotta go tweak that are Apple specific…ok, so be it. at least the damn thing finally compiled.
    9. App good…lets go upload it. Holy f’n hell. Its been like 3 days since I completed the Android app. Upload it…lets do the Validate App. It failed…missing a new iPhone 1024×1024 png icon (only when you add the png it doesn’t like it….but when you load the JPG – it some how works). Ok…validate again…It failed. Some weird error requiring a command line removal of cached content in the developer path somewhere. Ok…validate again…FAILED. Developer ID failed to pass validation – BUT its auto-signed, why is failing? SOLUTION: simply uncheck the auto-sign feature…and re-check it…and validate again. AHHHHH, it finally passed. Ok…time to upload.
    10. Upload it…It passfailed – huh? It says it failed because it still can’t find that damn 1024×1024 png icon…but yet it now exists as an uploaded version on itunesconnect. Ok…so lets create the new version on itunesconnect and just manually upload the stupid 1024×1024 icon. ALL looks good – lets submit it.
    11. Rejected: icon missing (Day 1).
    12. Add AGAIN, upload NEW version (because you can’t deleted a failed version, you have to create an entirely NEW version – now my Android App is 2.1 and my iOS app is 2.2. Grrrrr.
    13. Rejected: app store description is insufficient. (Day 2) WHAT…its the same app store description that passed the previous 18 versions. Grrrr…change upload NEW version (now 2.3) and resubmit.
    14. Fix…and resubmit: REJECTED (Day 5): the Location Permission Modal Text does not adequately describe why my app is requesting for Location permission. Uh…but its the SAME permission modal text as the last…OH…as EVERY version I have ever submitted. Fix and upload again.
    15. REJECTED: Its not loading on iPad. I argue with Review idiot…”It’s never worked on iPad, as intended, from our very first version”. 4 days of discussing and arguing with Review board…even in Xcode it specifically says for iPhone ONLY.
    16. Day 12…Got it fixed…and uploaded again…now on like ver 2.4 for my app. After 4 days of talking with Review I notified them PLEASE review asap…3 days later after calling Apple and submitting “Expedite Request” the app gets published.

    I f’n CRINGE everytime I have to do anything on the iMac for fear my app will break due to an Xcode/Software/OS change or some incompatibile setting with virtually no documentation ANYWHERE. Often I get random errors requireing I unload the project and load it fresh again. Other times I get cordova errors that I have to track down and fix in the .m/.h files – the same plugins that worked a month ago…yeah, don’t work today.

    And once I finally get all my code stable and ready to upload – then I f’n CRINGE again at the inevitable Review process that pretty much rejects my app for some cosmetic/store presence/ verbiage BS that has passed the review 15 times previously. On average, new versions of my app get rejected 35% of the time for NON BUG/NON CODE issues…and the process to get it resolved is usually 4 to 5 days.

    Never ONCE have I had anything remotely close to these experiences on Android or Windows.

    So from a guy who started out as a nothing developer with no dog in this Android vs Apple debate – I can surely tell you that now: Apple 1000% sucks to developer for.

    In my humble experience – its just a bunch of Rotten Apples!

Leave a Reply

Your email address will not be published.